Guía de tecnologías

Instalar Redmine en CentOS 8 con Nginx

6 min read Guías Actualizado 21 Oct 2025
Instalar Redmine en CentOS 8 con Nginx
Instalar Redmine en CentOS 8 con Nginx

Qué es Redmine

Redmine es un sistema gratuito y de código abierto para gestión de proyectos y seguimiento de incidencias. Funciona sobre Ruby on Rails y soporta bases de datos como PostgreSQL y MariaDB. Ofrece control de acceso por roles, notificaciones por correo, wikis, foros y soporte para plugins.

Variantes de búsqueda (intención principal y variantes relacionadas)

  • instalar Redmine en CentOS 8
  • Redmine CentOS 8 Nginx
  • instalación Redmine MariaDB
  • Redmine Ruby Passenger
  • configurar Redmine Nginx

Requisitos previos

  • Un servidor con CentOS 8.
  • Acceso root o un usuario con privilegios sudo.
  • Puerto 80 y 443 abiertos en el firewall si piensas exponer Redmine públicamente.

Importante: adapta nombres de host, contraseñas y rutas a tu entorno antes de ejecutar los comandos.

1. Instalar dependencias necesarias

Instala las herramientas de desarrollo y las librerías que Redmine necesita para compilar gemas nativas:

dnf group install "Development Tools"
dnf install zlib-devel curl-devel openssl-devel -y

2. Instalar y configurar MariaDB

Redmine usará MariaDB como backend. Instala y levanta el servicio:

dnf install mariadb-server mariadb-devel -y
systemctl start mariadb
systemctl enable mariadb

Protege e inicializa MariaDB (ejecuta mysql_secure_installation si lo deseas) y luego crea la base de datos y el usuario para Redmine:

mysql

Dentro del prompt de MariaDB ejecuta:

CREATE DATABASE redmine CHARACTER SET utf8mb4;
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT;

Sustituye ‘password’ por una contraseña fuerte y guarda esa credencial en tu gestor de secretos.

3. Instalar Ruby y Passenger

Habilita EPEL y luego instala Ruby, Passenger y módulos necesarios:

dnf install epel-release -y
dnf config-manager --enable epel -y
dnf install mod_passenger passenger passenger-devel ruby ruby-devel -y

Passenger permite servir aplicaciones Ruby desde Nginx/Apache. En esta guía usaremos Passenger para un despliegue más robusto que WEBrick en producción.

4. Instalar Redmine

Crea un usuario de sistema para correr Redmine y descarga la versión recomendada (actualiza la URL a la versión que quieras):

useradd -m -U -r -d /opt/redmine redmine
su - redmine
wget --no-check-certificate https://www.redmine.org/releases/redmine-4.2.1.zip
unzip redmine-4.2.1.zip
mv redmine-4.2.1 redmine
cd redmine
cp config/database.yml.example config/database.yml

Edita el archivo de configuración de la base de datos:

nano config/database.yml

Asegúrate de que la sección production tenga entradas similares a estas, adaptando credenciales:

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "password"
  encoding: utf8mb4

Instala Bundler y las gemas necesarias:

gem install bundler --no-rdoc --no-ri
bundle install --without development test postgresql sqlite --path vendor/bundle

Genera el token secreto y aplica las migraciones en entorno de producción:

bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate

Para una verificación rápida puedes iniciar WEBrick (no recomendado en producción):

bundle exec rails server webrick -e production

Pulsa CTRL+C para detenerlo cuando termines la verificación. Luego sal del usuario redmine:

exit

5. Crear un servicio systemd para Redmine

Crea el archivo de servicio systemd para facilitar la gestión del proceso:

nano /usr/lib/systemd/system/redmine.service

Pega lo siguiente:

[Unit]
Description=Redmine server
After=syslog.target
After=network.target

[Service]
Type=simple
User=redmine
Group=redmine
ExecStart=/bin/ruby /opt/redmine/redmine/bin/rails server webrick -e production
TimeoutSec=300

[Install]
WantedBy=multi-user.target

Carga la nueva unidad y habilita el servicio:

systemctl daemon-reload
systemctl start redmine
systemctl enable redmine
systemctl status redmine

Nota: si has instalado Passenger, la forma recomendada es integrar Redmine en Nginx usando Passenger y no ejecutar WEBrick desde systemd; este servicio es útil para pruebas rápidas o despliegues simples.

6. Configurar Nginx como proxy inverso

Instala Nginx y crea un bloque de servidor para redirigir el tráfico al backend local en el puerto 3000:

dnf install nginx -y
nano /etc/nginx/conf.d/redmine.conf

Contenido sugerido (ajusta server_name):

upstream backend {
  server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name redmine.example.com;
    access_log /var/log/nginx/redmine.example.com-access.log;
    error_log /var/log/nginx/redmine.example.com-error.log;

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
    }
}

