Installare Redmine su Rocky Linux con PostgreSQL e Apache (Passenger)
Questo guida mostra come installare Redmine 4.2.x su Rocky Linux 8 con PostgreSQL, Ruby 2.7 via RVM e Phusion Passenger integrato con Apache/httpd. Copre prerequisiti, dipendenze, configurazione database, installazione di Passenger, virtual host Apache (HTTP/HTTPS), verifica, sicurezza, backup e checklist operative.
Importante: sostituire nomi host, password e percorsi di esempio con i valori dell’ambiente di produzione.
Indicazioni principali
- Intento primario: installare Redmine in produzione su Rocky Linux con PostgreSQL e Apache
- Varianti correlate: Redmine su CentOS/AlmaLinux, Redmine con MySQL, Redmine + Nginx + Passenger, deployment containerizzato, aggiornamento di Redmine
Panoramica e definizione rapida
Redmine è un software open source per la gestione dei progetti e il tracciamento dei ticket, sviluppato principalmente in Ruby on Rails. Nell’architettura proposta Redmine viene eseguito con Ruby 2.7 gestito da RVM, persiste i dati su PostgreSQL e viene esposto tramite Phusion Passenger integrato in Apache/httpd.
Nota: questa guida assume privilegi di root o sudo e una conoscenza di base della shell Linux.
Requisiti e ambiente di esempio
Ambiente usato nell’esempio:
- Sistema operativo: Rocky Linux 8.4
- IP: 192.168.1.10
- Privilegi: root o sudo
- Nome a dominio: redmine.example.com
Obiettivi pratici della guida:
- Installare Ruby 2.7 con RVM
- Configurare PostgreSQL per Redmine
- Installare Passenger e integrarlo con Apache
- Configurare virtual host Apache per Redmine (HTTP e HTTPS)
- Installare e configurare Redmine
Prerequisito raccomandato: completare l’installazione di PostgreSQL prima di procedere.
Fattore di rischio e note importanti
Important: eseguire questa guida in un ambiente di test prima della produzione. Conservare backup dei dati PostgreSQL e dei file di Redmine prima di ogni aggiornamento.
Installare le dipendenze
Eseguire i comandi seguenti con sudo o come root.
- Abilitare il repository EPEL
sudo dnf install epel-release -y- Installare pacchetti di base necessari
sudo dnf install curl gpg gnupg2 gcc gcc-c++ make patch autoconf automake bison ImageMagick libffi-devel libtool patch redhat-rpm-config readline-devel postgresql-devel zlib-devel openssl-devel -y- Pacchetti per la compilazione del modulo Apache/Passenger
sudo dnf install libcurl-devel httpd-devel httpd apr-devel apr-util-devel -y- Avviare e abilitare il servizio httpd
sudo systemctl enable --now httpd
sudo systemctl status httpd
Nota: se la macchina è dotata di firewall attivo, aprire le porte 80 e 443.
Installare RVM e Ruby 2.7
Redmine 4.2.x richiede Ruby 2.7. Seguire i passaggi per installare RVM e Ruby.
- Importare le chiavi GPG dei manutentori di RVM
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -- Installare RVM e caricare l’ambiente
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
- Ricaricare RVM e soddisfare i requisiti
rvm reload
rvm requirements run
- Installare Ruby 2.7
rvm install 2.7
rvm use 2.7 --default
rvm list
ruby --version
Verificare che la versione attiva sia Ruby 2.7.x.
Configurare PostgreSQL per Redmine
Se PostgreSQL non è già installato, installarlo e avviarlo secondo le procedure standard per Rocky Linux.
- Accedere alla shell di PostgreSQL
sudo -u postgres psql- Creare ruolo e database per Redmine (sostituire la password con una forte)
CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'StrongPasswordRedmine' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redminedb WITH ENCODING='UTF8' OWNER=redmine;
\q
Consiglio: gestire i segreti con strumenti come vault o almeno file di configurazione accessibili solo a utenti privilegiati.
Scaricare e preparare Redmine
In questo esempio si installa Redmine 4.2.3 in /var/www/redmine.
- Scaricare l’archivio e estrarlo
cd /var/www/
wget https://www.redmine.org/releases/redmine-4.2.3.tar.gz
tar -xzvf redmine-4.2.3.tar.gz
mv redmine-*/ redmine- Configurare il database
export REDMINE=/var/www/redmine
cd $REDMINE
nano config/database.ymlInserire la sezione production come nel seguente esempio (modificare nome database, utente e password):
production:
adapter: postgresql
database: redminedb
host: localhost
username: redmine
password: 'StrongPasswordRedmine'
encoding: utf8Salvare e uscire.
- Installare Bundler e dipendenze Ruby
gem install bundler
bundle config set --local path 'vendor/bundle'
bundle config set --local without 'development test'
bundle install
- Generare il token segreto e migrare il database
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
- Impostare proprietà dei file
sudo chown -R apache:apache $REDMINENota: se si utilizza un altro utente web (ad esempio nginx), adattare l’ownership.
Installare e configurare Phusion Passenger
Passenger è il server applicazioni consigliato per applicazioni Rails in produzione quando si usa Apache o Nginx.
- Installare il gem passenger
gem install passenger
- Compilare il modulo Apache per Passenger
passenger-install-apache2-moduleDurante l’installazione il programma mostrerà le istruzioni da aggiungere a un file di configurazione Apache.
- Creare il file di configurazione di Passenger per Apache
sudo nano /etc/httpd/conf.d/passenger.confEsempio di contenuto (verificare i percorsi di passenger e ruby prodotti dall’installazione):
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.7.2/gems/passenger-6.0.12/buildout/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-2.7.2/gems/passenger-6.0.12
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
- Riavviare Apache
sudo systemctl restart httpd
Verificare l’output dell’installer e assicurarsi che non siano presenti errori.

