Decidim Monterrey es un proyecto basado en la plataforma Decidim. Esta plataforma está implementada con Rails, un framework de desarrollo web para el lenguaje Ruby.
En este manual se describe a a grandes rasgos, de dos maneras diferentes, el proceso de instalación de Decidim Monterrey. Este manual asume que el proyecto se instalará en una máquina Linux con sistema operativo Debian. El proceso es parecido en otras distribuciones de Linux.
Este proyecto tiene una GitHub Action que construye de manera automática una imagen de Docker a partir del código fuente cada vez que se hace push a la rama principal (main). Esta imagen, una vez construida, se publica en el repositorio de paquetes de Codeando México.
La imagen contiene todas las dependencias necesarias para ejecutar el proyecto, a excepción de la base de datos (Postgres).
Los requisitos para poder ejecutar el proyecto en un servidor en la nube son:
- Instalar Docker y Docker Compose en la máquina virtual o servidor.
- Copiar el fichero
docker-compose-production.yml
a la máquina destino. - Renombrar
docker-compose-production.yml
adocker-compose.yml
- Crear un fichero
.env
en la misma carpeta quedocker-compose.yml
con las siguientes variables de entorno
RAILS_ENV=production
FORCE_SSL=no
SECRET_KEY_BASE={SECRET_KEY_BASE}
RAILS_LOG_TO_STDOUT=false
RAILS_SERVE_STATIC_FILES=true
DATABASE_URL=postgres://{USER}:{PASSWORD}@{HOST}:{PORT}/{DATABASE_NAME}
SMTP_ADDRESS={SMTP_HOST}
SMTP_DOMAIN={SMTP_DOMAIN}
SMTP_PORT={SMTP_PORT}
SMTP_USERNAME={SMTP_USER}
SMTP_PASSWORD={SMTP_PASSWORD}
- Ejecutar
docker-compose up -d --remove-orphans
para levantar la aplicación - Ejecutar
docker-compose down
para detener la aplicación
El fichero docker-compose.yml
descarga la imagen de Docker desde GitHub, lee las variables de entorno y levanta la aplicación de manera automática.
Algunos módulos de Decidim requieren de una carpeta en el servidor para la subida de imágenes. Crear la carpeta en $HOME/decidim-uploads. Esta carpeta se monta como un volumen en el contenedor de Docker de manera que no desaparece aunque se elimine la imagen y los contenedores de Docker.
Antes de correr Decidim Monterrey por primera vez es necesario realizar algunas operaciones con la base de datos:
- Crear la base de datos
docker-compose run decidim rake db:create
- Crear las tablas necesarias para Decidim. Esto se realiza corriendo las migraciones de rails.
docker-compose run decidim rake db:migrate
- Decidim Monterrey necesita datos de distritos, sectores y colonias para poder funcionar correctamente.
docker-compose run decidim rake db:seed
Esto se puede combinar en un solo comando
docker-compose run decidim rake db:create db:migrate db:seed
Dependencias previas
> sudo apt update
> sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev \
autoconf bison build-essential libyaml-dev \
libreadline-dev libncurses5-dev libffi-dev libgdbm-dev
Instalar rbenv y ruby-build
> curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash -
En caso de bash
> echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
> echo 'eval "$(rbenv init -)"' >> ~/.bashrc
> source ~/.bashrc
En caso de zsh
> echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
> echo 'eval "$(rbenv init -)"' >> ~/.zshrc
> source ~/.zshrc
Instalar Ruby, específicamente la versión 2.7.5
> rbenv install 2.7.5
Verificar la instalación de Ruby
> ruby -v
Git, Imagemagik, Node.js (16.x), Yarn, Bundler
apt-get update && apt-get upgrade -y
apt-get install -y git imagemagick wget
apt-get clean
curl -sL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
apt-get clean
npm install -g yarn
gem install bundler
Clonar este proyecto a una carpeta en el servidor. Se recomienda $HOME/decidim-monterrey.
Cambiarse a la carpeta del proyecto
> cd $HOME/decidim-monterrey
Instalar las gemas
> bundle check || bundle install --jobs=4
Instalar las dependencias de Node.js
> yarn install
Precompilar assets
> bundle exec rails assets:precompile
La base de datos ya debe estar configurada con las variables de entorno en el fichero .env
.
Decidim necesita ejecutar dos procesos en background para el envío de emails, la actualización de estadísticas y las tablas de datos abiertos.
Crear un fichero de shell con permisos de ejecución con el siguiente contenido para lanzar los procesos.
#!/bin/sh
# https://stackoverflow.com/a/38732187/1935918
set -e
if [ -f /decidim/tmp/pids/delayed_job.pid ]; then
rm /decidim/tmp/pids/delayed_job.pid
fi
bundle exec bin/delayed_job start
if [ -f /decidim/tmp/pids/clockwork.pid ]; then
rm /decidim/tmp/pids/clockwork.pid
fi
# bundle exec clockwork config/clockwork.rb
Levantarlo como proceso en background para que no se muera al salirnos de la consola.
> bin/rails s -b 0.0.0.0 &
La página oficial de Docker contiene la información necesaria para instalar el proyecto, pero para facilitar la instalación estos serían los pasos necesarios en una máquina con Linux Debian:
Actualizamos el gestor de paquetes
> sudo apt update
Instalamos las dependencias necesarias
> sudo apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
Añadimos la clave GPG de Docker, sirve para validar la autoría e integridad del paquete
> curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Añadimos el repositorio de Docker
> sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
> deb [arch=amd64] https://download.docker.com/linux/debian buster stable
Actualizamos el gestor de paquetes
> sudo apt update
Instalamos Docker
> sudo apt -y install docker-ce docker-ce-cli containerd.io
Configuramos Docker como servicio del sistema
> sudo systemctl enable --now docker
Añadimos el usuario al grupo docker para no ejecutar con privilegios root
> sudo usermod -aG docker $USER
> newgrp docker
Instalamos Docker Compose
> sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Cambiamos los permisos de ejecución
> sudo chmod +x /usr/local/bin/docker-compose