Verifica la configuración, arranca y habilita Nginx:

nginx -t
systemctl start nginx
systemctl enable nginx
systemctl status nginx

Si vas a exponer Redmine a Internet, configura HTTPS con Certbot y Let’s Encrypt (ver la sección de seguridad más abajo).

7. Acceder a Redmine

Abre en el navegador la URL configurada, por ejemplo:

http://redmine.example.com

Captura de la interfaz de Redmine (página de inicio)

Haz clic en “Sign in” y accede con las credenciales por defecto (admin / admin) o las que hayas establecido.

Formulario de inicio de sesión de Redmine

Al iniciar sesión por primera vez se pedirá cambiar la contraseña del administrador:

Pantalla para cambiar la contraseña del usuario admin

Recomendaciones de seguridad

  • Cambia la contraseña del usuario admin inmediatamente y desactiva cuentas innecesarias.
  • Usa HTTPS con certificados válidos (Certbot / Let’s Encrypt).
  • Ejecuta Redmine bajo un usuario sin privilegios (ya lo hicimos con el usuario redmine).
  • Limita el acceso al puerto 3000 a localhost con firewall (firewalld/iptables).
  • Mantén actualizadas las gemas y el sistema operativo.

Ejemplo para abrir sólo HTTP/HTTPS en firewalld:

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

Copias de seguridad y restauración (mini-metodología)

  1. Detén temporalmente el servicio de Redmine para asegurar consistencia (o realiza snapshot a nivel de disco):
systemctl stop redmine
  1. Exporta la base de datos:
mysqldump -u root -p redmine > /var/backups/redmine.sql
  1. Haz copia de los archivos: attachments, configuración y directorios críticos:
tar czf /var/backups/redmine-files-$(date +%F).tar.gz /opt/redmine/files /opt/redmine/config
  1. Prueba la restauración en un entorno de staging antes de un fallo en producción.

Lista de verificación por roles

  • Administrador de sistema:
    • Verificar servicio systemd, logs y permisos de usuario.
    • Rotación de logs y backups automáticos.
  • Administrador de Redmine:
    • Crear proyectos, roles y permisos.
    • Configurar correo saliente (SMTP) para notificaciones.
  • Usuario final:
    • Comprobar accesos, crear incidencias y seguir flujos de trabajo.

Criterios de aceptación

  • Redmine responde en la URL pública configurada.
  • Inicio de sesión con el usuario admin funciona y permite cambiar la contraseña.
  • Las migraciones de la base de datos finalizaron sin errores.
  • El servicio systemd muestra estado activo y reinicia correctamente.

Solución de problemas común

  • No se conecta a la base de datos: revisa config/database.yml y credenciales.
  • Puerto 3000 no accesible: verifica que el proceso Ruby está en ejecución y ss -antpl | grep 3000.
  • Nginx devuelve 502: revisa logs de Nginx y que el backend esté escuchando en 127.0.0.1:3000.

Rolback básico (si una actualización falla)

  1. Detén el servicio:
systemctl stop redmine
  1. Restaura la copia de seguridad de la base de datos y archivos:
mysql -u root -p redmine < /var/backups/redmine.sql
tar xzf /var/backups/redmine-files-YYYY-MM-DD.tar.gz -C /
  1. Inicia el servicio y verifica:
systemctl start redmine
systemctl status redmine

Cuadro con datos clave

  • Puerto por defecto de Redmine: 3000
  • Ruta de instalación sugerida: /opt/redmine
  • Usuario de servicio: redmine
  • Base de datos: MariaDB (redmine, usuario redmine)

Glosario de 1 línea

  • Bundler: gestor de dependencias para proyectos Ruby.
  • Passenger: servidor de aplicaciones para desplegar aplicaciones Ruby con Nginx/Apache.
  • WEBrick: servidor web Ruby integrado, útil para pruebas pero no recomendado en producción.

Preguntas frecuentes

  • ¿Cuáles son las credenciales por defecto?
    Usuario: admin, Contraseña: admin (cámbialas al primer acceso).

  • ¿Necesito Passenger?
    Passenger es la opción recomendada para producción; WEBrick se usa solo para pruebas rápidas.

  • ¿Cómo habilito HTTPS?
    Usa Certbot para generar certificados Let’s Encrypt y configura el bloque server de Nginx para SSL.

Conclusión

Has instalado Redmine en CentOS 8, configurado MariaDB, creado el servicio systemd y montado Nginx como proxy inverso. Aplica las recomendaciones de seguridad, automatiza copias de seguridad y prueba la restauración periódicamente.

Resumen rápido:

  • Crear usuario redmine y base de datos.
  • Instalar dependencias Ruby y Passenger.
  • Configurar Nginx y systemd.
  • Proteger con HTTPS y backups.

¡Felicidades! Tu instancia de Redmine está lista para gestionar proyectos.

Autor
Edición

Materiales similares

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach