Cum se instalează Redmine pe CentOS 7

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>.

Configurați Apache

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 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>

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.

Lasă un comentariu

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe