From ac23dc162f3599d2f5b0df79599d302d49b5a64d Mon Sep 17 00:00:00 2001 From: taitus Date: Tue, 13 Aug 2024 09:49:58 +0200 Subject: [PATCH 1/8] Update servers installation instructions --- docs/en/SUMMARY.md | 2 +- docs/en/installation/servers.md | 14 +++++++------- docs/es/installation/servers.md | 20 ++++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index 14a4479a6..8c07d1968 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -16,7 +16,7 @@ * [Windows](installation/windows.md) * [Vagrant](installation/vagrant.md) * [Docker](installation/docker.md) - * [Production and Staging servers](installation/servers.md) + * [Production and staging servers](installation/servers.md) * [Installer](installation/installer.md) * [Create a deploy user](installation/create_deploy_user.md) * [Generating SSH Key](installation/generating_ssh_key.md) diff --git a/docs/en/installation/servers.md b/docs/en/installation/servers.md index ad077cd36..fb3194575 100644 --- a/docs/en/installation/servers.md +++ b/docs/en/installation/servers.md @@ -1,21 +1,21 @@ -# Production and Staging servers +# Production and staging servers -## Recommended Minimum System Requirements +## Recommended minimum system requirements -### 1. Production Server +### 1. Production server -- Distribution: Ubuntu 16.04.X +- Supported distributions: Ubuntu 22.04, Ubuntu 24.04, Debian Bullseye or Debian Bookworm - RAM: 32GB - Processor: Quad core - Hard Drive: 20 GB - Database: Postgres -### 2. Staging Server +### 2. Staging server -- Distribution: Ubuntu 16.04.X +- Supported distributions: Ubuntu 22.04, Ubuntu 24.04, Debian Bullseye or Debian Bookworm - RAM: 16GB - Processor: Dual core - Hard Drive: 20 GB - Database: Postgres -If your city has a population of over 1.000.000, consider balancing your load using 2-3 production servers and a separate server for the database. +If your city has a population of over 1,000,000, consider balancing your load using 2-3 production servers and a separate server for the database. diff --git a/docs/es/installation/servers.md b/docs/es/installation/servers.md index ed00fe1c5..ce5f27e73 100644 --- a/docs/es/installation/servers.md +++ b/docs/es/installation/servers.md @@ -2,20 +2,20 @@ ## Requisitos de sistema mínimos recomendados -### 1. Production Server +### 1. Servidor de producción -- Distrubution: Ubuntu 16.04.X +- Distribuciones compatibles: Ubuntu 22.04, Ubuntu 24.04, Debian Bullseye o Debian Bookworm - RAM: 32GB -- Processor: Quad core -- Hard Drive: 20 GB -- Database: Postgres +- Procesador: Quad core +- Disco duro: 20 GB +- Base de datos: Postgres -### 2. Staging Server +### 2. Servidor de pruebas -- Distrubution: Ubuntu 16.04.X +- Distribuciones compatibles: Ubuntu 22.04, Ubuntu 24.04, Debian Bullseye o Debian Bookworm - RAM: 16GB -- Processor: Dual core -- Hard Drive: 20 GB -- Database: Postgres +- Procesador: Dual core +- Disco duro: 20 GB +- Base de datos: Postgres Si tu ciudad tiene una población superior a 1.000.000, considera añadir un balanceador de carga y usar 2-3 servidores de producción, además de un servidor de base de datos dedicado. From 81ab1948310aadbf5995efea7f204bb43b08643b Mon Sep 17 00:00:00 2001 From: taitus Date: Tue, 13 Aug 2024 09:59:05 +0200 Subject: [PATCH 2/8] Update installer installation instructions --- docs/en/installation/installer.md | 4 ++-- docs/es/installation/installer.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/installation/installer.md b/docs/en/installation/installer.md index a7020c20e..afcc9f08b 100644 --- a/docs/en/installation/installer.md +++ b/docs/en/installation/installer.md @@ -1,5 +1,5 @@ # Installer -## Installation notes for Production and Staging servers +## Installation notes for production and staging servers -Check out the [installer's README](https://github.com/consuldemocracy/installer). +Check out the [installer's README](https://github.com/consuldemocracy/installer) for detailed installation instructions. diff --git a/docs/es/installation/installer.md b/docs/es/installation/installer.md index e760fa3c3..ff6adada5 100644 --- a/docs/es/installation/installer.md +++ b/docs/es/installation/installer.md @@ -1,5 +1,5 @@ # Instalador -## Instrucciones de instalación para entornos de Producción y Pruebas +## Instrucciones de instalación para entornos de producción y pruebas -Se encuentran en el [repositorio del instalador](https://github.com/consuldemocracy/installer) +Puedes encontrar las instrucciones en el [README del repositorio del instalador](https://github.com/consuldemocracy/installer). From d425b88f2605abd185593a83e6bad3ecb0467898 Mon Sep 17 00:00:00 2001 From: taitus Date: Tue, 13 Aug 2024 12:56:00 +0200 Subject: [PATCH 3/8] Update create deploy user instructions --- docs/en/installation/create_deploy_user.md | 14 +++++---- docs/es/installation/create_deploy_user.md | 34 +++++++++++----------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/en/installation/create_deploy_user.md b/docs/en/installation/create_deploy_user.md index 4eb0053dc..54c002a31 100644 --- a/docs/en/installation/create_deploy_user.md +++ b/docs/en/installation/create_deploy_user.md @@ -2,13 +2,13 @@ [The installer](https://github.com/consuldemocracy/installer) by default connects as the `root` user only to create a `deploy` user. This `deploy` user is the one who installs all libraries. If you do not have `root` access, please ask your system administrator to follow these instructions to create a user manually. -You could create a user called `deploy` or any other name. As as example, we are going to create a user named `jupiter`. +You could create a user called `deploy` or any other name. **In this example, we are going to create a user named `jupiter`**. ```bash adduser jupiter ``` -I'm using jupiter as the user name, you should change that for whatever makes sense to you. Input a password when prompted, and just leave empty the rest of the options. +**Remember to replace `jupiter` with whatever username makes sense for you**. Input a password when prompted, and leave the rest of the options empty. Let's create a `wheel` group and add the user `jupiter` to this group. @@ -17,7 +17,9 @@ sudo groupadd wheel sudo usermod -a -G wheel jupiter ``` -Now let's give sudo privileges to the `wheel` group and allow it to not use a password, this is important so that the installer doesn't get stalled waiting for a password. +**Remember to replace "jupiter" with the username you chose earlier.** + +Now let's give sudo privileges to the `wheel` group and allow it to not use a password. This is important to ensure the installer doesn't stall waiting for a password. First we open the sudoers file: @@ -31,7 +33,7 @@ And we add this line at the end: %wheel ALL=(ALL) NOPASSWD: ALL ``` -Now we need to give the keys of the server to the new user. Don’t close the server terminal window, because you can lock yourself out of your server if there is a mistake. +Now we need to give the keys of the server to the new user. Don't close the server terminal window, because you can lock yourself out of your server if there is a mistake. Let's create the necessary directory in the server to upload the public key: @@ -51,7 +53,7 @@ Open another local terminal window (not in the server) and type: cat ~/.ssh/id_rsa.pub ``` -Copy the content of your public key to the file authorized_keys that should still be open in the server. +Copy the content of your public key to the file `authorized_keys` that should still be open in the server. Test that your user can log in by typing: @@ -73,7 +75,7 @@ Type the following command to edit the SSH config file of the server: sudo nano /etc/ssh/sshd_config ``` -Look for the "PasswordAuthentication yes" line and change it to "PasswordAuthentication no". Type Control-K to close the nano editor and type: +Look for the "PasswordAuthentication yes" line and change it to "PasswordAuthentication no". Type `Control+X` to close the nano editor and type: ```bash sudo service ssh restart diff --git a/docs/es/installation/create_deploy_user.md b/docs/es/installation/create_deploy_user.md index e30270373..f036678eb 100644 --- a/docs/es/installation/create_deploy_user.md +++ b/docs/es/installation/create_deploy_user.md @@ -1,27 +1,27 @@ # Crear un usuario para hacer la instalación -[El instalador](https://github.com/consuldemocracy/installer) de forma predeterminada se conecta como el usuario `root` sólo para crear un usuario `deploy`. Este usuario `deploy` es el que instala todas las librerías. Si no tiene acceso `root`, por favor pídale a su administrador de sistemas que siga estas instrucciones para crear un usuario manualmente. +[El instalador](https://github.com/consuldemocracy/installer) de forma predeterminada se conecta como el usuario `root` sólo para crear un usuario `deploy`. Este usuario `deploy` es el que instala todas las librerías. Si no tienes acceso `root`, por favor pide a tu administrador de sistemas que siga estas instrucciones para crear un usuario manualmente. -Puede crear un usuario llamado `deploy` o utilizar cualquier otro nombre. Como ejemplo, vamos a crear un usuario llamado `jupiter`. +Puedes crear un usuario llamado `deploy` o utilizar cualquier otro nombre. **En este ejemplo, vamos a crear un usuario llamado `jupiter`**. ```bash adduser jupiter ``` -Estoy usando jupiter como nombre de usuario, debería cambiar eso por lo que sea que tenga sentido para usted. Introduzca una contraseña cuando se le pida y deje vacías el resto de las opciones. +**Recuerda cambiar "jupiter" por el nombre de usuario que elijas.** Introduce una contraseña cuando se te pida y deja vacías el resto de las opciones. -Creemos un grupo `wheel` y añadamos al usuario `jupiter` al grupo. +Ahora, crearemos un grupo `wheel` y añadiremos al usuario `jupiter` al grupo. ```bash sudo groupadd wheel sudo usermod -a -G wheel jupiter ``` -**Recuerde cambiar jupiter** por cualquier nombre de usuario que haya elegido en el paso anterior. +**Recuerda cambiar "jupiter" por cualquier nombre de usuario que hayas elegido en el paso anterior.** -Ahora démosle al grupo `wheel` derechos de superadministración sin necesidad de usar contraseña, esto es importante para que el instalador no se quede parado esperando una contraseña. +A continuación, configuraremos el grupo `wheel` para que tenga derechos de superadministración sin necesidad de usar contraseña. **Esto es importante para que el instalador no se quede esperando una contraseña.** -Primero debemos abrir el archivo `sudoers`: +Primero, debemos abrir el archivo `sudoers`: ```bash sudo visudo -f /etc/sudoers @@ -33,9 +33,9 @@ Y añadimos esta línea al final del archivo: %wheel ALL=(ALL) NOPASSWD: ALL ``` -Ahora tenemos que dar las claves del servidor al nuevo usuario. No cierre la ventana de la terminal del servidor, porque puede bloquearse si hay un error. +Ahora tenemos que dar las claves del servidor al nuevo usuario. No cierres la ventana de la terminal del servidor, porque puedes bloquearte si hay un error. -Y escriba los siguientes comandos para crear el archivo necesario donde subir la clave pública: +Escribe los siguientes comandos para crear el archivo necesario donde subir la clave pública: ```bash su jupiter @@ -45,37 +45,37 @@ cd .ssh nano authorized_keys ``` -Asegúrese que ha [generado una clave pública](generating_ssh_key.md) en su terminal local. +Asegúrate de que has [generado una clave pública](generating_ssh_key.md) en tu terminal local. -Abra otra ventana de terminal local (no en el servidor) y escriba: +Abre otra ventana de terminal local (no en el servidor) y escribe: ```bash cat ~/.ssh/id_rsa.pub ``` -Copie el contenido de ese comando al archivo `authorized_keys` que debería seguir abierto en el servidor. +Copia el contenido de ese comando al archivo `authorized_keys` que debería seguir abierto en el servidor. -Compruebe que su usuario puede iniciar sesión escribiendo: +Comprueba que el usuario puede iniciar sesión escribiendo: ```bash ssh jupiter@your-copied-ip-address ``` -Debería ver la página de bienvenida del servidor y un mensaje como este: +Deberías ver la página de bienvenida del servidor y un mensaje como este: ```bash jupiter@consuldemocracyserver:~$ ``` -Note que el nombre de usuario en el prompt no es "root", sino su nombre de usuario. Así que todo está bien y ahora podemos bloquear la cuenta root del acceso externo y también dejar de permitir el acceso con contraseña para que sólo las personas con claves SSH puedan iniciar sesión. +Nota que el nombre de usuario en el prompt no es `root`, sino el nombre de usuario que elegiste, lo que indica que todo está bien. Ahora podemos bloquear la cuenta `root` del acceso externo y también dejar de permitir el acceso con contraseña para que sólo las personas con claves SSH puedan iniciar sesión. -Escriba el siguiente comando para editar el archivo de configuración SSH del servidor: +Escribe el siguiente comando para editar el archivo de configuración SSH del servidor: ```bash sudo nano /etc/ssh/sshd_config ``` -Busque la línea "PasswordAuthentication yes" y cámbiela por "PasswordAuthentication no". Escriba Control-K para cerrar el editor nano y escriba: +Busca la línea "PasswordAuthentication yes" y cámbiala por "PasswordAuthentication no". Escribe `Control+X` para cerrar el editor nano y escribe: ```bash sudo service ssh restart From cee4f3f02708ef1ed50ecbf3839a4f94803df746 Mon Sep 17 00:00:00 2001 From: taitus Date: Mon, 19 Aug 2024 11:23:34 +0200 Subject: [PATCH 4/8] Update ssh key instructions --- docs/es/installation/generating_ssh_key.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/es/installation/generating_ssh_key.md b/docs/es/installation/generating_ssh_key.md index e2dee3358..2ebc0f0b6 100644 --- a/docs/es/installation/generating_ssh_key.md +++ b/docs/es/installation/generating_ssh_key.md @@ -1,18 +1,18 @@ # Generación de claves SSH -Estas instrucciones le ayudarán a generar una clave pública con la que podrá conectarse al servidor sin necesidad de utilizar una contraseña. +Estas instrucciones te ayudarán a generar una clave pública con la que podrás conectarte al servidor sin necesidad de utilizar una contraseña. -En la ventana del terminal, escriba: +En la ventana del terminal, escribe: ```bash ssh-keygen ``` -Cuando se le pida el archivo en el que guardar la clave, sólo tiene que pulsar ENTER para dejar el valor predeterminado. Cuando se le pida una frase de contraseña, pulse ENTER de nuevo para dejarla vacía. Al final debería ver un mensaje como este: +Cuando se te pida el archivo en el que guardar la clave, solo tienes que pulsar ENTER para dejar el valor predeterminado. Cuando se te pida una frase de contraseña, pulsa ENTER de nuevo para dejarla vacía. Al final deberías ver un mensaje como este: ```text Your identification has been saved in /your_home/.ssh/id_rsa.
 Your public key has been saved in /your_home/.ssh/id_rsa.pub. ``` -Tome nota de la ubicación del archivo **id_rsa.pub**, porque necesitará el contenido de este archivo más adelante. +Toma nota de la ubicación del archivo **id_rsa.pub**, porque necesitarás el contenido de este archivo más adelante. From 6316938e3b558f4b16e5762b603012131d034368 Mon Sep 17 00:00:00 2001 From: taitus Date: Mon, 19 Aug 2024 13:12:33 +0200 Subject: [PATCH 5/8] Update manual installation instructions --- .../manual_installation_production.md | 15 +++++++++------ .../manual_installation_production.md | 15 +++++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/docs/en/installation/manual_installation_production.md b/docs/en/installation/manual_installation_production.md index 1d31a7a6b..994da4bdb 100644 --- a/docs/en/installation/manual_installation_production.md +++ b/docs/en/installation/manual_installation_production.md @@ -1,8 +1,8 @@ # Manual installation for production -**WARNING:** This method is *not recommended* and not officially supported, since you should use the [installer](https://github.com/consuldemocracy/installer) instead. Use this method if the installer isn't an option and you can already deal with PostgreSQL, puma or passenger, NGNIX and SSL (with letsencrypt, for instance). +**WARNING:** This method is *not recommended* and not officially supported, since you should use the [installer](https://github.com/consuldemocracy/installer) instead. Use this method only if the installer isn't an option and you have experience configuring PostgreSQL, Puma or Passenger, NGINX, and SSL (with letsencrypt, for instance). -This guide assumes you've already [installed all the necessary packages](prerequisites.md) on your system. +This guide assumes you've already [installed all the necessary packages](prerequisites.md) on your system. Make sure to install RVM to be able to install the Ruby version required by the project, which is defined in the .ruby-version file. Also, ensure you have installed FNM to install the Node.js version defined in the .node-version file. The created directory structure herein is to be used with [capistrano](https://capistranorb.com/documentation/getting-started/structure/). @@ -21,22 +21,24 @@ mkdir -p shared/public/assets shared/public/system shared/public/ckeditor_assets ## Initial release -Extract from the repo the first release to the respective directory, and create the symbolic link of the current release (replace `` with the latest version number, like 1.3.1 or 1.4.1): +Extract from the repo the first release to the respective directory, and create the symbolic link of the current release. Be sure to replace `` with the number of the latest stable version of Consul Democracy, such as 2.1.1 or 2.2.0. To find the most recent version, visit the releases section in the [Consul Democracy repository](https://github.com/consuldemocracy/consuldemocracy/releases) ```bash +mkdir releases/first cd repo git archive | tar -x -f - -C ../releases/first cd .. ln -s releases/first current ``` -## Gems installation +## Installing dependencies -Install the gems Consul Democracy depends on: +Install the dependencies for Consul Democracy: ```bash cd releases/first bundle install --path ../../shared/bundle --without development test +fnm exec npm install cd ../.. ``` @@ -53,7 +55,7 @@ ln -s ../../../shared/config/secrets.yml cd ../../.. ``` -Edit the `shared/config/database.yml` file, filling in `username` and `password` with the data generated during the [PostgreSQL setup](debian.md#postgresql-94). +Edit the `shared/config/database.yml` file, filling in `username` and `password` with the data generated during the [PostgreSQL setup](debian.md#postgresql). We now need to generate a secret key: @@ -78,6 +80,7 @@ Create a database, load the seeds and compile the assets: ```bash cd current + bin/rake db:create RAILS_ENV=production bin/rake db:migrate RAILS_ENV=production bin/rake db:seed RAILS_ENV=production bin/rake assets:precompile RAILS_ENV=production diff --git a/docs/es/installation/manual_installation_production.md b/docs/es/installation/manual_installation_production.md index 6169e3105..26031ea63 100644 --- a/docs/es/installation/manual_installation_production.md +++ b/docs/es/installation/manual_installation_production.md @@ -1,8 +1,8 @@ # Instalación manual en producción -**AVISO:** Recomendamos *no usar* este sistema, para el que no damos soporte oficial, ya que siempre que sea posible debe utilizarse el [instalador](https://github.com/consuldemocracy/installer). Utiliza este método si usar el instalador no es una opción y si tienes experiencia configurando PostgreSQL, puma o passenger, NGNIX y SSL (con letsencrypt, por ejemplo). +**AVISO:** Recomendamos *no usar* este sistema, para el que no damos soporte oficial, ya que siempre que sea posible debe utilizarse el [instalador](https://github.com/consuldemocracy/installer). Utiliza este método solo si usar el instalador no es una opción y si tienes experiencia configurando PostgreSQL, Puma o Passenger, NGNIX y SSL (con letsencrypt, por ejemplo). -Esta guía asume que ya has [instalado todas las dependencias necesarias](prerequisites.md) en tu sistema. +Esta guía asume que ya has [instalado todas las dependencias necesarias](prerequisites.md) en tu sistema. Asegúrate de instalar RVM para poder instalar la versión de ruby necesaria para el proyecto que está definida en el fichero .ruby-version y también asegúrate de instalar FNM para poder instalar la versión de node.js definida en el fichero .node-version. La estructura de directorios que se crea a continuación está pensada para usarse con [capistrano](https://capistranorb.com/documentation/getting-started/structure/). @@ -20,22 +20,24 @@ mkdir -p shared/public/assets shared/public/system shared/public/ckeditor_assets ## Versión inicial -Crea una primera carpeta en "releases" a partir del repositorio, junto con un enlace simbólico a la versión actual (sustituye `` por el número de la última versión estable de Consul Democracy, como 1.3.1 o 1.4.1): +Crea una carpeta en _releases_ a partir del repositorio y luego genera un enlace simbólico a la versión actual. Asegúrate de sustituir `` por el número de la última versión estable de Consul Democracy, como 2.1.1 o 2.2.0. Para encontrar la versión más reciente, visita la sección de _releases_ en el [repositorio de Consul Democracy](https://github.com/consuldemocracy/consuldemocracy/releases): ```bash +mkdir releases/first cd repo git archive | tar -x -f - -C ../releases/first cd .. ln -s releases/first current ``` -## Instalación de gemas +## Instalación de dependencias -Instala las gemas de las que depende Consul Democracy: +Instala las dependencias de Consul Democracy: ```bash cd releases/first bundle install --path ../../shared/bundle --without development test +fnm exec npm install cd ../.. ``` @@ -52,7 +54,7 @@ ln -s ../../../shared/config/secrets.yml cd ../../.. ``` -Edita el fichero `shared/config/database.yml`, rellenando `username` y `password` con los datos generador durante la [configuración de PostgreSQL](debian.md#postgresql-94). +Edita el fichero `shared/config/database.yml`, rellenando `username` y `password` con los datos generador durante la [configuración de PostgreSQL](debian.md#postgresql). Ahora generamos una clave secreta: @@ -77,6 +79,7 @@ Crea una base de datos, genera los datos necesarios para que la aplicación func ```bash cd current + bin/rake db:create RAILS_ENV=production bin/rake db:migrate RAILS_ENV=production bin/rake db:seed RAILS_ENV=production bin/rake assets:precompile RAILS_ENV=production From c27a32a5f3b85233b3d45d1f2fab7723471d8179 Mon Sep 17 00:00:00 2001 From: taitus Date: Mon, 19 Aug 2024 16:05:31 +0200 Subject: [PATCH 6/8] Update digital ocean instructions --- docs/en/installation/digital_ocean.md | 36 +++++++------------ docs/es/installation/digital_ocean.md | 50 +++++++++++--------------- docs/img/digital_ocean/create.png | Bin 7158 -> 0 bytes docs/img/digital_ocean/droplets.png | Bin 4100 -> 0 bytes docs/img/digital_ocean/hostname.png | Bin 13751 -> 0 bytes docs/img/digital_ocean/image.png | Bin 16459 -> 0 bytes docs/img/digital_ocean/new_ssh.png | Bin 55323 -> 0 bytes docs/img/digital_ocean/region.png | Bin 13586 -> 0 bytes docs/img/digital_ocean/server.png | Bin 9963 -> 0 bytes docs/img/digital_ocean/size.png | Bin 20888 -> 0 bytes docs/img/digital_ocean/ssh_keys.png | Bin 4517 -> 0 bytes 11 files changed, 33 insertions(+), 53 deletions(-) delete mode 100644 docs/img/digital_ocean/create.png delete mode 100644 docs/img/digital_ocean/droplets.png delete mode 100644 docs/img/digital_ocean/hostname.png delete mode 100644 docs/img/digital_ocean/image.png delete mode 100644 docs/img/digital_ocean/new_ssh.png delete mode 100644 docs/img/digital_ocean/region.png delete mode 100644 docs/img/digital_ocean/server.png delete mode 100644 docs/img/digital_ocean/size.png delete mode 100644 docs/img/digital_ocean/ssh_keys.png diff --git a/docs/en/installation/digital_ocean.md b/docs/en/installation/digital_ocean.md index d67c5568a..fe5a32513 100644 --- a/docs/en/installation/digital_ocean.md +++ b/docs/en/installation/digital_ocean.md @@ -4,25 +4,23 @@ These instructions will help you register and buy a server in Digital Ocean to i First you need to [sign up](https://cloud.digitalocean.com/registrations/new) and provide your personal information. -Once you are logged in, you need to create a Droplet (that’s the name that Digital Ocean uses for a Virtual Server). Click on the “Create” green button at the top of the page and select "Droplets": +Once you have logged in, you'll need to create a Droplet (this is the name Digital Ocean uses for a cloud server) following this [guide](https://docs.digitalocean.com/products/droplets/how-to/create/) and configure it with the following recommendations: -![Digital Ocean Droplets](../../img/digital_ocean/droplets.png) +## Region -In the next page, you need to select Ubuntu (it should be pre-selected) and change the version **from 18.04 x64 to 16.04 x64**. +In the "Choose Region" section, to avoid latency in the service, select the region that is geographically closest to your users. -![Digital Ocean Choose an image](../../img/digital_ocean/image.png) +## Image -In the "Choose a size" section select the **$80/mo 16GB/6CPUs** option if this is going to be a production server. If you are just setting up a test system with a few users the cheapest $5/mo option can be enough. +In this "Choose an Image" section, we recommend selecting Ubuntu with the latest version supported by the installer, which in this case would be **24.04**. -![Digital Ocean Choose a size](../../img/digital_ocean/size.png) +## Size -Leave the rest of the options with their defaults until “Choose a datacenter”. Select the one that will be geographically closer to your users. If you are in the EU, select either Frankfurt or Amsterdam data centers. +In the "Choose Size" section, if the goal is to create a production server, we recommend choosing an option with at least **16GB of RAM**. If you are setting up a testing system or a staging environment with just a few users, the cheapest option may be sufficient. -![Digital Ocean Choose a region](../../img/digital_ocean/region.png) +## Authentication -In the "Add you SSH keys" section click "New SSH Key" button. - -![Digital Ocean Add your SSH Keys](../../img/digital_ocean/ssh_keys.png) +In the "Choose Authentication Method" section, select "SSH Key" and click the "New SSH Key" button to add your key. In the pop up window that appears you need to copy and paste the public key that we [generated in the previous step](generating_ssh_key.md). To see the content of this key in the terminal window type: @@ -36,24 +34,16 @@ You should see a text like this: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDy/BXU0OsK8KLLXpd7tVnqDU+d4ZS2RHQmH+hv0BFFdP6PmUbKdBDigRqG6W3QBexB2DpVcb/bmHlfhzDlIHJn/oki+SmUYLSWWTWuSeF/1N7kWf9Ebisk6hiBkh5+i0oIJYvAUsNm9wCayQ+i3U3NjuB25HbgtyjR3jDPIhmg1xv0KZ8yeVcU+WJth0pIvwq+t4vlZbwhm/t2ah8O7hWnbaGV/MZUcj0/wFuiad98yk2MLGciV6XIIq+MMIEWjrrt933wAgzEB8vgn9acrDloJNvqx25uNMpDbmoNXJ8+/P3UDkp465jmejVd/6bRaObXplu2zTv9wDO48ZpsaACP your_username@your_computer_name ``` -Select and copy all the text and paste it in the pop-up window like this: - -![Digital Ocean New SSH Key](../../img/digital_ocean/new_ssh.png) - -Please note that there will be two little green checks. If they are not there, retry copying the text because you probably left something out. Give your key a meaningful name, like **Consul_Democracy_key** and click "Add SSH Key" button. +Select all the text, paste it into the pop-up window in the "SSH Key content" field, add a meaningful name such as **Consul_Democracy_key**, and click the Add SSH Key button. By using an SSH key instead of a user/password combination to access your server, it will be much more secure, as only someone with the private SSH key can access the server. -Now in the "Choose a hostname" section change the default for something more meaningful, like **consuldemocracyserver** for example. +## Hostname -![Digital Ocean hostname](../../img/digital_ocean/hostname.png) +Now, in the "Finalize Details" section, change the default value of the Hostname field to something more meaningful, like **consuldemocracyserver**. At the bottom of the page you’ll see a summary of your options. Check that everything is OK and click the big green "Create" button. -![Digital Ocean create](../../img/digital_ocean/create.png) - It will take a few minutes, and at the end you will have a shiny new server. It will look like this in the Digital Ocean page: -![Digital Ocean server](../../img/digital_ocean/server.png) - -Next to setup Consul Democracy in the server check the [installer's README](https://github.com/consuldemocracy/installer) +Next to setup Consul Democracy in the server check the [installer's README](https://github.com/consuldemocracy/installer). diff --git a/docs/es/installation/digital_ocean.md b/docs/es/installation/digital_ocean.md index 7b39f2e36..869f75b0b 100644 --- a/docs/es/installation/digital_ocean.md +++ b/docs/es/installation/digital_ocean.md @@ -1,59 +1,49 @@ # Instalando Consul Democracy en un VPS de Digital Ocean -Estas instrucciones le ayudaran a registrarse y comprar un servidor en Digital Ocean para instalar Consul Democracy. +Estas instrucciones te ayudarán a registrarte y comprar un servidor en Digital Ocean para instalar Consul Democracy. -Primero necesita [registrarse](https://cloud.digitalocean.com/registrations/new) y proporcionar su información personal. +Primero necesitas [registrarte](https://cloud.digitalocean.com/registrations/new) y proporcionar tu información personal. -Una vez que haya iniciado sesión, deberá crear un Droplet (ese es el nombre que Digital Ocean utiliza para un Servidor Virtual). Haga clic en el botón verde "Crear" en la parte superior de la página y seleccione "Droplets": +Una vez que hayas iniciado sesión, deberás crear un _Droplet_ (este es el nombre que Digital Ocean utiliza para un servidor en la nube) siguiendo esta [guía](https://docs.digitalocean.com/products/droplets/how-to/create/) y configurarlo teniendo en cuenta los siguientes consejos: -![Digital Ocean Droplets](../../img/digital_ocean/droplets.png) +## Región -En la página siguiente, debe seleccionar Ubuntu (debería estar preseleccionado) y cambiar la versión **de 18.04 x64 a 16.04 x64**. +Para evitar latencia en el servicio, selecciona la región que esté geográficamente más cerca de vuestros usuarios. -![Digital Ocean Choose an image](../../img/digital_ocean/image.png) +## Imagen -En la sección "Elegir un tamaño" seleccione la opción **$80/mo 16GB/6CPUs** si va a ser un servidor de producción. Si está configurando un sistema de prueba con unos pocos usuarios, la opción más barata de $5/mes puede ser suficiente. +En esta sección recomendamos seleccionar ubuntu con la última versión soportada por el instalador, que en este caso sería la **24.04**. -![Digital Ocean Choose a size](../../img/digital_ocean/size.png) +## Tamaño -Deje el resto de las opciones con sus valores por defecto hasta "Elegir un centro de datos". Seleccione el que esté geográficamente más cerca de sus usuarios. Si se encuentra en la UE, seleccione los centros de datos de Frankfurt o Amsterdam. +En la sección "Elegir un tamaño" si el objetivo es crear un servidor para producción recomendamos elegir una opción que al menos tenga **16GB de RAM**. Si por el contrario estás configurando un sistema de pruebas o un entorno de staging con unos pocos usuarios, la opción más barata puede ser suficiente. -![Digital Ocean Choose a region](../../img/digital_ocean/region.png) +## Autenticación -En la sección "Añadir claves SSH" pulse el botón "Nueva clave SSH". +En la sección "Elegir un método de autenticación" seleccionaremos _SSH Key_ y pulsaremos el botón _New SSH Key_ para añadir nuestra clave -![Digital Ocean Add your SSH Keys](../../img/digital_ocean/ssh_keys.png) - -En la ventana emergente que aparece es necesario copiar y pegar la clave pública que [generamos en el paso anterior](generating_ssh_key.md). Para ver el contenido de esta clave en la ventana del terminal, escriba: +En la ventana emergente que aparece es necesario copiar y pegar la clave pública que [generamos en el paso anterior](generating_ssh_key.md). Para ver el contenido de esta clave en la ventana del terminal, escribe: ```bash cat ~/.ssh/id_rsa.pub ``` -Debería ver un texto como este: +Deberías ver un texto como este: ```text ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDy/BXU0OsK8KLLXpd7tVnqDU+d4ZS2RHQmH+hv0BFFdP6PmUbKdBDigRqG6W3QBexB2DpVcb/bmHlfhzDlIHJn/oki+SmUYLSWWTWuSeF/1N7kWf9Ebisk6hiBkh5+i0oIJYvAUsNm9wCayQ+i3U3NjuB25HbgtyjR3jDPIhmg1xv0KZ8yeVcU+WJth0pIvwq+t4vlZbwhm/t2ah8O7hWnbaGV/MZUcj0/wFuiad98yk2MLGciV6XIIq+MMIEWjrrt933wAgzEB8vgn9acrDloJNvqx25uNMpDbmoNXJ8+/P3UDkp465jmejVd/6bRaObXplu2zTv9wDO48ZpsaACP your_username@your_computer_name ``` -Seleccione y copie todo el texto y péguelo en la ventana emergente de la siguiente manera: +Selecciona todo el texto, pégalo en la ventana emergente en el campo _SSH Key content_, añade un nombre significativo como por ejemplo **Consul_Democracy_key** y clica sobre el botón _Add SSH Key_. -![Digital Ocean New SSH Key](../../img/digital_ocean/new_ssh.png) +Al utilizar una clave SSH en lugar de una combinación de usuario/contraseña para acceder a tu servidor, será mucho más seguro, ya que sólo alguien con la clave privada SSH puede acceder al servidor. -Tenga en cuenta que habrá dos pequeños checks verdes. Si no están ahí, vuelva a intentar copiar el texto porque probablemente omitió algo. Dé a su clave un nombre significativo, como **Consul_Democracy_key** y haga clic en el botón "Add SSH Key" (Añadir clave SSH). +## Nombre del host -Al utilizar una clave SSH en lugar de una combinación de usuario/contraseña para acceder a su servidor, será mucho más seguro, ya que sólo alguien con la clave privada SSH puede acceder al servidor. +Ahora en la sección "Ultimar detalles" cambia el valor por defecto del campo _Hostname_ por algo más significativo, como **consuldemocracyserver** por ejemplo. -Ahora en la sección "Choose a hostname" cambie el valor por defecto por algo más significativo, como **consuldemocracyserver** por ejemplo. +En la parte inferior de la página verás un resumen de tus opciones. Comprueba que todo está bien y haz clic en el botón grande verde "Crear". -![Digital Ocean hostname](../../img/digital_ocean/hostname.png) +Tardará unos minutos, y al final tendrás un brillante nuevo servidor. -En la parte inferior de la página verás un resumen de tus opciones. Compruebe que todo está bien y haga clic en el botón grande verde "Crear". - -![Digital Ocean create](../../img/digital_ocean/create.png) - -Tardará unos minutos, y al final tendrá un brillante nuevo servidor. Se verá así en la página de Digital Ocean: - -![Digital Ocean server](../../img/digital_ocean/server.png) - -Lo siguiente es configurar Consul Democracy en el servidor. Por favor [leer estas instrucciones](https://github.com/consuldemocracy/installer) +Lo siguiente es configurar Consul Democracy en el servidor. Por favor [lee estas instrucciones](https://github.com/consuldemocracy/installer). diff --git a/docs/img/digital_ocean/create.png b/docs/img/digital_ocean/create.png deleted file mode 100644 index b873170250ae48c5270e747c3ff1c23f0cc42d7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7158 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 diff --git a/docs/img/digital_ocean/droplets.png b/docs/img/digital_ocean/droplets.png deleted file mode 100644 index 5ee6ceeb00bd398da0cbe2507b0c4934f47e2821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4100 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 diff --git a/docs/img/digital_ocean/hostname.png b/docs/img/digital_ocean/hostname.png deleted file mode 100644 index 60d2187d06b8a476793a0388417180f181356dc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13751 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

nsn_ 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 Y{6#Vm$wMk+aTG>I=Y}g4AaUiu(!_ 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 BVsZcg diff --git a/docs/img/digital_ocean/region.png b/docs/img/digital_ocean/region.png deleted file mode 100644 index daad8bb8f4318e892964f1df1a1352f1539bb373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13586 zcmaKTWmsIx(k>d@-QC@SJA(uXnjpa$Tm~52J-E9Q90I{T1lQmMcL?t8ce2mf=i67# z<;PIdPgkvKtFHCdJK?G-a%jlJ$WTyFXbSQ&>QGS7JrKDP5eD-4nM<`6@{b4%&<1Nb zn1kJnoq$l1W)3DmN(DP(3!pmC*v!Lm2q*#t1sSPHIXkGg0b~e9D~4AZehbmAt1DP{UJ2)6~<(RM3oC zT#Qo0T?k^p4hS};bhop$cNTINrT)vV5Jdjd%t1~0R~N92DD}Ub(pFZbly-0eQu49C zWi#dC5uoH3War`&6yWA%rR3)1ddtBn$icpkbDJaCrMfvYPYRJ=^%*=(4L5WWm8DC@9Fm$<4vd%?9bg=Imh)Hg;#Tcc%H7M|Ksof)3CFq2MEZa4s>>KaWaK0oH@;(M}dT-oq)z*2PaJj2iw1AQPt7` z?BHza0HTzZ{xfU*l#I&8rdIZU8kzpmQdSmHuy+O<+nWLvWJIYUcG#_~%!H%`rMU%U zc;0f$$ntV=0R*MEI5`0TPAN`qSw2C40O#MjG7hFLc0haZ-@0c1qs#wab^mM#I}qf_ zGC(IQSD=}!lY<@QUjrAi`tQE*{#Sed);0U@zVQ85T@Hvd9DkPgAItrBle&!TAMrn% z7xLvl+aG8T+4D}2%?%Fe<$!|X@>h_N)O24w^6>zX4R~1GlAiYa7}BD{tV6FR$w$yL zsr@n@N^uctJQ7%)u~$D&xy2}{-HG7GtL6`@$Qo36TUJOa91he|_?2Qymc#}q=zV;{ zfl1qiLV5D&=|1=AF>{VvDd03<8aEuJh%4PL9334n7SgB3w7= zk8lMfIGBL6Bne8)&;JzvTl=5h5=!qVF%f$U{~-=dtgJlWEIHiX-Xg#R{LJL9HtaN* zyLMak*fphiBpefvLsOn!^|@VP(`z&X0_oa^1wZ2MjET+gDkp`Omk)}3U4#$n>hQX) z(rcQpr}Hu_#>t{oj8>(`ov(<=DA-uiVq?~YmWK13QmnOIv7t639< zLYL7qFyI*YT>j*bB@=cXpop;lo&3>2;buY@@r*AAFI;BO013{5x-9ce)zg6A(?D@? z@oui4n7Ft&F7k!|KmS|=>{rj%muI8d2AjFxJ3HZe8JU@qZ6hgc6<@z*-z=(R2?QiI zH?_9vW*zPA3HUsKwY2b5ki{KsZI1@yX+S6InysIzh!Q@vg7=^9FPnYtFLo%eh;W_n z&Ne^-QI)|)-9bULaemXq%5i9<^ZRazA!@w}M3`Zikau z6jRwlf(H?XFyU})DTOt*vm+U2|=x-ybDFe%BxU;AKDenRGtwaC8A# zK2$Jdx_1_9pTzdDS&EU<ihmZ26j+Lp8#ycCWH7r5;7)P&%^}gFxoB^#z~;a1exy%hTolZmaUal zKpZ1c5>l`1eGp^kZO7?GOLIg*m;T{gwOoxfP=r7e{Z#MD!)yUAkj7j6OxMwo%ew+2 z8opOw3bgqpRxIK-asf0OItE6NYZrmxp2W+Mcjfxsy7?jGcwP)K0Cn(V^*Vi5YJnql zb#*^l)?@6J8k3Wgk&M^pa|9;;IwXS>Sum@T_UrEiChq{~YY)Gge)!~l6v)q;{HoVP z-BmX(hElZt8c}gp>v#2q!sj9}*ZXcGtgHL1LDH3y+YAQ2Yo)sV!dZ3c`F1UKi^F>Z zg|hABq^k2SvNPB=jtE)o`AQ=|V*PRL^@Ty~JUp6&Kk%2K-}7~vaM3V%0D*iE3Dp~sY4Q6+@c>N>u{%ok=W!x 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 Q`IV9aKt-lX$|&%E0T4S`vj6}9 diff --git a/docs/img/digital_ocean/server.png b/docs/img/digital_ocean/server.png deleted file mode 100644 index 4c114d5ab67d535f4e05cc4b83e118ceb525c530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9963 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�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 P`I)@5veXxeH-Y~LfP_#e diff --git a/docs/img/digital_ocean/size.png b/docs/img/digital_ocean/size.png deleted file mode 100644 index 6366e3cdb0c2f72c581ee32a3cfa044f20cfa973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20888 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 diff --git a/docs/img/digital_ocean/ssh_keys.png b/docs/img/digital_ocean/ssh_keys.png deleted file mode 100644 index 70a8c7292d4e40b21aebfc46f0f2698f92243bf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4517 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 Date: Mon, 16 Sep 2024 16:24:11 +0200 Subject: [PATCH 7/8] Update Heroku instructions Note that the variable related with the "hostname" is removed from the Heroku instructions as it is not necessary to configure the Bucket. --- docs/en/installation/deploying-on-heroku.md | 138 ++++++------------ .../installation/using-aws-s3-as-storage.md | 85 ++++------- docs/es/installation/deploying-on-heroku.md | 130 ++++++----------- .../installation/using-aws-s3-as-storage.md | 64 ++++++++ 4 files changed, 183 insertions(+), 234 deletions(-) create mode 100644 docs/es/installation/using-aws-s3-as-storage.md diff --git a/docs/en/installation/deploying-on-heroku.md b/docs/en/installation/deploying-on-heroku.md index ec32c419b..1e8db6089 100644 --- a/docs/en/installation/deploying-on-heroku.md +++ b/docs/en/installation/deploying-on-heroku.md @@ -5,13 +5,13 @@ This tutorial assumes that you have already managed to clone Consul Democracy on your machine and gotten it to work. 1. First, create a [Heroku](https://www.heroku.com) account if it isn't already done. -2. Install the [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli) and sign in using +2. Install the [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli) and sign in using: ```bash heroku login ``` -3. Go to your Consul Democracy repository and instantiate the process +3. Go to your Consul Democracy repository and instantiate the process: ```bash cd consuldemocracy @@ -22,7 +22,7 @@ This tutorial assumes that you have already managed to clone Consul Democracy on If _your-app-name_ is not already taken, Heroku should now create your app. -4. Create a database using +4. Create a database using: ```bash heroku addons:create heroku-postgresql @@ -30,19 +30,7 @@ This tutorial assumes that you have already managed to clone Consul Democracy on You should now have access to an empty Postgres database whose address was automatically saved as an environment variable named _DATABASE\_URL_. Consul Democracy will automatically connect to it when deployed. -5. **(Not needed)** Add a file name _heroku.yml_ at the root of your project and paste the following in it - - ```yml - build: - languages: - - ruby - packages: - - imagemagick - run: - web: bundle exec rails server -e ${RAILS_ENV:-production} - ``` - -6. Now, generate a secret key and save it to an ENV variable named SECRET\_KEY\_BASE using +5. Now, generate a secret key and save it to an ENV variable named SECRET\_KEY\_BASE using: ```bash heroku config:set SECRET_KEY_BASE=$(rails secret) @@ -70,48 +58,72 @@ This tutorial assumes that you have already managed to clone Consul Democracy on **Remember not to commit the file if you have any sensitive information in it!** -7. You can now push your app using +6. To ensure Heroku correctly detects and uses the node.js and ruby versions defined in the project, we need to make the following changes: + + In package.json, add the node.js version: + + ```json + "engines": { + "node": "18.20.3" + } + ``` + + and apply: + + ```bash + heroku buildpacks:add heroku/nodejs + ``` + + In _Gemfile_, add the ruby version and run bundle: + + ```Gemfile + ruby file: ".ruby-version" + ``` + + and apply: + + ```bash + heroku buildpacks:set heroku/ruby + ``` + +7. You can now push your app using: ```bash git push heroku your-branch:master ``` -8. It won't work straight away because the database doesn't contain the tables needed. To create them, run +8. It won't work straight away because the database doesn't contain the tables needed. To create them, run: ```bash heroku run rake db:migrate heroku run rake db:seed ``` - If you want to add the test data in the database, move `gem 'faker', '~> 1.8.7'` outside of `group :development` and run - - ```bash - heroku config:set DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL=true - heroku config:set DATABASE_CLEANER_ALLOW_PRODUCTION=true - heroku run rake db:dev_seed - ``` - -9. Your app should now be ready to use. You can open it with +9. Your app should now be ready to use. You can open it with: ```bash heroku open ``` - You also can run the console on heroku using + You also can run the console on Heroku using: ```bash heroku console --app your-app-name ``` -10. Heroku doesn't allow to save images or documents in its servers, so it's necessary to setup a permanent storage space. +10. Heroku doesn't allow saving images or documents in its servers, so it's necessary to setup a permanent storage space. - See [our S3 guide](./using-aws-s3-as-storage.md) for more details about configuring Paperclip with S3. + See [our S3 guide](using-aws-s3-as-storage.md) for more details about configuring ActiveStorage with S3. -### Configure Sendgrid +### Configure Twilio Sendgrid -Add the SendGrid add-on in Heroku. It will create a SendGrid account for you with `ENV["SENDGRID_USERNAME"]` and `ENV["SENDGRID_PASSWORD"]`. +Add the Twilio SendGrid add-on in Heroku. This will create a Twilio SendGrid account for the application with a username and allow you to create a password. This username and password can be stored in the application’s environment variables on Heroku: -Add this to `config/secrets.yml`, under the `production:` section: +```bash +heroku config:set SENDGRID_USERNAME=example-username SENDGRID_PASSWORD=xxxxxxxxx +``` + +Now add this to `config/secrets.yml`, under the `production:` section: ```yaml mailer_delivery_method: :smtp @@ -125,62 +137,4 @@ Add this to `config/secrets.yml`, under the `production:` section: :enable_starttls_auto: true ``` -Important: Turn on one worker dyno so that emails get sent. - -## Optional but recommended - -### Install rails\_12factor and specify the Ruby version - -**The rails\_12factor is only useful if you use a version of Consul Democracy older than 1.0.0. The latter uses Rails 5 which includes the changes.** - -As recommended by Heroku, you can add the gem rails\_12factor and specify the version of Ruby you want to use. You can do so by adding - -```ruby -gem 'rails_12factor' - -ruby 'x.y.z' -``` - -in the file _Gemfile\_custom_, where `x.y.z` is the version defined in the `.ruby-version` file in the Consul Democracy repository. Don't forget to run - -```bash -bundle install -``` - -to generate _Gemfile.lock_ before committing and pushing to the server. - -### Use Puma as a web server - -Heroku recommends to use Puma to improve the responsiveness of your app on [a number of levels](http://blog.scoutapp.com/articles/2017/02/10/which-ruby-app-server-is-right-for-you). - -If you want to allow more concurrency, uncomment the line: - -```ruby -workers ENV.fetch("WEB_CONCURRENCY") { 2 } -``` - -You can find an explanation for each of these settings in the [Heroku tutorial](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server). - -The last part is to change the _web_ task to use Puma by changing it to this in your _heroku.yml_ file: - -```yml -web: bundle exec puma -C config/puma.rb -``` - -### Add configuration variables to tune your app from the dashboard - -The free and hobby versions of Heroku are barely enough to run an app like Consul Democracy. To optimise the response time and make sure the app doesn't run out of memory, you can [change the number of workers and threads](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#workers) that Puma uses. - -My recommended settings are one worker and three threads. You can set it by running these two commands: - -```bash -heroku config:set WEB_CONCURRENCY=1 -heroku config:set RAILS_MAX_THREADS=3 -``` - -I also recommend to set the following: - -```bash -heroku config:set RAILS_SERVE_STATIC_FILES=enabled -heroku config:set RAILS_ENV=production -``` +**Important:** Turn on one worker dyno so that emails get sent. diff --git a/docs/en/installation/using-aws-s3-as-storage.md b/docs/en/installation/using-aws-s3-as-storage.md index e04ac7206..05c625646 100644 --- a/docs/en/installation/using-aws-s3-as-storage.md +++ b/docs/en/installation/using-aws-s3-as-storage.md @@ -1,87 +1,64 @@ # Using AWS S3 as file storage -While Consul Democracy keeps most of its data in a PostgreSQL database, all the files such as documents or images have to be stored elsewhere. - -To take care of them, Consul Democracy uses the [Paperclip gem](https://github.com/thoughtbot/paperclip) (Warning: this gem is now deprecated and Consul Democracy will probably migrate to ActiveStorage in the future. Check that this is not already the case before using this guide). - -By default, the attachments are stored on the filesystem. However, with services such as Heroku, there is no persistent storage which means that these files are periodically erased. - -This tutorial explains how to configure Paperclip to use [AWS S3](https://aws.amazon.com/fr/s3/). It doesn't recommend S3 or the use of Amazon services and will hopefully be expanded to include configuration for [fog storage](http://fog.io/storage/). +Although Consul Democracy stores most of its data in a PostgreSQL database, in Heroku all files, such as documents or images, must be stored elsewhere, such as AWS S3. ## Adding the gem *aws-sdk-s3* -First, add the following line in your *Gemfile_custom* +Add the following line to your *Gemfile_custom*: ```ruby -gem 'aws-sdk-s3', '~> 1' +gem "aws-sdk-s3", "~> 1" ``` -Make sure to have a recent version of paperclip (Consul Democracy is currently using 5.2.1, which doesn't recognize *aws-sdk-s3*). In your Gemfile, the line should be: - -```ruby -gem 'paperclip', '~> 6.1.0' -``` - -Run `bundle install` to apply your changes. +And run `bundle install` to apply your changes. ## Adding your credentials in *secrets.yml* -This guide will assume that you have an Amazon account configured to use S3 and that you created a bucket for your instance of Consul Democracy. It is highly recommended to use a different bucket for each instance (production, preproduction, staging). +This guide assumes you have an Amazon account configured to use S3 and that you have created a bucket for your instance of Consul Democracy. It is strongly recommended to use a different bucket for each instance (production, preproduction, staging). You will need the following information: -- the **name** of the S3 bucket -- the **region** of the S3 bucket (`eu-central-1` for UE-Francfort for example) -- the **hostname** of the S3 bucket (`s3.eu-central-1.amazonaws.com` for Francfort, for example) -- an **access key id** and a **secret access key** with read/write permission to that bucket +- The **name** of the S3 bucket. +- The **region** of the S3 bucket (`eu-central-1` for UE-Francfort for example). +- An **access_key** and a **secret_key** with read/write permission to that bucket. -**WARNING:** It is recommended to create IAM users that will only have read/write permission to the bucket you want to use for that specific instance of Consul Democracy. +**WARNING:** It is recommended to create IAM users (Identity and Access Management) who only have read/write permissions for the bucket you intend to use for that specific instance of Consul Democracy. -Once you have these pieces of information, you can save them as environment variables of the instance running Consul Democracy. In this tutorial, we save them respectively as *AWS_S3_BUCKET*, *AWS_S3_REGION*, *AWS_S3_HOSTNAME*, *AWS_ACCESS_KEY_ID* and *AWS_SECRET_ACCESS_KEY*. +Once you have these pieces of information, you can save them as environment variables of the instance running Consul Democracy. In this tutorial, we save them respectively as *S3_BUCKET*, *S3_REGION*, *S3_ACCESS_KEY_ID* and *S3_SECRET_ACCESS_KEY*. -Add the following block in your *secrets.yml* file: - -```yaml -aws: &aws - aws_s3_region: <%= ENV["AWS_S3_REGION"] %> - aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> - aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> - aws_s3_bucket: <%= ENV["AWS_S3_BUCKET"] %> - aws_s3_host_name: <%= ENV["AWS_S3_HOST_NAME"] %> +```bash +heroku config:set S3_BUCKET=example-bucket-name S3_REGION=eu-west-example S3_ACCESS_KEY_ID=xxxxxxxxx S3_SECRET_ACCESS_KEY=yyyyyyyyyy ``` -and `<<: *aws` under the environments which you want to use S3 with, for example: +Now add the following block to your *secrets.yml* file: ```yaml production: -[...] - <<: *aws + s3: + access_key_id: <%= ENV["S3_ACCESS_KEY_ID"] %> + secret_access_key: <%= ENV["S3_SECRET_ACCESS_KEY"] %> + region: <%= ENV["S3_REGION"] %> + bucket: <%= ENV["S3_BUCKET"] %> ``` -## Configuring Paperclip +## Enabling the use of S3 in the application -First, activate Paperclip's URI adapter by creating the file *config/initializers/paperclip.rb* with the following content: +First, add the following line inside the `class Application < Rails::Application` class in the `config/application_custom.rb` file: ```ruby -Paperclip::UriAdapter.register +# Store uploaded files on the local file system (see config/storage.yml for options). +config.active_storage.service = :s3 ``` -Finally, add the following lines in the environment file of the instance which you want to use S3 with. In production, you should for example edit *config/environments/production.rb*. +Then, uncomment the s3 block that you will find in the *storage.yml* file: -```ruby -# Paperclip settings to store images and documents on S3 -config.paperclip_defaults = { - storage: :s3, - preserve_files: true, - s3_host_name: Rails.application.secrets.aws_s3_host_name, - s3_protocol: :https, - s3_credentials: { - bucket: Rails.application.secrets.aws_s3_bucket, - access_key_id: Rails.application.secrets.aws_access_key_id, - secret_access_key: Rails.application.secrets.aws_secret_access_key, - s3_region: Rails.application.secrets.aws_s3_region, - } -} +```yaml +s3: + service: S3 + access_key_id: <%= Rails.application.secrets.dig(:s3, :access_key_id) %> + secret_access_key: <%= Rails.application.secrets.dig(:s3, :secret_access_key) %> + region: <%= Rails.application.secrets.dig(:s3, :region) %> + bucket: <%= Rails.application.secrets.dig(:s3, :bucket) %> ``` -You will need to restart to apply the changes. +You will need to restart the application to apply the changes. diff --git a/docs/es/installation/deploying-on-heroku.md b/docs/es/installation/deploying-on-heroku.md index 20ab55d16..1b8870f7d 100644 --- a/docs/es/installation/deploying-on-heroku.md +++ b/docs/es/installation/deploying-on-heroku.md @@ -11,7 +11,7 @@ Este tutorial asume que ya has conseguido clonar Consul Democracy en tu máquina heroku login ``` -3. Accede a tu repositorio de Consul Democracy y crea una instancia +3. Accede a tu repositorio de Consul Democracy y crea una instancia: ```bash cd consuldemocracy @@ -22,7 +22,7 @@ Este tutorial asume que ya has conseguido clonar Consul Democracy en tu máquina Si _your-app-name_ no existe aún, Heroku creará tu aplicación. -4. Crea la base de datos con +4. Crea la base de datos con: ```bash heroku addons:create heroku-postgresql @@ -30,19 +30,7 @@ Este tutorial asume que ya has conseguido clonar Consul Democracy en tu máquina Ahora deberías tener acceso a una base de datos Postgres vacía cuya dirección se guardó automáticamente como una variable de entorno llamada _DATABASE\_URL_. Consul Democracy se conectará automáticamente a ella durante la instalación. -5. **(No es necesario)** Crea un archivo con el nombre _heroku.yml_ en la raíz del proyecto y añade el siguiente código - - ```yml - build: - languages: - - ruby - packages: - - imagemagick - run: - web: bundle exec rails server -e ${RAILS_ENV:-production} - ``` - -6. Ahora, genera una clave secreta y guárdala en la variable de entorno SECRET\_KEY\_BASE de la siguinte manera +5. Ahora, genera una clave secreta y guárdala en la variable de entorno SECRET\_KEY\_BASE de la siguiente manera: ```bash heroku config:set SECRET_KEY_BASE=$(rails secret) @@ -70,28 +58,48 @@ Este tutorial asume que ya has conseguido clonar Consul Democracy en tu máquina **¡Recuerda no añadir el archivo si tienes información sensible en él!** +6. Para que Heroku detecte y utilice correctamente las versiones de node.js y ruby definidas en el proyecto deberemos añadir los siguientes cambios: + + En el _package.json_ añadir la versión de node.js: + + ```json + "engines": { + "node": "18.20.3" + } + ``` + + y aplicar: + + ```bash + heroku buildpacks:add heroku/nodejs + ``` + + En el _Gemfile_ añadir la versión de ruby y ejecutar bundle: + + ```Gemfile + ruby file: ".ruby-version" + ``` + + y aplicar: + + ```bash + heroku buildpacks:set heroku/ruby + ``` + 7. Ahora ya puedes subir tu aplicación utilizando: ```bash git push heroku your-branch:master ``` -8. No funcionará de inmediato porque la base de datos no contiene las tablas necesarias. Para crearlas, ejecuta +8. No funcionará de inmediato porque la base de datos no contiene las tablas necesarias. Para crearlas, ejecuta: ```bash heroku run rake db:migrate heroku run rake db:seed ``` - Si quieres añadir los datos de prueba en la base de datos, mueve `gem 'faker', '~> 1.8.7'` fuera del `group :development` y ejecuta: - - ```bash - heroku config:set DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL=true - heroku config:set DATABASE_CLEANER_ALLOW_PRODUCTION=true - heroku run rake db:dev_seed - ``` - -9. Ahora tu aplicación debería estar ya opertaiva. Puedes abrirla con +9. Ahora tu aplicación debería estar ya operativa. Puedes abrirla con: ```bash heroku open @@ -105,13 +113,17 @@ Este tutorial asume que ya has conseguido clonar Consul Democracy en tu máquina 10. Heroku no permite guardar imágenes o documentos en sus servidores, por lo que es necesario configurar un nuevo espacio de almacenamiento. - Consulta [nuestra guía de S3](./using-aws-s3-as-storage.md) para más detalles sobre la configuración de Paperclip con S3. + Consulta [nuestra guía de S3](using-aws-s3-as-storage.md) para más detalles sobre la configuración de ActiveStorage con S3. -### Configurar Sendgrid +### Configurar Twilio SendGrid -Añade el complemento (add-on) de SendGrid en Heroku. Esto creará una cuenta de SendGrid para la aplicación con `ENV["SENDGRID_USERNAME"]` y `ENV["SENDGRID_PASSWORD"]`. +Añade el complemento (_add-on_) de Twilio SendGrid en Heroku. Esto creará una cuenta en Twilio SendGrid para la aplicación con un nombre de usuario y permitirá crear una contraseña. Este usuario y contraseña lo podemos guardar en las variables de entorno de la aplicación en Heroku: -Añade el siguiente código a `config/secrets.yml`, en la sección `production:`: +```bash +heroku config:set SENDGRID_USERNAME=example-username SENDGRID_PASSWORD=xxxxxxxxx +``` + +Ahora añade el siguiente código a `config/secrets.yml`, en la sección `production:`: ```yaml mailer_delivery_method: :smtp @@ -125,62 +137,4 @@ Añade el siguiente código a `config/secrets.yml`, en la sección `production:` :enable_starttls_auto: true ``` -Importante: Activa un "worker dyno" para que se envíen los correos electrónicos. - -### Opcional (pero recomendado) - -### Instalar rails\_12factor y especificar la versión de Ruby - -**Instalar rails\_12factor sólo es útil si utilizas una versión de Consul Democracy anterior a la 1.0.0. La última versión utiliza Rails 5 que ya incluye los cambios.** - -Como nos recomienda Heroku, puedes añadir la gema rails\_12factor y especificar la versión de Ruby a utilizar. Puedes hacerlo añadiendo: - -```ruby -gem 'rails_12factor' - -ruby 'x.y.z' -``` - -en el archivo _Gemfile\_custom_, donde `x.y.z` es la versión definida en el fichero `.ruby-version` del repositorio de Consul Democracy. No olvides ejecutar - -```bash -bundle install -``` - -para generar el _Gemfile.lock_ antes de añadir los cambios y subirlos al servidor. - -### Utilizar Puma como servidor web - -Heroku recomienda utilizar Puma para mejorar el [rendimiento](http://blog.scoutapp.com/articles/2017/02/10/which-ruby-app-server-is-right-for-you) de la aplicación. - -Si quieres permitir más concurrencia, descomenta la siguiente linea: - -```ruby -workers ENV.fetch("WEB_CONCURRENCY") { 2 } -``` - -Puedes encontrar una explicación para diferentes configuraciones en el siguiente [tutorial de Heroku](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server). - -Por último hay que cambiar la tarea _web_ para usar Puma cambiándola en el archivo _heroku.yml_ con el siguiente código: - -```yml -web: bundle exec puma -C config/puma.rb -``` - -### Añadir variables de configuración desde el panel de control - -Las versiones gratuita y hobby de Heroku no son suficientes para ejecutar una aplicación como Consul Democracy. Para optimizar el tiempo de respuesta y asegurarte de que la aplicación no se quede sin memoria, puedes [cambiar el número de "workers" e hilos](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#workers) que utiliza Puma. - -La configuración recomendada es un "worker" y tres hilos. Puedes configurarlo ejecutando estos dos comandos: - -```bash -heroku config:set WEB_CONCURRENCY=1 -heroku config:set RAILS_MAX_THREADS=3 -``` - -También es recomendable configurar las siguientes variables: - -```bash -heroku config:set RAILS_SERVE_STATIC_FILES=enabled -heroku config:set RAILS_ENV=production -``` +**Importante:** Activa un "_worker dyno_" para que se envíen los correos electrónicos. diff --git a/docs/es/installation/using-aws-s3-as-storage.md b/docs/es/installation/using-aws-s3-as-storage.md new file mode 100644 index 000000000..9ed1ef796 --- /dev/null +++ b/docs/es/installation/using-aws-s3-as-storage.md @@ -0,0 +1,64 @@ +# Usar AWS S3 como almacenamiento de archivos + +Aunque Consul Democracy almacena la mayor parte de sus datos en una base de datos PostgreSQL, en Heroku todos los archivos como documentos o imágenes deben almacenarse en otro lugar, como puede ser AWS S3. + +## Añadir la gema *aws-sdk-s3* + +Añade la siguiente línea en tu *Gemfile_custom*: + +```ruby +gem "aws-sdk-s3", "~> 1" +``` + +Y ejecuta `bundle install` para aplicar los cambios. + +## Añadir tus credenciales en *secrets.yml* + +Esta guía asume que tienes una cuenta de Amazon configurada para usar S3 y que has creado un _bucket_ para tu instancia de Consul Democracy. Se recomienda encarecidamente usar un _bucket_ diferente para cada instancia (producción, preproducción, staging). + +Necesitarás la siguiente información: + +- El **nombre** del _bucket_. +- La **región** del _bucket_ (`eu-central-1` para UE-Frankfurt, por ejemplo). +- Una **_access_key_** y un **_secret_key_** con permisos de lectura/escritura para el _bucket_. + +**AVISO:** Se recomienda crear usuarios _IAM_ (Identity and Access Management) que solo tengan permisos de lectura/escritura en el _bucket_ que deseas usar para esa instancia específica de Consul Democracy. + +Una vez que tengas esta información, puedes guardarla como variables de entorno de la instancia que ejecuta Consul Democracy. En este tutorial, las guardamos respectivamente como *S3_BUCKET*, *S3_REGION*, *S3_ACCESS_KEY_ID* and *S3_SECRET_ACCESS_KEY*. + +```bash +heroku config:set S3_BUCKET=example-bucket-name S3_REGION=eu-west-example S3_ACCESS_KEY_ID=xxxxxxxxx S3_SECRET_ACCESS_KEY=yyyyyyyyyy +``` + +Ahora añade el siguiente bloque en tu fichero *secrets.yml*: + +```yaml +production: + s3: + access_key_id: <%= ENV["S3_ACCESS_KEY_ID"] %> + secret_access_key: <%= ENV["S3_SECRET_ACCESS_KEY"] %> + region: <%= ENV["S3_REGION"] %> + bucket: <%= ENV["S3_BUCKET"] %> +``` + +## Habilitar el uso de S3 en la aplicación + +Primero, agrega la siguiente línea dentro de la clase `class Application < Rails::Application` en el fichero `config/application_custom.rb`: + +```ruby +# Store uploaded files on the local file system (see config/storage.yml for options). +config.active_storage.service = :s3 +``` + +Luego, descomenta el bloque de **s3** que encontrarás en el fichero *storage.yml*: + +```yaml +s3: + service: S3 + access_key_id: <%= Rails.application.secrets.dig(:s3, :access_key_id) %> + secret_access_key: <%= Rails.application.secrets.dig(:s3, :secret_access_key) %> + region: <%= Rails.application.secrets.dig(:s3, :region) %> + bucket: <%= Rails.application.secrets.dig(:s3, :bucket) %> +``` + +Necesitarás reiniciar la aplicación para aplicar los cambios. From ff74960ba39467d618636825dac22bc9b7f80b7e Mon Sep 17 00:00:00 2001 From: taitus Date: Tue, 17 Sep 2024 17:17:50 +0200 Subject: [PATCH 8/8] Update mail server configuration instructions --- docs/en/SUMMARY.md | 2 +- .../installation/mail_server_configuration.md | 29 +++++++------------ .../installation/mail_server_configuration.md | 25 ++++++---------- 3 files changed, 21 insertions(+), 35 deletions(-) diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index 8c07d1968..f80269be7 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -23,7 +23,7 @@ * [Manual installation (not recommended)](installation/manual_installation_production.md) * [Digital Ocean](installation/digital_ocean.md) * [Heroku](installation/deploying-on-heroku.md) - * [Mail Server Configuration](installation/mail_server_configuration.md) + * [Mail server configuration](installation/mail_server_configuration.md) * [Basic configuration](installation/basic_configuration.md) * [User documentation and guides](installation/documentation_and_guides.md) diff --git a/docs/en/installation/mail_server_configuration.md b/docs/en/installation/mail_server_configuration.md index 906c8287b..be5fe786c 100644 --- a/docs/en/installation/mail_server_configuration.md +++ b/docs/en/installation/mail_server_configuration.md @@ -1,26 +1,19 @@ -# Mail Server Configuration +# Mail server configuration This is an example of how to integrate a mailing service with Consul Democracy. -In this example we use [Mailgun](https://www.mailgun.com/). +## Get an account from any email provider -## Create an account in Mailgun +To configure email in Consul Democracy, you will need: -![Creating an account in Mailgun](../../img/mailserver/mailgun-create-account.png) +* The _smtp_address_, which is the address of your email provider's SMTP server (e.g., smtp.yourdomain.com). +* The _domain_, which is the domain name of your application. +* The _user_name_ and _password_, which are the credentials provided by your email provider to authenticate with the SMTP server. -* Skip the credit card form -* And activate your account with the link sent by email +## Email configuration in Consul Democracy -## Domain configuration - -* Go to the Domains section: ![Mailgun domain section](../../img/mailserver/mailgun-domains.png) -* Since you don't have a domain yet, you should click in the sandbox that is already created -* Remember the following credentials: ![Mailgun sandbox](../../img/mailserver/mailgun-sandbox.png) - -## Consul Democracy mailing configuration - -* Go to the `config/secrets.yml` file -* Change the lines on the file to configure the mail server under the section `staging`, `preproduction` or `production`, depending on your setup: +1. Go to the `config/secrets.yml` file. +2. On this file, change these lines under the section `staging`, `preproduction` or `production`, depending on your setup: ```yml mailer_delivery_method: :smtp @@ -34,5 +27,5 @@ In this example we use [Mailgun](https://www.mailgun.com/). :enable_starttls_auto: true ``` -* Fill ``, ``, `` and `` with your information -* Save the file and restart your Consul Democracy application +3. Fill ``, ``, `` and `` with your information. +4. Save the file and restart your Consul Democracy application. diff --git a/docs/es/installation/mail_server_configuration.md b/docs/es/installation/mail_server_configuration.md index 48c806d75..dd3c33879 100644 --- a/docs/es/installation/mail_server_configuration.md +++ b/docs/es/installation/mail_server_configuration.md @@ -2,25 +2,18 @@ Este es un ejemplo de cómo integrar un servicio de correo con Consul Democracy. -En este ejemplo usamos [Mailgun](https://www.mailgun.com/). +## Obtener una cuenta de tu proveedor de correos de confianza -## Crear una cuenta en Mailgun +Para poder configurar el correo en Consul Democracy necesitaremos: -![Creando una cuenta en Mailgun](../../img/mailserver/mailgun-create-account.png) - -* Puedes omitir el formulario de tarjeta de crédito -* Y activa tu cuenta con el enlace enviado por correo electrónico - -## Configuración del dominio - -* Ve a la sección "domain": ![Mailgun sección domain](../../img/mailserver/mailgun-domains.png) -* Como todavía no tienes un dominio, debes pinchar en el "sandbox" que ya está creado -* Recuerda las siguientes credenciales: ![Mailgun sandbox](../../img/mailserver/mailgun-sandbox.png) +* El _smtp_address_, que es la dirección del servidor SMTP de tu proveedor de correos (por ejemplo, smtp.tudominio.com). +* El _domain_, que es el nombre de dominio de tu aplicación. +* El _user_name_ y _password_, que son las credenciales que tu proveedor de correos te proporciona para autenticarte en el servidor SMTP. ## Configuración del correo en Consul Democracy -* Ve al archivo `config/secrets.yml` -* Modifica las líneas en el archivo para configurar el servidor de correo: +1. Ve al archivo `config/secrets.yml`. +2. Modifica las siguientes líneas en la sección de `staging`, `preproduction` or `production`, dependiendo de tu configuración: ```yml mailer_delivery_method: :smtp @@ -34,5 +27,5 @@ En este ejemplo usamos [Mailgun](https://www.mailgun.com/). :enable_starttls_auto: true ``` -* Rellena ``, ``, `` y `` con tu información. -* Guarda el fichero y reinicia tu aplicación Consul Democracy +3. Rellena ``, ``, `` y `` con tu información. +4. Guarda el fichero y reinicia tu aplicación Consul Democracy.