Configurare httpd (virtual host) per Redmine
- Creare il virtual host base (HTTP)
sudo nano /etc/httpd/conf.d/redmine.confEsempio di configurazione HTTP:
PassengerRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
ServerName redmine.example.io
DocumentRoot "/var/www/redmine/public"
ErrorLog logs/redmine_error_log
LogLevel warn
Options Indexes ExecCGI FollowSymLinks
Require all granted
AllowOverride all
- Configurazione HTTPS con redirect da HTTP (esempio con percorsi Let’s Encrypt)
PassengerRuby /usr/local/rvm/gems/ruby-2.7.2/wrappers/ruby
ServerName redmine.example.io
Redirect permanent / https://redmine.example.io/
ServerName redmine.example.io
Protocols h2 http/1.1
DocumentRoot "/var/www/redmine/public"
ErrorLog /var/log/httpd/redmine.example.io-error.log
CustomLog /var/log/httpd/redmine.example.io-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/redmine.example.io/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/redmine.example.io/privkey.pem
Options Indexes ExecCGI FollowSymLinks
Require all granted
AllowOverride all
Importante: abilitare mod_ssl e ottenere certificati validi (Let’s Encrypt, CA interna, ecc.).
- Verificare configurazione e riavviare Apache
apachectl configtest
sudo systemctl restart httpd
Verificare l’installazione di Redmine
Aprire il browser su:
https://redmine.example.io/login
Credenziali di default dopo installazione iniziale:
- Username: admin
- Password: admin
- Primo accesso: login con admin/admin

- Reimpostare la password admin per sicurezza

- Controllare dati account e informazioni installazione

- Pagina amministrazione e caricamento lingua predefinita

Se tutto funziona, la pagina di amministrazione mostrerà le informazioni sull’installazione.


Risoluzione dei problemi comuni
- Errore Passenger o modulo non caricato: ricontrollare i percorsi indicati dall’installer passenger e che il file mod_passenger.so esista.
- Errori bundle install: assicurarsi che postgresql-devel e le dipendenze C siano installate; verificare la versione di Ruby.
- Permessi 403 su /login: verificare ownership e permessi della directory public e che AllowOverride all sia impostato.
- Timeout o 502: controllare i log Apache e i log di produzione di Redmine (log/production.log) per stacktrace.
Comandi utili per il debug:
sudo tail -n 200 /var/log/httpd/error_log
sudo tail -n 200 /var/www/redmine/log/production.log
sudo systemctl status httpdSicurezza e hardening raccomandati
- Eseguire Redmine dietro HTTPS con certificati validi.
- Limitare l’accesso SSH e usare chiavi pubbliche.
- Proteggere il file database.yml: permessi 640 e proprietario root:apache o simile.
sudo chmod 640 /var/www/redmine/config/database.yml
sudo chown root:apache /var/www/redmine/config/database.yml- Abilitare SELinux in modalità enforcing e applicare i contesti corretti per httpd. Testare prima su ambiente non critico.
- Aggiornare regolarmente gem e Redmine, testando aggiornamenti in staging.
- Disabilitare account o funzioni non utilizzate e impostare politiche password robuste.
Nota GDPR: se Redmine elabora dati personali, documentare la base giuridica, il periodo di conservazione dei dati e i ruoli di accesso. Utilizzare crittografia a riposo e backup sicuri.
Backup e manutenzione
- Backup database PostgreSQL (esempio con pg_dump):
pg_dump -U redmine -h localhost -F c redminedb > /root/backups/redminedb-$(date +%F).dump- Backup file applicazione e allegati:
tar -czf /root/backups/redmine-files-$(date +%F).tar.gz /var/www/redmine/files- Verificare restore periodicamente su un ambiente separato.
Aggiornamenti e migrazioni
Processo di aggiornamento consigliato:
- Eseguire backup completo di database e filesystem.
- Testare l’upgrade in staging.
- Aggiornare le gem richieste e la versione Redmine seguendo la guida ufficiale.
- Eseguire le migrazioni RAILS_ENV=production bundle exec rake db:migrate.
- Eseguire sanity check e rollback se necessario.
Checklist rapida per il deploy (SOP minimale)
- Sistema aggiornato (dnf update)
- EPEL abilitato
- PostgreSQL installato e database creato
- RVM e Ruby 2.7 installati
- Dipendenze C e pacchetti dev installati
- Redmine estratto in /var/www/redmine
- config/database.yml configurato e test connessione
- bundle install completato senza errori
- Passenger installato e modulo Apache caricato
- Virtual host Apache configurato per HTTP/HTTPS
- Certificati SSL in ordine (se HTTPS)
- Ownership dei file impostata su apache
- Primo accesso e cambio password admin
- Backup pianificato automatico
Checklist ruoli (azione raccomandata per ruolo)
- Sysadmin:
- Preparare host, firewall e certificati
- Installare pacchetti di sistema
- Configurare Apache e Passenger
- DBA:
- Installare e configurare PostgreSQL
- Gestire backup e restore
- Monitorare performance delle query
- Applicazioni/Dev:
- Gestire gem e plugin
- Eseguire test su staging per aggiornamenti
- Installare plugin verificandone compatibilità
- Security Officer:
- Verificare configurazioni SSL/TLS
- Revisionare permessi e policy password
- Pianificare audit e logging
Esempi di casi in cui questa procedura può fallire
- Ambienti con policy SELinux non allineate: possono impedire l’accesso di Apache ai file Ruby.
- Versioni di Ruby non compatibili: usare 2.7 per Redmine 4.2.x.
- Plugin incompatibili dopo aggiornamento: testare sempre prima.
- Risorse di sistema insufficienti: Passenger può saturare memoria se non configurato correttamente.
Mini-metodologia per rollout sicuro
- Deploy su ambiente di test che replica produzione.
- Esecuzione test funzionali e carico leggero.
- Pianificare rollback e avere snapshot backup.
- Eseguire deploy fuori orario di punta.
- Monitorare log e metriche nelle prime 24 ore.
Matrice di priorità: Impatto × Sforzo (qualitativa)
- HTTPS e certificati: impatto alto, sforzo basso — PRIORITARIO
- Backup e restore testati: impatto alto, sforzo medio — OBBLIGATORIO
- SELinux controintuitivo: impatto medio, sforzo medio — TESTARE
- Plugin di terze parti: impatto variabile, sforzo medio — TESTARE
Come aggiungere plugin e SMTP (indicazioni rapide)
- Plugin: scaricare la cartella del plugin in /var/www/redmine/plugins e poi eseguire bundle install e rake db:migrate se richiesto.
- SMTP: aggiungere la configurazione SMTP in config/configuration.yml seguendo la sintassi ufficiale di Redmine.
Piccola galleria di edge-case e note locale
- Se il server è dietro un proxy o load balancer, aggiungere header X-Forwarded-Proto e configurare Protocols/SSL in Apache.
- Per installazioni in Italia: considerare normativa sulla retention dei dati personali e requisiti privacy locali.
Criteri di verifica (Критерии приёмки)
- La pagina login di Redmine è raggiungibile via HTTPS
- Login con admin e cambio password riuscito
- Creazione di un progetto di test e apertura/chiusura di un issue
- Backup del DB eseguito e ripristinato con successo in ambiente di test
Sommario
Hai installato Redmine 4.2.x su Rocky Linux usando PostgreSQL, Ruby 2.7 via RVM e Phusion Passenger con Apache. Sono stati mostrati i passaggi per installare dipendenze, creare database PostgreSQL, preparare Redmine, installare Passenger, configurare virtual host HTTP/HTTPS e controllare il funzionamento. Sono inoltre incluse raccomandazioni per sicurezza, backup, troubleshooting e checklist operative.
Conclusione: dopo il deploy iniziale, pianificare aggiornamenti regolari, backup, testare plugin e mantenere i certificati aggiornati.
Extras
- Documenti utili: consultare la documentazione ufficiale di Redmine e di Passenger per dettagli su compatibilità e opzioni avanzate.