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 -y2. 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 mariadbProtege e inicializa MariaDB (ejecuta mysql_secure_installation si lo deseas) y luego crea la base de datos y el usuario para Redmine:
mysqlDentro 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 -yPassenger 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.ymlEdita el archivo de configuración de la base de datos:
nano config/database.ymlAsegú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: utf8mb4Instala Bundler y las gemas necesarias:
gem install bundler --no-rdoc --no-ri
bundle install --without development test postgresql sqlite --path vendor/bundleGenera 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:migratePara una verificación rápida puedes iniciar WEBrick (no recomendado en producción):
bundle exec rails server webrick -e productionPulsa CTRL+C para detenerlo cuando termines la verificación. Luego sal del usuario redmine:
exit5. 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.servicePega 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.targetCarga la nueva unidad y habilita el servicio:
systemctl daemon-reload
systemctl start redmine
systemctl enable redmine
systemctl status redmineNota: 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.confContenido 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 nginxSi 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:

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

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

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 --reloadCopias de seguridad y restauración (mini-metodología)
- Detén temporalmente el servicio de Redmine para asegurar consistencia (o realiza snapshot a nivel de disco):
systemctl stop redmine- Exporta la base de datos:
mysqldump -u root -p redmine > /var/backups/redmine.sql- 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- 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)
- Detén el servicio:
systemctl stop redmine- 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 /- Inicia el servicio y verifica:
systemctl start redmine
systemctl status redmineCuadro 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.
Materiales similares
Podman en Debian 11: instalación y uso
Apt-pinning en Debian: guía práctica
OptiScaler: inyectar FSR 4 en casi cualquier juego
Dansguardian + Squid NTLM en Debian Etch
Arreglar error de instalación Android en SD