Requisits previs
Instal·leu Apache
Instal·leu PostgreSQL
Instal·leu Ruby
Instal·leu Passenger
Instal·leu Redmine
Configura Apache
Assegurant Apache amb Let's Encrypt SSL
Redmine és una eina de gestió de projectes gratuïta i de codi obert basada en web. Està escrit en Ruby on Rails i admet diversos servidors de bases de dades per emmagatzemar la base de dades. És una aplicació rica en funcions que admet múltiples projectes, ACL basat en rols i sistema de seguiment de problemes. També té suport de diagrama de Gantt i calendari, gestió de fitxers, wiki per projecte i fòrum, així com moltes altres funcions. Admet sistemes de control de versions com Git, SVN o CVS. També és multilingüe i admet fins a 49 idiomes.
Aquesta guia s'ha escrit per a Redmine 3.4.4, però també es pot aplicar a les versions més noves.
Requisits previs
- Una instància del servidor Vultr CentOS 7.
- Un usuari de sudo .
- Un nom de domini apuntat cap al servidor.
Per a aquest tutorial, utilitzarem 192.168.1.1com a adreça IP pública i redmine.example.comcom a nom de domini apuntat cap a la instància Vultr. Assegureu-vos de substituir totes les ocurrències del nom de domini d'exemple i l'adreça IP per l'actual.
Actualitzeu el vostre sistema base mitjançant la guia Com actualitzar CentOS 7 . Un cop actualitzat el sistema, procediu a instal·lar les dependències.
Instal·leu Apache
Redmine està escrit en Ruby on Rails, per tant requerirem que Phusion Passenger s'integri amb el servidor web Apache per servir l'aplicació. Instal·leu Apache.
sudo yum -y install httpd httpd-devel libcurl-devel
Per crear l'aplicació Redmine, també necessitarem algunes eines de desenvolupament. Instal·leu les eines necessàries.
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
Instal·leu PostgreSQL
Redmine admet diversos tipus de servidors de bases de dades com MySQL, PostgreSQL i MSSQL. En aquest tutorial, utilitzarem PostgreSQL per allotjar el servidor de bases de dades Redmine.
PostgreSQL és un sistema de bases de dades relacional objecte. El yumdipòsit predeterminat conté una versió antiga de PostgreSQL, així que afegiu el dipòsit de 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
Instal·leu el servidor de bases de dades PostgreSQL.
sudo yum -y install postgresql10-server postgresql10-contrib postgresql10
Inicialitzar la base de dades.
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Inicieu el servidor PostgreSQL i activeu-lo perquè s'iniciï automàticament en el moment de l'arrencada.
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10
Canvieu la contrasenya de l'usuari PostgreSQL predeterminat.
sudo passwd postgres
Inicieu sessió com a usuari de PostgreSQL.
sudo su - postgres
Creeu un nou usuari de PostgreSQL per a Redmine.
createuser redmine
Podeu utilitzar qualsevol nom d'usuari en lloc de redmine. PostgreSQL proporciona l' psqlintèrpret d'ordres per executar consultes a la base de dades. Canvia a l'intèrpret d'ordres PostgreSQL.
psql
Establiu una contrasenya per a l'usuari acabat de crear per a la base de dades de Redmine.
ALTER USER redmine WITH ENCRYPTED password 'DBPassword';
Substituïu-la DBPasswordper una contrasenya segura. Creeu una nova base de dades per a la instal·lació de Redmine.
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Sortida de la psqlclosca.
\q
Canvia a l' sudousuari.
exit
Editeu el pg_hba.conffitxer per habilitar l'autenticació basada en MD5.
sudo nano /var/lib/pgsql/10/data/pg_hba.conf
Cerqueu les línies següents i canvieu els valors peeri identa la METHODcolumna a trusti md5, respectivament.
# 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
Un cop actualitzada, la configuració hauria de ser així.
# 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
Reinicieu PostgreSQL perquè els canvis tinguin efecte.
sudo systemctl restart postgresql-10
Instal·leu algunes dependències més necessàries de PostgreSQL.
sudo yum -y install libpqxx-devel protobuf-devel
Instal·leu Ruby
Es recomana utilitzar un usuari sense privilegis per executar l'aplicació per mantenir-la aïllada de la resta del sistema. Creeu un usuari nou per a Redmine i canvieu a l'usuari acabat de crear.
sudo adduser redmine
sudo su - redmine
Instal·larem la darrera versió de Ruby mitjançant Ruby Version Manager o RVM. S'utilitza per instal·lar i gestionar diverses versions de Ruby.
Afegiu la clau GPG de RVM al vostre servidor.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Instal·leu RVM.
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
Obteniu la llista de les versions disponibles de Ruby.
rvm list known
Veureu una llarga llista de versions de 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
...
Instal·leu la darrera versió de Ruby de la llista.
rvm install 2.4
Utilitzeu la versió instal·lada de Ruby.
rvm use 2.4
Podeu comprovar la seva versió.
ruby -v
Veureu una sortida similar.
[redmine@vultr ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Instal·leu bundler, que és el gestor de dependències de l'aplicació Ruby.
gem install bundler
Ruby ja està instal·lat. Abans d'instal·lar Redmine, haurem d'instal·lar Phusion Passenger.
Instal·leu Passenger
Executeu l'ordre següent per instal·lar Passenger.
gem install passenger
Proporcioneu permís d'execució al directori inicial de l' redmineusuari. El passatger ha d'executar els binaris per poder servir l'aplicació.
chmod o+x "/home/redmine"
Instal·leu el mòdul Apache per a Passenger.
passenger-install-apache2-module
The installer script will ask you some questions. First, it will provide you information about the installation process. Then it will ask you to select the language which you will be using. Since our application is written in Ruby on Rails, select Ruby from the menu and press "Enter" to proceed further.
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, press '!'
‣ ⬢ Ruby
⬡ Python
⬡ Node.js
⬡ Meteor
The installer will now check for requirements. The installer will not encounter any missing dependencies and will automatically proceed to compile and install the module.
Once the module is installed, it will prompt you to add the module into the Apache configuration file.
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.
We will skip this for now and will complete it later in the tutorial as the user with which we are logged in now does not have sudo permissions. Press "Enter" to skip this step.
Finally, the installer script will validate the installation and you will see a warning saying the Passenger module is not specified in Apache configuration.
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.
Now that we have installed the Passenger module for Apache, proceed to download and install Redmine.
Install Redmine
Download the latest version of Redmine from the official Redmine download page.
cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz
Extract the archive and rename the directory for sake of convenience.
tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/
Copy the example configuration files to its production location.
cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml
Open the database configuration file we just copied to enter the database details.
nano config/database.yml
By default, the database file is configured for MySQL. Find the configurations for production and development, and test which uses the MySQL adapter. Comment out all of these lines.
#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, find the lines which are commented, having production configuration for the postgresql adapter. Uncomment those lines and update the database name and user credentials. Make sure to use the correct indentation, which is two spaces.
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "DBPassword"
Configure the application to use the PostgreSQL configuration.
bundle config build.pg --with-pg-config=/usr/pgsql-10/bin/pg_config
Install the application dependencies required by the application.
bundle install --without development test
You will see the following message at the end of the installation.
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.
The following command generates secret tokens that are used to encode the session data.
bundle exec rake generate_secret_token
Write the PostgreSQL database.
RAILS_ENV=production bundle exec rake db:migrate
Run the following command, which writes the default data into PostgreSQL database.
RAILS_ENV=production bundle exec rake redmine:load_default_data
The above command will ask you to choose the default language to be used with the application. The default choice is English; choose according to your preference.
[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.
La instal·lació de l'aplicació Redmine s'ha acabat. Canvia la propietat i els permisos dels directoris i fitxers.
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
Hem configurat tot el que necessitem des de l'usuari no privilegiat. Torna a l' sudousuari executant su - <username>.
Afegiu el mòdul Passenger per a Apache al fitxer de configuració d'Apache. Això carregarà automàticament el mòdul de passatgers.
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
Creeu un fitxer d'amfitrió virtual nou per a la vostra aplicació Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Omple el fitxer amb el contingut següent.
<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>
Assegureu-vos de substituir-lo redmine.example.compel vostre nom de domini real. A més, assegureu-vos que el camí cap a PassengerRooti PassengerRubysigui correcte. El camí cap als binaris pot canviar quan hi hagi una nova versió de Ruby o Passenger. Per trobar aquests camins, executeu l'ordre següent.
sudo su redmine -c "passenger-config about ruby-command"
Obtindreu la següent sortida.
[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
Un cop creat el fitxer d'amfitrió virtual, reinicieu el servidor web Apache.
sudo systemctl restart httpd
Modifiqueu la configuració del tallafoc per permetre el port a 80través del tallafoc.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
Ara podeu accedir a la vostra interfície de Redmine a http://redmine.example.com. Inicieu sessió amb nom d'usuari admini contrasenya admin. En el primer inici de sessió, Redmine us demanarà que actualitzeu la contrasenya.
Assegurant Apache amb Let's Encrypt SSL
Com que la nostra instal·lació de Redmine es troba en un servidor públic, es recomana utilitzar SSL per assegurar l'intercanvi de dades del servidor.
Instal·leu Certbot, que és l'aplicació client de Let's Encrypt CA.
sudo yum -y install epel-release
sudo yum -y install certbot mod_ssl
Abans de poder sol·licitar els certificats, haureu de permetre el port 80i/ 443o estàndard HTTPi HTTPSserveis a través del tallafoc. Com que ja hem permès port 80abans, permetem port 443.
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Nota: Per obtenir certificats de Let's Encrypt CA, el domini per al qual s'han de generar els certificats s'ha d'apuntar al servidor. Si no, feu els canvis necessaris als registres DNS del domini i espereu que el DNS es propagui abans de tornar a fer la sol·licitud de certificat. Certbot verifica l'autoritat del domini abans de proporcionar els certificats.
Generar els certificats SSL.
sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com
És probable que els certificats generats s'emmagatzemin a /etc/letsencrypt/live/redmine.example.com/. El certificat SSL s'emmagatzemarà com a cert.pemi la clau privada com a privkey.pem.
Els certificats de Let's Encrypt caduquen en 90 dies, per tant, es recomana configurar la renovació automàtica dels certificats mitjançant treballs de Cron.
Obriu el fitxer de treball Cron per a l' rootusuari.
sudo crontab -e
Afegiu la línia següent al final del fitxer.
30 5 * * * /usr/bin/certbot renew --quiet
El treball de Cron anterior s'executarà cada dia a les 5:30 del matí. Si el certificat ha de caducar, es renovarà automàticament.
Editeu el fitxer d'amfitrió virtual que vam crear anteriorment per a Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Modifiqueu el fitxer de l'amfitrió virtual perquè sembli el següent.
<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>
Deseu el fitxer i sortiu de l'editor.
Reinicieu Apache perquè els canvis tinguin efecte.
sudo systemctl restart httpd
Ara podeu accedir a Redmine des HTTPSde https://redmine.example.com.
Enhorabona, heu instal·lat Redmine correctament a la vostra instància CentOS 7. Comenceu a desenvolupar el vostre projecte creant o important el vostre projecte.