Redmine è uno strumento di gestione dei progetti basato sul Web gratuito e open source. È scritto in Ruby on Rails e supporta più server di database per l'archiviazione del database. È un'applicazione ricca di funzionalità che supporta più progetti, ACL basato sui ruoli e sistema di tracciamento dei problemi. Dispone inoltre di supporto per grafici e calendari Gantt, gestione dei file, wiki di progetto e forum, oltre a molte altre funzionalità. Supporta sistemi di controllo versione come Git, SVN o CVS. È anche multilingue e supporta fino a 49 lingue.
Questa guida è stata scritta per Redmine 3.4.4, ma può applicarsi anche alle versioni più recenti.
Prerequisiti
- Un'istanza del server Vultr CentOS 7.
- Un utente sudo .
- Un nome di dominio puntato verso il server.
Per questo tutorial, utilizzeremo 192.168.1.1come indirizzo IP pubblico e redmine.example.comcome nome di dominio puntato verso l'istanza Vultr. Assicurati di sostituire tutte le occorrenze del nome di dominio e dell'indirizzo IP di esempio con quello effettivo.
Aggiorna il tuo sistema di base usando la guida Come aggiornare CentOS 7 . Dopo aver aggiornato il sistema, procedere con l'installazione delle dipendenze.
Installa Apache
Redmine è scritto in Ruby on Rails, pertanto sarà necessario che Phusion Passenger si integri con il server Web Apache per servire l'applicazione. Installa Apache.
sudo yum -y install httpd httpd-devel libcurl-devel
Per compilare l'applicazione Redmine, avremo bisogno anche di alcuni strumenti di sviluppo. Installa gli strumenti richiesti.
sudo yum -y install ImageMagick ImageMagick-devel git libxml2-devel libxslt-devel gcc bzip2 openssl-devel zlib-devel gdbm-devel ncurses-devel autoconf automake bison gcc-c++ libffi-devel libtool patch readline-devel sqlite-devel glibc-headers glibc-devel libyaml-devel libicu-devel libidn-devel
Installa PostgreSQL
Redmine supporta più tipi di server di database come MySQL, PostgreSQL e MSSQL. In questo tutorial, useremo PostgreSQL per ospitare il server di database Redmine.
PostgreSQL è un sistema di database relazionale ad oggetti. Il yumrepository predefinito contiene una vecchia versione di PostgreSQL, quindi aggiungi il repository PostgreSQL al sistema.
sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm
Installa il server di database PostgreSQL.
sudo yum -y install postgresql10-server postgresql10-contrib postgresql10
Inizializza il database.
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Avviare il server PostgreSQL e abilitarlo ad avviarsi automaticamente all'avvio.
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10
Cambia la password per l'utente PostgreSQL predefinito.
sudo passwd postgres
Accedi come utente PostgreSQL.
sudo su - postgres
Crea un nuovo utente PostgreSQL per Redmine.
createuser redmine
È consentito utilizzare qualsiasi nome utente anziché redmine. PostgreSQL fornisce la psqlshell per eseguire query sul database. Passa alla shell PostgreSQL.
psql
Impostare una password per l'utente appena creato per il database Redmine.
ALTER USER redmine WITH ENCRYPTED password 'DBPassword';
Sostituisci DBPasswordcon una password sicura. Creare un nuovo database per l'installazione di Redmine.
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Esci dalla psqlshell.
\q
Passa sudoall'utente.
exit
Modifica il pg_hba.conffile per abilitare l'autenticazione basata su MD5.
sudo nano /var/lib/pgsql/10/data/pg_hba.conf
Individuare le seguenti righe e modificare i valori peere identnella METHODcolonna truste md5, rispettivamente.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Una volta aggiornata, la configurazione dovrebbe apparire così.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Riavvia PostgreSQL per rendere effettive le modifiche.
sudo systemctl restart postgresql-10
Installa alcune dipendenze PostgreSQL necessarie.
sudo yum -y install libpqxx-devel protobuf-devel
Installa Ruby
Si consiglia di utilizzare un utente senza privilegi per eseguire l'applicazione per tenerla isolata dal resto del sistema. Crea un nuovo utente per Redmine e passa all'utente appena creato.
sudo adduser redmine
sudo su - redmine
Installeremo l'ultima versione di Ruby utilizzando Ruby Version Manager o RVM. Viene utilizzato per installare e gestire più versioni di Ruby.
Aggiungi la chiave GPG di RVM al tuo server.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Installa RVM.
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
Recupera l'elenco delle versioni disponibili di Ruby.
rvm list known
Vedrai un lungo elenco di versioni di Ruby.
[redmine@vultr ~]$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]
ruby-head
...
Installa l'ultima versione di Ruby dall'elenco.
rvm install 2.4
Utilizzare la versione installata di Ruby.
rvm use 2.4
Puoi verificarne la versione.
ruby -v
Vedrai un risultato simile.
[redmine@vultr ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Installa bundler, che è il gestore delle dipendenze per l'applicazione Ruby.
gem install bundler
Ruby è ora installato. Prima di installare Redmine, dovremo installare Phusion Passenger.
Installa passeggero
Eseguire il comando seguente per installare Passenger.
gem install passenger
Fornire l'autorizzazione all'esecuzione alla home directory redminedell'utente. Il passeggero deve eseguire i file binari per servire l'applicazione.
chmod o+x "/home/redmine"
Installa il modulo Apache per Passenger.
passenger-install-apache2-module
Lo script di installazione ti farà alcune domande. Innanzitutto, ti fornirà informazioni sul processo di installazione. Quindi ti chiederà di selezionare la lingua che utilizzerai. Poiché la nostra applicazione è scritta in Ruby on Rails, seleziona Ruby dal menu e premi " Enter" per procedere ulteriormente.
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, press '!'
‣ ⬢ Ruby
⬡ Python
⬡ Node.js
⬡ Meteor
L'installer ora controllerà i requisiti. Il programma di installazione non incontrerà alcuna dipendenza mancante e procederà automaticamente alla compilazione e all'installazione del modulo.
Una volta installato il modulo, ti verrà chiesto di aggiungere il modulo nel file di configurazione di Apache.
Almost there!
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
PassengerDefaultRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/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.
Per ora lo salteremo e lo completeremo più avanti nell'esercitazione poiché l'utente con cui abbiamo effettuato l'accesso non dispone delle sudoautorizzazioni. Premi " Enter" per saltare questo passaggio.
Infine, lo script del programma di installazione convaliderà l'installazione e verrà visualizzato un avviso che informa che il modulo Passenger non è specificato nella configurazione di Apache.
Validating installation...
* Checking whether this Passenger install is in PATH... ✓
* Checking whether there are no other Passenger installations... ✓
* Checking whether Apache is installed... ✓
* Checking whether the Passenger module is correctly configured in Apache... (!)
You did not specify 'LoadModule passenger_module' in any of your Apache
configuration files. Please paste the configuration snippet that this
installer printed earlier, into one of your Apache configuration files, such
as /etc/httpd/conf/httpd.conf.
Detected 0 error(s), 1 warning(s).
Press ENTER to continue.
Ora che abbiamo installato il modulo Passenger per Apache, procedi con il download e l'installazione di Redmine.
Installa Redmine
Scarica l'ultima versione di Redmine dalla pagina di download ufficiale di Redmine .
cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz
Estrarre l'archivio e rinominare la directory per comodità.
tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/
Copia i file di configurazione di esempio nella posizione di produzione.
cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml
Apri il file di configurazione del database che abbiamo appena copiato per inserire i dettagli del database.
nano config/database.yml
Per impostazione predefinita, il file del database è configurato per MySQL. Trova le configurazioni per la produzione e lo sviluppo e verifica che utilizza l'adattatore MySQL. Commenta tutte queste righe.
#production:
# adapter: mysql2
# database: redmine
# host: localhost
# username: root
# password: ""
# encoding: utf8
#development:
# adapter: mysql2
# database: redmine_development
# host: localhost
# username: root
# password: ""
# encoding: utf8
#test:
# adapter: mysql2
# database: redmine_test
# host: localhost
# username: root
# password: ""
# encoding: utf8
Furthur, trova le righe che sono commentate, con productionconfigurazione per l' postgresqladattatore. Rimuovi il commento da tali righe e aggiorna il nome del database e le credenziali dell'utente. Assicurati di utilizzare il rientro corretto, ovvero due spazi.
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "DBPassword"
Configurare l'applicazione per utilizzare la configurazione PostgreSQL.
bundle config build.pg --with-pg-config=/usr/pgsql-10/bin/pg_config
Installa le dipendenze dell'applicazione richieste dall'applicazione.
bundle install --without development test
Vedrai il seguente messaggio alla fine dell'installazione.
Installing roadie-rails 1.1.1
Bundle complete! 31 Gemfile dependencies, 55 gems now installed.
Gems in the groups development and test were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Il comando seguente genera token segreti che vengono utilizzati per codificare i dati della sessione.
bundle exec rake generate_secret_token
Scrivi il database PostgreSQL.
RAILS_ENV=production bundle exec rake db:migrate
Eseguire il comando seguente, che scrive i dati predefiniti nel database PostgreSQL.
RAILS_ENV=production bundle exec rake redmine:load_default_data
Il comando sopra ti chiederà di scegliere la lingua predefinita da usare con l'applicazione. La scelta predefinita è inglese; scegli in base alle tue preferenze.
[redmine@vultr redmine]$ RAILS_ENV=production bundle exec rake redmine:load_default_data
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en]
====================================
Default configuration data loaded.
L'installazione dell'applicazione Redmine è ora terminata. Modifica la proprietà e le autorizzazioni delle directory e dei file.
mkdir -p tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
Abbiamo configurato tutto ciò di cui abbiamo bisogno dall'utente non privilegiato. Torna sudoall'utente eseguendo su - <username>.
Aggiungi il modulo Passenger per Apache nel file di configurazione di Apache. Questo caricherà automaticamente il modulo Passeggero.
echo "LoadModule passenger_module /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf
Crea un nuovo file host virtuale per la tua applicazione Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Popolare il file con il seguente contenuto.
<VirtualHost *:80>
ServerName redmine.example.com
DocumentRoot /home/redmine/redmine/public
PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
PassengerUser redmine
<Directory /home/redmine/redmine/public>
Allow from all
Options -MultiViews
Require all granted
</Directory>
</VirtualHost>
Assicurati di sostituire redmine.example.comcon il tuo vero nome di dominio. Inoltre, assicurarsi che il percorso verso PassengerRoote PassengerRubysia corretto. Il percorso dei file binari può cambiare quando è disponibile una nuova versione di Ruby o Passenger. Per trovare questi percorsi, eseguire il comando seguente.
sudo su redmine -c "passenger-config about ruby-command"
Otterrai il seguente output.
[user@vultr ~]$ sudo su redmine -c "passenger-config about ruby-command"
passenger-config was invoked through the following Ruby interpreter:
Command: /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
Version: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
To use in Apache: PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
To use in Nginx : passenger_ruby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
To use with Standalone: /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/bin/passenger start
Dopo aver creato il file host virtuale, riavviare il server Web Apache.
sudo systemctl restart httpd
Modifica la configurazione del firewall per consentire la porta 80attraverso il firewall.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
Ora puoi accedere alla tua interfaccia di Redmine su http://redmine.example.com. Accedi con nome utente admine password admin. Al tuo primo accesso, Redmine ti chiederà di aggiornare la password.
Protezione di Apache con Let's Encrypt SSL
Poiché la nostra installazione Redmine è su un server pubblico, si consiglia di utilizzare SSL per proteggere lo scambio di dati dal server.
Installa Certbot, che è l'applicazione client per Let's Encrypt CA.
sudo yum -y install epel-release
sudo yum -y install certbot mod_ssl
Prima di poter richiedere i certificati, è necessario consentire la porta 80e / 443o standard HTTPe HTTPSservizi attraverso il firewall. Dato che abbiamo già consentito la porta in 80precedenza, consentiamo la porta 443.
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Nota: per ottenere certificati da Let's Encrypt CA, il dominio per il quale devono essere generati i certificati deve essere puntato verso il server. In caso contrario, apportare le modifiche necessarie ai record DNS del dominio e attendere la propagazione del DNS prima di effettuare nuovamente la richiesta di certificato. Certbot controlla l'autorità di dominio prima di fornire i certificati.
Genera i certificati SSL.
sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com
È probabile che i certificati generati siano archiviati in /etc/letsencrypt/live/redmine.example.com/. Il certificato SSL verrà archiviato come cert.peme la chiave privata verrà archiviata come privkey.pem.
Let's Encrypt certificati scadranno tra 90 giorni, quindi si consiglia di impostare il rinnovo automatico dei certificati utilizzando i processi Cron.
Aprire il file di lavoro Cron per l' rootutente.
sudo crontab -e
Aggiungi la seguente riga alla fine del file.
30 5 * * * /usr/bin/certbot renew --quiet
Il precedente lavoro Cron verrà eseguito ogni giorno alle 5:30. Se il certificato è in scadenza, verrà automaticamente rinnovato.
Modifica il file host virtuale che abbiamo creato in precedenza per Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Modificare il file host virtuale in modo che appaia come segue.
<VirtualHost *:80>
Redirect permanent / https://www.example.com/
ServerName redmine.example.com
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName redmine.example.com
DocumentRoot "/home/redmine/redmine/public"
<Directory "/home/redmine/redmine/public">
Options None
Require all granted
</Directory>
PassengerAppEnv production
PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
PassengerUser redmine
PassengerHighPerformance on
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/redmine.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/redmine.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/redmine.example.com/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
<IfModule headers_module>
Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
</IfModule>
</VirtualHost>
Salvare il file ed uscire dall'editor.
Riavvia Apache per rendere effettive le modifiche.
sudo systemctl restart httpd
È ora possibile accedere Redmine sopra HTTPSsu https://redmine.example.com.
Congratulazioni, hai installato Redmine con successo sull'istanza di CentOS 7. Inizia a sviluppare il tuo progetto creando o importando il tuo progetto.