Cómo instalar el software de gestión de proyectos Redmine en Debian 11

Redmine es un software de gestión de proyectos y herramienta de seguimiento de incidencias gratuito y de código abierto. Está escrito utilizando el framework Ruby on Rails y puede integrarse con varios sistemas de control de versiones. Incluye un navegador de repositorios y un visor de diferencias. Puede utilizarse para gestionar las características de los proyectos por wikis y foros de proyectos, seguimiento del tiempo y control de acceso basado en roles. Es multiplataforma y multibase de datos, y soporta 49 idiomas.

En este tutorial, aprenderás a instalar Redmine en un servidor Debian 11.

Requisitos previos

  • Un servidor con Debian 11.
  • Un usuario no usuario con privilegios de root.
  • Firewall sin complicaciones(UFW) activado y en ejecución.
  • Pocos paquetes que necesite tu sistema.
    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release unzip debian-archive-keyring -y
    

    Puede que algunos de estos paquetes ya estén instalados en tu sistema.

  • Asegúrate de que todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    

Paso 1 – Configurar el Cortafuegos

El primer paso antes de instalar ningún paquete es configurar el cortafuegos para que permita conexiones HTTP y HTTPS.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permite los puertos HTTP y HTTPs. Además, abre el puerto 3000 para Redmine.

$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw allow 3000

Vuelve a comprobar el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
3000                       ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
3000 (v6)                  ALLOW       Anywhere (v6)

Paso 2 – Instala el servidor Apache

Utilizaremos el servidor web Apache para desplegar Redmine. Instala Apache utilizando el siguiente comando.

$ sudo apt install apache2

Comprueba el estado del servicio Apache.

$ sudo systemctl status apache2
? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-03-04 13:28:57 UTC; 41s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 3478 (apache2)
      Tasks: 55 (limit: 1129)
     Memory: 9.7M
        CPU: 27ms
     CGroup: /system.slice/apache2.service
             ??3478 /usr/sbin/apache2 -k start
             ??3481 /usr/sbin/apache2 -k start
             ??3482 /usr/sbin/apache2 -k start

Mar 04 13:28:56 redmine systemd[1]: Starting The Apache HTTP Server...
Mar 04 13:28:57 redmine systemd[1]: Started The Apache HTTP Server.

Paso 3 – Instalar y Configurar el Servidor MySQL

Utilizaremos la base de datos MySQL para almacenar los datos. Debian ya no tiene MySQL en sus repositorios. Así que utilizaremos el repositorio oficial de MySQL para la instalación.

Importa la clave GPG de MySQL.

$ curl https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | gpg --dearmor | sudo tee /usr/share/keyrings/mysql.gpg >/dev/null

Crea un archivo de repositorio MySQL.

$ echo "deb [signed-by=/usr/share/keyrings/mysql.gpg arch=amd64] http://repo.mysql.com/apt/debian/ `lsb_release -cs` mysql-8.0" | sudo tee /etc/apt/sources.list.d/mysql.list

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala MySQL.

$ sudo apt install mysql-server

Se te pedirá que establezcas una contraseña de root. Elige una contraseña segura. A continuación, se te pedirá que elijas entre el cifrado más reciente de MySQL caching_sha2_password o el cifrado más antiguo mysql_native_password. Elige el más reciente porque Redmine lo soporta. Selecciona Aceptar para continuar y completar la instalación.

Comprueba el estado del servicio MySQL.

$ sudo systemctl status mysql
? mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-03-05 08:18:15 UTC; 4h 14min ago
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
   Main PID: 10500 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1129)
     Memory: 391.5M
        CPU: 1min 49.904s
     CGroup: /system.slice/mysql.service
             ??10500 /usr/sbin/mysqld

Mar 05 08:18:14 redmine systemd[1]: Starting MySQL Community Server...
Mar 05 08:18:15 redmine systemd[1]: Started MySQL Community Server.

Instalación segura de MySQL.

$ sudo mysql_secure_installation

En primer lugar, se te pedirá la contraseña de root. Introduce la contraseña que elegiste durante la instalación. A continuación, se te preguntará si deseas configurar el Plugin Validar Contraseña, que puedes utilizar para comprobar la solidez de tu contraseña MySQL. Elige Y para continuar. En el siguiente paso se te pedirá que elijas el nivel de validación de la contraseña. Elige 2 que es el nivel más fuerte y requerirá que tu contraseña tenga al menos ocho caracteres e incluya una mezcla de mayúsculas, minúsculas, números y caracteres especiales.

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Se te mostrará la fortaleza de tu contraseña raíz y se te preguntará si quieres cambiarla. Introduce N si no quieres cambiarla y sigue adelante. Si deseas cambiarla, puedes hacerlo ahora introduciendo Y y eligiendo una contraseña que cumpla los requisitos anteriores.

Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

 ... skipping.

