Redmine este un instrument gratuit și deschis de gestionare a proiectelor bazat pe web. Este scris în Ruby on Rails și acceptă mai multe servere de baze de date pentru stocarea bazei de date. Este o aplicație bogată în caracteristici care susține mai multe proiecte, ACL bazat pe rol și sistem de urmărire a problemelor. Are, de asemenea, suport Gantt și calendar, gestionarea fișierelor, pe proiectul wiki și forum, precum și multe alte funcții. Suporta sisteme de control a versiunilor precum Git, SVN sau CVS. De asemenea, este multilingvă, sprijinind până la 49 de limbi.
Acest ghid a fost redactat pentru Redmine 3.4.4, dar se poate aplica și versiunilor mai noi.
Cerințe preliminare
- O instanță a serverului Vultr CentOS 7.
- Un utilizator sudo .
- Un nume de domeniu îndreptat către server.
Pentru acest tutorial, vom folosi 192.168.1.1ca adresă IP publică și redmine.example.comca nume de domeniu indicat spre instanța Vultr. Vă rugăm să vă asigurați că înlocuiți toate aparițiile numelui de domeniu și adresa IP de exemplu cu una reală.
Actualizați-vă sistemul de bază utilizând ghidul Cum actualizați CentOS 7 . După ce sistemul dvs. a fost actualizat, continuați să instalați dependențele.
Instalați Apache
Redmine este scris în Ruby on Rails, astfel că vom solicita Phusion Passenger să se integreze cu serverul web Apache pentru a servi aplicația. Instalați Apache.
sudo yum -y install httpd httpd-devel libcurl-devel
Pentru a construi aplicația Redmine, vom avea nevoie și de câteva instrumente de dezvoltare. Instalați instrumentele necesare.
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
Instalați PostgreSQL
Redmine acceptă mai multe tipuri de servere de baze de date, cum ar fi MySQL, PostgreSQL și MSSQL. În acest tutorial, vom folosi PostgreSQL pentru a găzdui serverul de baze de date Redmine.
PostgreSQL este un sistem de baze de date relațional cu obiecte. Depozitul implicit yumconține o versiune veche a PostgreSQL, așadar adăugați depozitul PostgreSQL la sistem.
sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm
Instalați serverul de baze de date PostgreSQL.
sudo yum -y install postgresql10-server postgresql10-contrib postgresql10
Inițializează baza de date.
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Porniți serverul PostgreSQL și permiteți-l să pornească automat la momentul de pornire.
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10
Modificați parola pentru utilizatorul implicit PostgreSQL.
sudo passwd postgres
Conectați-vă ca utilizator PostgreSQL.
sudo su - postgres
Creați un nou utilizator PostgreSQL pentru Redmine.
createuser redmine
Aveți dreptul să utilizați orice nume de utilizator în loc de redmine. PostgreSQL oferă psqlshell - ul pentru a rula interogări pe baza de date. Comutați la shell-ul PostgreSQL.
psql
Setați o parolă pentru utilizatorul nou creat pentru baza de date Redmine.
ALTER USER redmine WITH ENCRYPTED password 'DBPassword';
Înlocuiți DBPasswordcu o parolă sigură. Creați o nouă bază de date pentru instalarea Redmine.
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Ieșiți din psqlcoajă.
\q
Comutați la sudoutilizator.
exit
Editați pg_hba.conffișierul pentru a activa autentificarea bazată pe MD5.
sudo nano /var/lib/pgsql/10/data/pg_hba.conf
Găsiți următoarele linii și modificați valorile peerși identîn METHODcoloană la trustși md5, respectiv.
# 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
Odată actualizată, configurația ar trebui să arate astfel.
# 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
Reporniți PostgreSQL pentru ca modificările să aibă efect.
sudo systemctl restart postgresql-10
Instalați alte câteva dependențe PostgreSQL necesare.
sudo yum -y install libpqxx-devel protobuf-devel
Instalați Ruby
Este recomandat să utilizați un utilizator nepriviat pentru a rula aplicația pentru a o ține izolată de restul sistemului. Creați un utilizator nou pentru Redmine și treceți la un utilizator nou creat.
sudo adduser redmine
sudo su - redmine
Vom instala cea mai recentă versiune de Ruby folosind Ruby Version Manager sau RVM. Este folosit pentru instalarea și gestionarea mai multor versiuni de Ruby.
Adăugați cheia GPG a RVM pe serverul dvs.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Instalați RVM.
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
Obțineți lista cu versiunile disponibile pentru Ruby.
rvm list known
Veți vedea o listă lungă de versiuni 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
...
Instalați cea mai recentă versiune de Ruby din listă.
rvm install 2.4
Folosiți versiunea instalată de Ruby.
rvm use 2.4
Puteți verifica versiunea sa.
ruby -v
Veți vedea o ieșire similară.
[redmine@vultr ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Instalați pachetul, care este managerul de dependență pentru aplicația Ruby.
gem install bundler
Ruby este acum instalat. Înainte de a instala Redmine, va trebui să instalăm Phusion Passenger.
Instalați pasagerul
Rulați următoarea comandă pentru a instala Pasagerul.
gem install passenger
Oferiți permisiunea de execuție în directorul principal al redmineutilizatorului. Pasagerul trebuie să execute binare pentru a servi aplicația.
chmod o+x "/home/redmine"
Instalați modulul Apache pentru pasager.
passenger-install-apache2-module
Scriptul instalatorului vă va pune câteva întrebări. În primul rând, vă va oferi informații despre procesul de instalare. Apoi, vă va cere să selectați limba pe care o veți utiliza. Deoarece aplicația noastră este scrisă în Ruby on Rails, selectați Ruby din meniu și apăsați " Enter" pentru a continua.
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, press '!'
‣ ⬢ Ruby
⬡ Python
⬡ Node.js
⬡ Meteor
Instalatorul va verifica acum cerințele. Instalatorul nu va întâmpina nicio dependență care lipsește și va continua automat la compilarea și instalarea modulului.
După instalarea modulului, vă va solicita să adăugați modulul în fișierul de configurare 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.
Vom sări acest lucru deocamdată și îl vom completa mai târziu în tutorial, deoarece utilizatorul cu care suntem conectați nu are sudopermisiuni. Apăsați " Enter" pentru a sări acest pas.
În cele din urmă, script-ul de instalare va valida instalarea și veți vedea un avertisment care spune că modulul Pasager nu este specificat în configurația 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.
Acum că am instalat modulul Pasager pentru Apache, continuați să descărcați și să instalați Redmine.
Instalează Redmine
Descărcați cea mai recentă versiune de Redmine de pe pagina oficială de descărcare Redmine .
cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz
Extrageți arhiva și redenumiți directorul din motive de comoditate.
tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/
Copiați fișierele de configurare de exemplu în locația de producție.
cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml
Deschideți fișierul de configurare a bazei de date pe care tocmai l-am copiat pentru a introduce detaliile bazei de date.
nano config/database.yml
În mod implicit, fișierul bazei de date este configurat pentru MySQL. Găsiți configurațiile pentru producție și dezvoltare și testați care utilizează adaptorul MySQL. Comentați toate aceste rânduri.
#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, găsiți liniile care sunt comentate, având productionconfigurația pentru postgresqladaptor. Deconectați liniile respective și actualizați numele bazei de date și datele de acreditare ale utilizatorului. Asigurați-vă că folosiți indentarea corectă, care este în două spații.
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "DBPassword"
Configurați aplicația pentru a utiliza configurația PostgreSQL.
bundle config build.pg --with-pg-config=/usr/pgsql-10/bin/pg_config
Instalați dependențele de aplicație solicitate de aplicație.
bundle install --without development test
La sfârșitul instalării veți vedea următorul mesaj.
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.
Următoarea comandă generează jetoane secrete care sunt utilizate pentru codificarea datelor sesiunii.
bundle exec rake generate_secret_token
Scrieți baza de date PostgreSQL.
RAILS_ENV=production bundle exec rake db:migrate
Rulați următoarea comandă, care scrie datele implicite în baza de date PostgreSQL.
RAILS_ENV=production bundle exec rake redmine:load_default_data
Comanda de mai sus vă va solicita să alegeți limba implicită care va fi utilizată cu aplicația. Alegerea implicită este engleza; alegeți în funcție de preferințe.
[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.
Instalarea aplicației Redmine este acum terminată. Modificați proprietatea și permisiunile directoarelor și fișierelor.
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
Am configurat tot ce avem nevoie de la utilizatorul ne privilegiat. Comutați înapoi la sudoutilizator rulând su - <username>.
Adăugați modulul Pasager pentru Apache în fișierul de configurare Apache. Aceasta va încărca automat modulul Pasager.
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ți un nou fișier gazdă virtual pentru aplicația dvs. Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Populați fișierul cu următorul conținut.
<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>
Asigurați-vă că înlocuiți redmine.example.comcu numele dvs. de domeniu real. De asemenea, asigurați-vă că calea către PassengerRootși PassengerRubysunt corecte. Calea către binare se poate schimba atunci când există o nouă versiune de Ruby sau Pasager. Pentru a găsi aceste căi, executați următoarea comandă.
sudo su redmine -c "passenger-config about ruby-command"
Veți obține următoarele rezultate.
[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
După crearea fișierului gazdă virtuală, reporniți serverul web Apache.
sudo systemctl restart httpd
Modificați configurația firewallului pentru a permite portul 80prin firewall.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
Acum puteți accesa interfața Redmine pe http://redmine.example.com. Autentificare cu nume de utilizator adminși parolă admin. La prima conectare, Redmine vă va solicita să actualizați parola.
Securizarea Apache cu Let's Encrypt SSL
Întrucât instalarea noastră Redmine este pe un server cu vedere publică, se recomandă utilizarea SSL pentru a asigura schimbul de date de pe server.
Instalați Certbot, care este aplicația client pentru Let's Encrypt CA.
sudo yum -y install epel-release
sudo yum -y install certbot mod_ssl
Înainte de a putea solicita certificatele, va trebui să permită portul 80și 443standard sau HTTPși HTTPSservicii prin intermediul firewall. Deoarece am permis deja portul 80mai devreme, să permitem portul 443.
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Notă: Pentru a obține certificate de la Let's Encrypt CA, domeniul pentru care se vor genera certificatele trebuie îndreptat către server. Dacă nu, faceți modificările necesare în înregistrările DNS ale domeniului și așteptați propagarea DNS înainte de a face din nou cererea de certificare. Certbot verifică autoritatea domeniului înainte de furnizarea certificatelor.
Generați certificatele SSL.
sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com
Este posibil ca certificatele generate să fie stocate în /etc/letsencrypt/live/redmine.example.com/. Certificatul SSL va fi stocate ca cert.pemși cheia privată vor fi stocate ca privkey.pem.
Să criptăm certificatele să expire în 90 de zile, de aceea este recomandat să configurați reînnoirea automată a certificatelor folosind joburi Cron.
Deschideți fișierul de lucru Cron pentru rootutilizator.
sudo crontab -e
Adăugați următoarea linie la sfârșitul fișierului.
30 5 * * * /usr/bin/certbot renew --quiet
Locul de muncă Cron de mai sus se va desfășura în fiecare zi la 5:30 AM. În cazul în care certificatul expiră, acesta va fi reînnoit automat.
Editați fișierul gazdă virtual pe care l-am creat anterior pentru Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Modificați fișierul gazdă virtuală pentru a arăta după cum urmează.
<VirtualHost *:80>
Redirect permanent / https://www.example.com/
ServerName redmine.example.com
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
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>
Salvați fișierul și ieșiți din editor.
Reporniți Apache pentru ca modificările să aibă efect.
sudo systemctl restart httpd
Acum puteți acces Redmine peste HTTPSpe https://redmine.example.com.
Felicitări, ați instalat cu succes Redmine pe instanța dvs. CentOS 7. Începeți să dezvoltați proiectul dvs. fie prin crearea sau importarea proiectului.