Instalar o Redmine no CentOS 8
O que é o Redmine
Redmine é um sistema de gestão de projetos e acompanhamento de problemas (issue tracker) open source escrito em Ruby on Rails. Suporta múltiplos projetos, wiki, fóruns, controle de acesso por função e notificações por e-mail. Definição rápida: Redmine = tracker + gestão de projetos com extensões via plugins.
Intenções deste guia
- Instalar Redmine em CentOS 8 com MariaDB, Ruby e Nginx.
- Fornecer configuração mínima de produção (systemd + Nginx).
- Incluir verificações, segurança básica, backup e alternativas.
Pré-requisitos
- Um servidor com CentOS 8 (ou compatível como AlmaLinux/Rocky) com acesso root.
- Conexão de rede e acesso ao repositório dnf.
- Recomendado: firewall configurado e backup da máquina antes de mudanças.
Dependências básicas
Instale ferramentas de desenvolvimento e bibliotecas necessárias:
dnf group install "Development Tools"
dnf install zlib-devel curl-devel openssl-devel -yImportante: pacotes de desenvolvimento são usados para compilar gems nativas.
Instalar e configurar o banco MariaDB
Instale o servidor MariaDB:
dnf install mariadb-server mariadb-devel -yInicie e habilite o serviço:
systemctl start mariadb
systemctl enable mariadbEntre no shell do MariaDB para criar a base e o usuário:
mysqlNo prompt do MariaDB execute:
MariaDB [(none)]> CREATE DATABASE redmine CHARACTER SET utf8mb4;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;Nota: substitua ‘password’ por uma senha forte. utf8mb4 é recomendado para compatibilidade com emojis e caracteres multibyte.
Instalar Ruby e Passenger
Habilite o repositório EPEL e instale Ruby e Passenger:
dnf install epel-release -y
dnf config-manager --enable epel -y
dnf install mod_passenger passenger passenger-devel ruby ruby-devel -yObservação: em produção é comum usar Passenger (integrado ao Nginx/Apache) ou Puma com um reverse proxy; WEBrick é somente para testes.
Instalar o Redmine (usuário dedicado)
Crie um usuário dedicado e baixe a versão do Redmine:
useradd -m -U -r -d /opt/redmine redmine
su - redmine
wget --no-check-certificate https://www.redmine.org/releases/redmine-4.2.1.zipExtraia e renomeie:
unzip redmine-4.2.1.zip
mv redmine-4.2.1 redmine
cd redmine
cp config/database.yml.example config/database.ymlEdite config/database.yml e configure a seção production:
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "password"
encoding: utf8mb4Salve o arquivo e instale bundler e gems:
gem install bundler --no-rdoc --no-ri
bundle install --without development test postgresql sqlite --path vendor/bundleGere o token secreto e execute as migrações em modo production:
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrateInicie temporariamente com WEBrick apenas para verificar:
bundle exec rails server webrick -e productionSaída esperada (exemplo):
/usr/bin/ruby: warning: shebang line ending with \r may cause problems
=> Booting WEBrick
=> Rails 5.2.5 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2021-06-24 00:40:15] INFO WEBrick 1.4.2
[2021-06-24 00:40:15] INFO ruby 2.5.5 (2019-03-15) [x86_64-linux]
[2021-06-24 00:40:15] INFO WEBrick::HTTPServer#start: pid=43076 port=3000Pressione CTRL+C para parar o servidor de teste.
Em seguida, saia do usuário redmine:
exitCriar um service systemd para o Redmine
Crie o arquivo /usr/lib/systemd/system/redmine.service:
nano /usr/lib/systemd/system/redmine.serviceConteúdo sugerido:
[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
Restart=on-failure
[Install]
WantedBy=multi-user.targetRecarregue systemd, inicie e habilite o serviço:
systemctl daemon-reload
systemctl start redmine
systemctl enable redmine
systemctl status redmineVerifique se a porta 3000 está escutando:
ss -antpl | grep 3000Importante: usar WEBrick em systemd para produção não é recomendado; prefira Passenger (integração com Nginx) ou um servidor de aplicação como Puma.
Configurar Nginx como reverse proxy
Instale Nginx:
dnf install nginx -yCrie /etc/nginx/conf.d/redmine.conf com o conteúdo abaixo (exemplo):
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-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}Observação: corrigimos X-Forwarded-For e X-Forwarded-Proto para os cabeçalhos padrão. Para HTTPS, troque proto para https e configure certificados.
Teste a configuração e inicie o serviço:
nginx -t
systemctl start nginx
systemctl enable nginx
systemctl status nginxAcessar a interface do Redmine
Abra no navegador: http://redmine.example.com

Clique em Sign in para entrar. Tela de login:

O usuário padrão é admin com senha admin (altere imediatamente). Você será direcionado para alterar a senha:

Pós-instalação e dicas de produção
- Ajuste permissões: garanta que /opt/redmine e subpastas sejam de propriedade do usuário redmine.
- Mova para Passenger ou Puma em produção. Passenger se integra ao Nginx; Puma é usado com systemd ou tools como systemd + socket.
- Configure e habilite SSL (Let’s Encrypt certbot) e force HTTPS.
- Configure SMTP em config/configuration.yml para envio de e-mails (notificações, recuperação de senha).
- Configure tarefas agendadas (cron) para tarefas periódicas do Redmine, como limpeza, backups e envio de e-mails.
Exemplo mínimo de backup do banco e arquivos:
# Dump do banco
mysqldump -u root -p redmine > /root/redmine-db-$(date +%F).sql
# Backup dos arquivos (attachments)
tar -czf /root/redmine-files-$(date +%F).tar.gz /opt/redmine/filesArmazene backups fora do servidor (S3, NFS, outro host) e rotacione.
Segurança e SELinux
- Se SELinux estiver Enforcing, configure contextos para /opt/redmine e permita conexões de rede para o processo Ruby/Passenger.
- Abra portas no firewall: 80/443 para Nginx e (internamente) 3000 se necessário apenas para debug.
Exemplo firewall-cmd:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reloadLogs e solução de problemas
- Logs do Redmine: /opt/redmine/log/production.log
- Logs do Nginx: /var/log/nginx/redmine.example.com-error.log
- systemd: journalctl -u redmine -f
Problemas comuns:
- Gems nativas falhando ao compilar: verifique gcc e pacotes-devel instalados.
- Erros de conexão com MariaDB: confira usuário/senha e host em database.yml.
- Arquivos com CRLF causando “shebang line ending with \r”: normalize com dos2unix ou edite para LF.
Alternativas e abordagens diferentes
- Usar Docker: imagens oficiais ou comunitárias do Redmine simplificam isolamento e upgrades.
- Usar pacote distribuições (ex.: Redmine via repositório OBS/epel se disponível) para atualizações gerenciadas.
- Utilizar MariaDB vs PostgreSQL: ambas são suportadas; PostgreSQL é recomendado para algumas features e escalabilidade.
Playbook de implantação (resumo rápido)
- Preparar servidor (firewall, atualizações). 2. Instalar dependências (Development Tools, libs). 3. Instalar MariaDB e criar DB/usuário. 4. Instalar Ruby/Passenger. 5. Baixar e configurar Redmine. 6. Instalar gems e migrar DB. 7. Provisionar systemd e Nginx/SSL. 8. Testar e colocar em produção.
Checklist por função
- Administrador de sistema:
- Criar usuário redmine e ajustar permissões.
- Configurar backups e rotação.
- Configurar SSL e firewall.
- DBA/Operações:
- Criar banco redmine com utf8mb4.
- Testar restauração de backup.
- Desenvolvedor/Integrador:
- Verificar plugins compatíveis com a versão do Redmine.
- Testar em staging antes de instalar em produção.
Critérios de aceitação (KRs práticos)
- Redmine responde via HTTPS em redmine.example.com sem erros.
- Login com usuário admin padrão funciona e senha foi alterada.
- Migrações do banco concluídas sem erros.
- Backups do banco e arquivos produzem arquivos recuperáveis.
Testes/aceitação rápidos
- Acesse / e verifique HTTP 200.
- Faça login como admin e crie um projeto de teste.
- Anexe um arquivo (upload) e baixe para confirmar permissões.
- Dispare uma notificação por e-mail (configurar SMTP) e confirme chegada.
Migração e upgrade
- Para atualizar Redmine, faça backup completo, atualize código fonte, execute bundle install e rake db:migrate, teste em staging.
- Ao migrar DB entre MySQL/MariaDB e PostgreSQL, teste conversão e exportação adequada.
Opções de failover e escalabilidade (nível alto)
- Para alta disponibilidade, mova DB para cluster/replicação e coloque Nginx em front com múltiplas instâncias de aplicação (Puma/Passenger) atrás de um load balancer.
- Use armazenamento de arquivos centralizado (NFS, S3 via plugin) para attachments.
Exemplo de decisão rápida (Mermaid)
flowchart TD
A[Novo servidor?] -->|Sim| B{Deseja Docker?}
B -->|Sim| C[Usar imagem Redmine Docker]
B -->|Não| D[Instalar manualmente 'passenger/puma']
A -->|Não| E[Atualizar/Manter existente]
D --> F{Produção?}
F -->|Sim| G[Configurar SSL e monitoramento]
F -->|Não| H[Executar WEBrick para testes]Conclusão
Parabéns — você tem um Redmine funcional no CentOS 8 com MariaDB e Nginx. Para produção, recomendo migrar de WEBrick para Passenger ou Puma, configurar SSL e automatizar backups. Teste atualizações em um ambiente de staging antes de aplicar em produção.
Importante: não invente senhas padrão em produção; utilize senhas fortes e controle de acesso.
Materiais semelhantes
Instalar e usar Podman no Debian 11
Apt‑pinning no Debian: guia prático
Injete FSR 4 com OptiScaler em qualquer jogo
DansGuardian e Squid com NTLM no Debian Etch
Corrigir erro de instalação no Android