Pulsa Y y luego la tecla ENTER en todas las indicaciones siguientes para eliminar los usuarios anónimos y la base de datos de prueba, desactivar los inicios de sesión de root y cargar las reglas recién establecidas.

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

Entra en el intérprete de comandos de MySQL. Introduce tu contraseña de root para continuar.

$ mysql -u root -p

Crea el usuario redmine. Asegúrate de que la contraseña cumple los requisitos establecidos anteriormente.

mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'Your_password2';

Crea la base de datos redmine.

mysql> CREATE DATABASE redmine CHARACTER SET utf8mb4;

Concede privilegios al usuario de la base de datos redmine.

mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

Sal del Shell.

mysql> exit

Paso 4 – Instalar Ruby y otros requisitos

La última versión de Redmine es compatible con Ruby 3.1. Debian incluye Ruby 2.7, por lo que tendremos que instalar la última versión utilizando el Gestor de versiones de Ruby (RVM).

Instala la clave GPG de RVM.

$ gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Instala RVM.

$ \curl -sSL https://get.rvm.io | bash -s stable

Obtén los scripts de RVM.

$ source ~/.rvm/scripts/rvm

Instala Ruby. Puedes consultar la última versión en el sitio web de Ruby. En el momento de escribir este tutorial, Ruby 3.1.3 es la última versión de la serie.

$ rvm install ruby-3.1.3

Verifica la instalación.

$ ruby -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

Instala el resto de paquetes necesarios para Redmine.

$ sudo apt install libxml2-dev libxslt1-dev zlib1g-dev imagemagick libmagickwand-dev libmysqlclient-dev apache2-dev build-essential libcurl4-openssl-dev

Paso 5 – Instalar Redmine

Visita la página de descargas de Redmine y comprueba la última versión estable disponible. En el momento de escribir este tutorial, la última versión disponible es la 5.0.5.

Utiliza wget para descargar Redmine.

$ wget https://www.redmine.org/releases/redmine-5.0.5.tar.gz

Es posible que obtengas el siguiente error al descargar el archivo porque uno de los certificados raíz del sitio web ha caducado.

WARNING: The certificate of ‘www.redmine.org’ is not trusted.
WARNING: The certificate of ‘www.redmine.org’ doesn't have a known issuer.
WARNING: The certificate of ‘www.redmine.org’ has expired.

Si te aparece este error, ejecuta en su lugar el siguiente comando para descargar.

$ wget https://www.redmine.org/releases/redmine-5.0.5.tar.gz --no-check-certificate

Extrae y mueve los archivos al directorio /var/www/redmine.

$ tar xfz redmine-5.0.5.tar.gz
$ sudo mv redmine-5.0.5 /var/www/redmine

Desplázate al directorio /var/www/redmine.

$ cd /var/www/redmine

Obtendrás la siguiente salida y una advertencia sobre la versión de Ruby. Puedes ignorarlo sin problemas.

RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
you can ignore these warnings with 'rvm rvmrc warning ignore /var/www/redmine/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.

Unknown ruby interpreter version (do not know how to handle): >=2.5.0,<3.2.0.

Crea los archivos de configuración de Redmine utilizando los archivos de ejemplo suministrados.

$ cp config/configuration.yml.example config/configuration.yml
$ cp config/database.yml.example config/database.yml
$ cp public/dispatch.fcgi.example public/dispatch.fcgi

Abre el archivo database.yml para editarlo.

$ nano config/database.yml

Busca y configura los ajustes de tu base de datos en la siguiente sección.

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "Your_password2"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8mb4

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Instala bundler para gestionar las dependencias de gemas ruby.

$ gem install bundler

Configura el entorno para instalar las dependencias de las gemas.

$ bundle config set --local without 'development test'

Instala las dependencias de gemas.

$ bundle install

Si tienes algún problema con las versiones de las gemas, utiliza el siguiente comando para restaurarlas.

$ gem pristine --all

Añade la dependencia webrick.

$ bundle add webrick

Genera una clave secreta aleatoria para evitar la manipulación de las cookies de almacenamiento de datos de sesión.

$ bundle exec rake generate_secret_token

Crea la estructura de la base de datos.

$ RAILS_ENV=production bundle exec rake db:migrate

Inserta los datos en la base de datos MySQL.

$ RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data

Crea los directorios necesarios y establece los permisos de los archivos.

$ mkdir -p tmp/pdf
$ mkdir -p public/plugin_assets
$ chown -R $USER:$USER files log tmp public/plugin_assets
$ chmod -R 755 /var/www/redmine/

Ejecuta el siguiente comando para iniciar una instancia del servidor Rails.

$ bundle exec rails server -u webrick -e production
=> Booting WEBrick
=> Rails 6.1.7.2 application starting in production http://0.0.0.0:3000
=> Run `bin/rails server --help` for more startup options
[2023-03-06 09:12:11] INFO  WEBrick 1.7.0
[2023-03-06 09:12:11] INFO  ruby 3.1.3 (2022-11-24) [x86_64-linux]
[2023-03-06 09:12:11] INFO  WEBrick::HTTPServer#start: pid=34652 port=3000

Abre la URL http://<yourserverIP>:3000/login para obtener la pantalla de inicio de sesión de Redmine.

Pantalla de inicio de sesión de Redmine

Introduce las credenciales por defecto(admin/admin) para iniciar sesión. Se te pedirá que cambies la contraseña.

Pantalla de caducidad de la contraseña de Redmine

A continuación, serás redirigido a la página Mi Cuenta.

Redmine Mi cuenta

Redmine se ha instalado correctamente.

A continuación, pulsa CTRL+C en el terminal para detener el servidor.

Paso 6 – Instalar Phusion Passenger

Phusion Passenger es un servidor de aplicaciones ruby que nos permite servir Redmine a través de un servidor de terceros. En nuestro caso, utilizaremos Apache.

Instala Passenger.

$ gem install passenger

Instala el módulo Passenger para el servidor Apache.

$ passenger-install-apache2-module

Aparecerá un mensaje de bienvenida. Pulsa Intro para continuar.

Welcome to the Phusion Passenger Apache 2 module installer, v6.0.17.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.
--------------------------------------------

A continuación, se te preguntará por el idioma. Ruby está seleccionado por defecto, así que pulsa Intro para continuar.

Which languages are you interested in?

Use <space> to select.
If the menu doesn't display correctly, press '!'

 ? ?  Ruby
   ?  Python
   ?  Node.js
   ?  Meteor
--------------------------------------------

El proceso completo tardará unos 10-15 minutos en finalizar. Si te aparece un error como el siguiente, lo más probable es que se deba a una RAM baja. Deberías aumentar la RAM de tu servidor o instalar espacio swap.

c++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
rake aborted!

Una vez finalizado el proceso, aparecerá el siguiente mensaje.

--------------------------------------------
Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17
     PassengerDefaultRuby /home/navjot/.rvm/gems/ruby-3.1.3/wrappers/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER when you are done editing.

No pulses Intro todavía. Abre una nueva sesión en tu servidor como usuario actual y realiza las siguientes configuraciones.

Paso 7 – Configurar el servidor Apache

Crea un archivo de configuración del módulo Apache para Phusion Passenger.

$ sudo nano /etc/apache2/conf-available/00-passenger.conf

Pega el código que obtuviste al final de la instalación de passenger.

 LoadModule passenger_module /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17
     PassengerDefaultRuby /home/navjot /.rvm/gems/ruby-3.1.3/wrappers/ruby
   </IfModule>

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Crea otro archivo de configuración de Apache para el sitio Redmine.

$ sudo nano /etc/apache2/sites-available/redmine.conf

Pega en él el siguiente código.

Listen 3000
<IfModule mod_passenger.c>
  PassengerRoot /home/navjot/.rvm/gems/ruby-3.1.3/gems/passenger-6.0.17
  PassengerDefaultRuby /home/navjot/.rvm/gems/ruby-3.1.3/wrappers/ruby
</IfModule>
<VirtualHost *:3000>
    ServerName redmine.example.com
    DocumentRoot "/var/www/redmine/public"

    CustomLog ${APACHE_LOG_DIR}/redmine_access.log combined
    ErrorLog ${APACHE_LOG_DIR}/redmine_error.log
    LogLevel warn

    <Directory "/var/www/redmine/public">
        Options Indexes ExecCGI FollowSymLinks
        Require all granted
        AllowOverride all
    </Directory>
</VirtualHost>

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Abre el archivo principal de configuración de Apache /etc/httpd/conf/httpd.conf para editarlo.

$ sudo nano /etc/httpd/conf/httpd.conf

Busca la variable ServerName y descoméntala eliminando la almohadilla (#) que aparece delante de ella y estableciendo su valor como se indica a continuación.

ServerName localhost

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Habilita el sitio Redmine y la configuración de Phusion Passenger.

$ sudo a2ensite redmine.conf
$ sudo a2enconf 00-passenger.conf

Verifica tu configuración de Apache.

$ sudo apachectl configtest
Syntax OK

Vuelve atrás y pulsa Intro para continuar con la instalación de Passenger. Realizará algunas comprobaciones, y deberías ver el siguiente mensaje al finalizar con éxito.

Deploying a web application

To learn how to deploy a web app on Passenger, please follow the deployment
guide:

  https://www.phusionpassenger.com/library/deploy/apache/deploy/

Enjoy Phusion Passenger, a product of Phusion® (www.phusion.nl) :-)
https://www.phusionpassenger.com

Passenger® is a registered trademark of Phusion Holding B.V.

Reinicia tu servidor Apache.

$ sudo systemctl restart apache2

Tu sitio web debería estar disponible en http://redmine.example.com:3000.

Esta no es la forma perfecta de acceder a Redmine. Todavía se sirve a través del protocolo HTTP inseguro y utiliza un número de puerto. Instalaremos Nginx para que actúe como proxy inverso y sirva Redmine utilizando el protocolo HTTPS para mejorar esto. Antes de pasar a la instalación y configuración de Nginx, necesitamos configurar el certificado SSL.

Paso 8 – Instalar Nginx

Debian 11 incluye una versión antigua de Nginx. Para instalar la última versión, tienes que descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación. Debian requiere el siguiente comando para ejecutarse utilizando sudo.

$ sudo nginx -v
nginx version: nginx/1.22.1

Cambiar el puerto de escucha de Apache

Para evitar cualquier conflicto con Nginx, necesitamos cambiar el puerto por defecto en el que escucha Apache. Abre el archivo /etc/apache2/ports.conf para editarlo.

$ sudo nano /etc/apache2/ports.conf

Cambia el puerto de 80 a 8080 como se indica a continuación.

Listen 8080

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Desactiva la configuración por defecto del sitio.

$ sudo a2dissite 000-default.conf

Reinicia Apache.

$ sudo systemctl restart apache2

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Comprueba el estado del servidor Nginx.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-03-06 10:29:44 UTC; 6s ago
       Docs: https://nginx.org/en/docs/
    Process: 53531 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 53532 (nginx)
      Tasks: 2 (limit: 1129)
     Memory: 1.7M
        CPU: 8ms
     CGroup: /system.slice/nginx.service
             ??53532 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
             ??53533 nginx: worker process

Paso 9 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Debian no viene con Snapd instalado. Por tanto, instala Snapd.

$ sudo apt install snapd

Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Genera el certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d redmine.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/redmine.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Comprueba el servicio programador de renovaciones de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT         LAST                        PASSED       UNIT                         ACTIVATES
Mon 2023-03-06 11:37:00 UTC 1h 2min left n/a                         n/a          snap.certbot.renew.timer     snap.certbot.renew.service
Mon 2023-03-06 13:37:15 UTC 3h 2min left Sun 2023-03-05 13:37:15 UTC 20h ago      systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Tue 2023-03-07 00:00:00 UTC 13h left     Mon 2023-03-06 00:00:15 UTC 10h ago      logrotate.timer              logrotate.service

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 10 – Configurar Nginx como proxy inverso

Crea y abre el archivo /etc/nginx/conf.d/redmine.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/redmine.conf

Pega en él el siguiente código.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    server_name redmine.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;

    server_name redmine.example.com;

    ssl_certificate     /etc/letsencrypt/live/redmine.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/redmine.example.com/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/redmine.example.com/chain.pem;

	ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    access_log /var/log/nginx/redmine.access.log main;
    error_log  /var/log/nginx/redmine.error.log;

	location / {
        proxy_pass          http://localhost:3000;
        proxy_redirect      off;
        proxy_buffering     off;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl restart nginx

Tu aplicación Redmine debería ser accesible en https://redmine.example.com.

Deberías eliminar la entrada del puerto 3000 en el cortafuegos porque ya no es necesaria.

$ sudo ufw delete allow 3000

Conclusión

Con esto concluye nuestro tutorial en el que has aprendido a instalar el Gestor de Proyectos Redmine en un servidor Debian 11. También has aprendido a servir la aplicación Redmine a través de Nginx utilizando el protocolo HTTPS. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...