Cómo instalar el software de gestión de proyectos Redmine en Rocky Linux 8
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, multibase de datos y soporta 49 idiomas.
En este tutorial, aprenderás a instalar Redmine en un servidor basado en Rocky Linux 8.
Requisitos previos
-
Un servidor con Rocky Linux.
-
Un usuario no-sudo con privilegios de root.
-
Desactivar SELinux.
-
Todo actualizado.
$ sudo dnf update
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.
$ sudo firewall-cmd --state running
Abre el puerto 3000, que podemos utilizar para comprobar Redmine.
$ sudo firewall-cmd --permanent --add-port=3000
Permite los puertos HTTP y HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Recarga el cortafuegos para activar los cambios.
$ sudo firewall-cmd --reload
Paso 2 – Instalar el servidor Apache
Utilizaremos el servidor web Apache para desplegar Redmine. Instala Apache con el siguiente comando.
$ sudo dnf install httpd
Habilita e inicia el servicio Apache.
$ sudo systemctl enable --now httpd.service
Concede a tu usuario actual el usuario apache para que tenga el acceso necesario al directorio /var/www/redmine
.
$ sudo usermod -aG $USER apache
Paso 3 – Instalar y configurar el servidor MySQL
Utilizaremos la base de datos MySQL para almacenar los datos. El repositorio Appstream de Rocky Linux incluye la última versión de MySQL.
Instala MySQL.
$ sudo dnf install mysql-server
Habilita e inicia el servicio MySQL.
$ sudo systemctl enable mysqld --now
Asegura la instalación de MySQL.
$ sudo mysql_secure_installation
En el primer paso, se te preguntará si quieres configurar el Plugin de Validación de Contraseñas, que puedes utilizar para comprobar la solidez de tu contraseña de MySQL. Elige Y
para proceder. Se te pedirá que elijas el nivel de validación de la contraseña en el siguiente paso. 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. Connecting to MySQL using a blank password. 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
En el siguiente paso se te pedirá que elijas una contraseña de root. Elige una contraseña fuerte que cumpla los requisitos del plugin de validación de contraseñas. En el siguiente paso, se te preguntará si quieres continuar con la contraseña elegida. Pulsa y
para continuar.
Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
Pulsa Y
y luego ENTER
para todas las siguientes indicaciones 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.
... Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y Success. ... Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y Success. ... 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 shell de MySQL. Introduce la 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 al usuario privilegios en la base de datos redmine
.
mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
Sal de la Shell.
mysql> exit
Paso 4 – Instalar el repositorio EPEL
Algunos de los paquetes necesarios para Redmine están disponibles en el repositorio EPEL. Ejecuta el siguiente comando para instalar el repositorio EPEL.
$ sudo dnf install epel-release
Habilita el repositorio PowerTools.
$ sudo dnf config-manager --set-enabled powertools
Paso 5 – Instalar Ruby y otros requisitos
Rocky Linux 8 viene con cuatro versiones diferentes de Ruby: 2.5, 2.6, 2.7 y 3.0.
Enumera todos los módulos de Ruby disponibles.
$ dnf module list ruby Last metadata expiration check: 0:18:58 ago on Mon 03 Jan 2022 11:50:10 AM UTC. Rocky Linux 8 - AppStream Name Stream Profiles Summary ruby 2.5 [d] common [d] An interpreter of object-oriented scripting language ruby 2.6 common [d] An interpreter of object-oriented scripting language ruby 2.7 common [d] An interpreter of object-oriented scripting language ruby 3.0 common [d] An interpreter of object-oriented scripting language Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
La última versión de Redmine es compatible con todas las versiones excepto con la 3.0. Instalaremos Ruby 2.7 para nuestro tutorial.
Restablece las demás versiones y habilita la versión 2.7 de Ruby.
$ sudo dnf module reset ruby $ sudo dnf module enable ruby:2.7
Instala Ruby.
$ sudo dnf install ruby ruby-devel
Verifica la instalación.
$ ruby -v ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]
Instala el resto de paquetes necesarios para Redmine.
$ sudo dnf install rpm-build wget libxml2-devel make automake libtool ImageMagick ImageMagick-devel mariadb-devel httpd-devel openssl-devel libcurl-devel gcc gcc-c++
Paso 6 – 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 4.2.3.
Utiliza wget
para descargar Redmine.
$ wget https://redmine.org/releases/redmine-4.2.3.tar.gz
Extrae y mueve los archivos al directorio /var/www/redmine
.
$ tar xfz redmine-4.2.3.tar.gz $ sudo mv redmine-4.2.3 /var/www/redmine
Desplázate al directorio /var/www/redmine
.
$ cd /var/www/redmine
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 pida.
Instala bundler para gestionar las dependencias de las gemas de rubí.
$ gem install bundler
Configura el entorno para instalar las dependencias de las gemas.
$ bundle config set --local without 'development test'
Instala las dependencias de las gemas.
$ bundle install
Si tienes algún problema con las versiones de las gemas, utiliza el siguiente comando para restaurarlas.
$ sudo gem pristine --all
Genera una clave secreta aleatoria para evitar la manipulación de las cookies para almacenar los datos de la 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/remine/
Ejecuta el siguiente comando para iniciar una instancia del servidor Rails.
$ bundle exec rails server webrick -e production => Booting WEBrick => Rails 5.2.6 application starting in production on http://0.0.0.0:3000 => Run `rails server -h` for more startup options [2022-01-03 12:58:19] INFO WEBrick 1.6.1 [2022-01-03 12:58:19] INFO ruby 2.7.4 (2021-07-07) [x86_64-linux] [2022-01-03 12:58:19] INFO WEBrick::HTTPServer#start: pid=117224 port=3000
Abre la URL http://<yourserverIP>:3000/login
para obtener la pantalla de inicio de sesión de Redmine.
Introduce las credenciales por defecto(admin/admin) para iniciar la sesión. Se te pedirá que cambies la contraseña.
A continuación, serás redirigido a la página Mi cuenta.
Redmine se ha instalado correctamente.
A continuación, pulsa CTRL+C en el terminal para detener el servidor.
Paso 7 – 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 Enter para continuar.
Welcome to the Phusion Passenger Apache 2 module installer, v6.0.12. 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 pedirá el idioma. Ruby está seleccionado por defecto, así que pulsa Enter 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 --------------------------------------------
Es posible que recibas una advertencia sobre los permisos de los archivos. Si has seguido nuestro tutorial, sólo tienes que pulsar Enter para continuar.
Warning: some directories may be inaccessible by the web server! The web server typically runs under a separate user account for security reasons. That user must be able to access the Phusion Passenger(R) files. However, it appears that some directories have too strict permissions. This may prevent the web server user from accessing Phusion Passenger(R) files. It is recommended that you relax permissions as follows: sudo chmod o+x "/home/navjot" Press Ctrl-C to return to the shell. (Recommended) After relaxing permissions, re-run this installer. -OR- Press Enter to continue anyway.
Todo el proceso tardará unos 10-15 minutos en terminar. Si te aparece un error como el siguiente, lo más probable es que se deba a la escasa memoria RAM. Deberías aumentar la RAM de tu servidor o instalar espacio de intercambio.
c++: fatal error: Killed signal terminated program cc1plus compilation terminated. rake aborted!
Una vez finalizado el proceso, recibirás el siguiente mensaje.
-------------------------------------------- Almost there! Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /home/navjot/.gem/ruby/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /home/navjot/.gem/ruby/gems/passenger-6.0.12 PassengerDefaultRuby /usr/bin/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 todavía la tecla Enter. Abre una nueva sesión en tu servidor como el usuario actual y realiza las siguientes configuraciones.
Configurar el servidor Apache
Crea un archivo de configuración del módulo Apache para Phusion Passenger.
$ sudo nano /etc/httpd/conf.modules.d/00-passenger.conf
Pega el código que has obtenido al final de la instalación de passenger.
LoadModule passenger_module /home/navjot/.gem/ruby/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /home/username/.gem/ruby/gems/passenger-6.0.12 PassengerDefaultRuby /usr/bin/ruby </IfModule>
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
Crea otro archivo de configuración de Apache para el sitio de Redmine.
$ sudo nano /etc/httpd/conf.d/redmine.conf
Pega en él el siguiente código.
Listen 3000 <IfModule mod_passenger.c> PassengerRoot /home/username/.gem/ruby/gems/passenger-6.0.12 PassengerDefaultRuby /usr/bin/ruby </IfModule> <VirtualHost *:3000> ServerName redmine.example.com DocumentRoot "/var/www/redmine/public" CustomLog logs/redmine_access.log combined ErrorLog logs/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 pida.
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 la precede y estableciendo su valor como el siguiente.
ServerName localhost
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Verifica tu configuración de Apache.
$ httpd -t Syntax OK
Vuelve y pulsa Enter 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 httpd
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 inseguro HTTP y utiliza un número de puerto. Instalaremos Nginx para que actúe como proxy inverso y sirva a Redmine utilizando el protocolo HTTPS para mejorar esto. Antes de pasar a la instalación y configuración de Nginx, tenemos que configurar el certificado SSL.
Paso 8 – Instalar el SSL
Para instalar un certificado SSL usando Let’s Encrypt, necesitamos instalar la herramienta Certbot. Ejecuta los siguientes comandos para instalar Certbot.
$ sudo dnf install certbot
Detener el servidor Apache.
$ sudo systemctl stop httpd
Genera el certificado SSL.
$ sudo certbot certonly --standalone --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.
Inicia el servidor Apache.
$ sudo systemctl start httpd
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Crea un directorio webroot de desafío para la renovación automática de Let’s Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero crea el archivo /etc/cron.daily/certbot-renew
y ábrelo para editarlo.
$ sudo nano /etc/cron.daily/certbot-renew
Pega el siguiente código.
#!/bin/sh certbot renew --cert-name redmine.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl restart nginx"
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
Cambia los permisos del archivo de la tarea para que sea ejecutable.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Paso 9 – Instalar y configurar Nginx como proxy inverso
Rocky Linux 8 viene con cuatro versiones diferentes de Nginx: 1.14, 1.16, 1.18 y 1.20.
Enumera todos los módulos de Nginx disponibles.
$ dnf module list nginx Last metadata expiration check: 20:23:20 ago on Mon 03 Jan 2022 12:38:07 PM UTC. Rocky Linux 8 - AppStream Name Stream Profiles Summary nginx 1.14 [d] common [d] nginx webserver nginx 1.16 common [d] nginx webserver nginx 1.18 common [d] nginx webserver nginx 1.20 common [d] nginx webserver Extra Packages for Enterprise Linux Modular 8 - x86_64 Name Stream Profiles Summary nginx mainline common nginx webserver nginx 1.20 common [d] nginx webserver Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Restablece las otras versiones y activa la versión 1.20 de Nginx.
$ sudo dnf module reset nginx $ sudo dnf module enable nginx:1.20
Instala Nginx. Desactivamos temporalmente el repositorioEpel
ya que queremos coger Nginx del Appstream.
$ sudo dnf install nginx --disablerepo=epel-modular
Verifica la instalación.
$ nginx -v nginx version: nginx/1.20.0
Para evitar cualquier conflicto con Nginx, tenemos que cambiar el puerto por defecto en el que escucha Apache.
Cambiar el puerto de escucha de Apache
Abre el archivo /etc/httpd/conf/httpd.conf
para editarlo.
$ sudo nano /etc/httpd/conf/httpd.conf
Cambia el puerto de 80 a 8080 como sigue.
Listen 8080
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.
Reinicia Apache.
$ sudo systemctl restart httpd
Configurar Nginx
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.example.com.access.log main; error_log /var/log/nginx/redmine.example.com.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 solicite una vez que 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.
Comprueba 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
Inicia el servicio Nginx para habilitar la nueva configuración.
$ sudo systemctl start nginx
Tu aplicación Redmine debería ser accesible en https://redmine.example.com
.
Conclusión
Con esto concluye nuestro tutorial en el que has aprendido a instalar el Gestor de Proyectos Redmine en un servidor basado en Rocky Linux 8. 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 de abajo.