Forutsetninger
Installer Apache
Installer PostgreSQL
Installer Ruby
Installer Passasjer
Installer Redmine
Konfigurer Apache
Sikre Apache med Let's Encrypt SSL
Redmine er et gratis og åpen kildekode, nettbasert prosjektstyringsverktøy. Den er skrevet i Ruby on Rails og støtter flere databaseservere for lagring av databasen. Det er en funksjonsrik applikasjon som støtter flere prosjekter, rollebasert ACL og problemsporingssystem. Den har også støtte for Gantt-diagram og kalender, filbehandling, per prosjekt wiki og forum, samt mange andre funksjoner. Den støtter versjonskontrollsystemer som Git, SVN eller CVS. Den er også flerspråklig, og støtter så mange som 49 språk.
Denne veiledningen ble skrevet for Redmine 3.4.4, men kan også gjelde for nyere versjoner.
Forutsetninger
- En Vultr CentOS 7-serverforekomst.
- En sudo-bruker .
- Et domenenavn pekte mot serveren.
For denne opplæringen vil vi bruke 192.168.1.1som den offentlige IP-adressen og redmine.example.comsom domenenavnet som pekte mot Vultr-forekomsten. Sørg for å erstatte alle forekomster av eksempeldomenenavnet og IP-adressen med den faktiske.
Oppdater basissystemet ditt ved å bruke veiledningen Hvordan oppdatere CentOS 7 . Når systemet ditt har blitt oppdatert, fortsett å installere avhengighetene.
Installer Apache
Redmine er skrevet i Ruby on Rails, så vi vil kreve at Phusion Passenger integreres med Apache-nettserveren for å betjene applikasjonen. Installer Apache.
sudo yum -y install httpd httpd-devel libcurl-devel
For å bygge Redmine-applikasjonen trenger vi også noen utviklingsverktøy. Installer de nødvendige verktøyene.
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
Installer PostgreSQL
Redmine støtter flere typer databaseservere som MySQL, PostgreSQL og MSSQL. I denne opplæringen vil vi bruke PostgreSQL til å være vert for Redmine-databaseserveren.
PostgreSQL er et objektrelasjonelt databasesystem. Standarddepotet yuminneholder en gammel versjon av PostgreSQL, så legg til PostgreSQL-depotet i systemet.
sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm
Installer PostgreSQL-databaseserveren.
sudo yum -y install postgresql10-server postgresql10-contrib postgresql10
Initialiser databasen.
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Start PostgreSQL-serveren og la den starte automatisk ved oppstart.
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10
Endre passordet for standard PostgreSQL-bruker.
sudo passwd postgres
Logg på som PostgreSQL-bruker.
sudo su - postgres
Opprett en ny PostgreSQL-bruker for Redmine.
createuser redmine
Du har lov til å bruke hvilket som helst brukernavn i stedet for redmine. PostgreSQL gir psqlskallet for å kjøre spørringer på databasen. Bytt til PostgreSQL-skallet.
psql
Angi et passord for den nyopprettede brukeren for Redmine-databasen.
ALTER USER redmine WITH ENCRYPTED password 'DBPassword';
Erstatt DBPasswordmed et sikkert passord. Opprett en ny database for Redmine-installasjonen.
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Gå ut av psqlskallet.
\q
Bytt til sudobrukeren.
exit
Rediger pg_hba.conffilen for å aktivere MD5-basert autentisering.
sudo nano /var/lib/pgsql/10/data/pg_hba.conf
Finne følgende linjer og endre verdiene peerog identi METHODkolonnen til trustog md5hhv.
# 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
Når den er oppdatert, skal konfigurasjonen se slik ut.
# 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
Start PostgreSQL på nytt slik at endringene kan tre i kraft.
sudo systemctl restart postgresql-10
Installer noen flere nødvendige PostgreSQL-avhengigheter.
sudo yum -y install libpqxx-devel protobuf-devel
Installer Ruby
Det anbefales å bruke en uprivilegert bruker til å kjøre programmet for å holde det isolert fra resten av systemet. Opprett en ny bruker for Redmine og bytt til den nyopprettede brukeren.
sudo adduser redmine
sudo su - redmine
Vi vil installere den nyeste versjonen av Ruby ved å bruke Ruby Version Manager, eller RVM. Den brukes til å installere og administrere flere versjoner av Ruby.
Legg til GPG-nøkkelen til RVM til serveren din.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Installer RVM.
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
Hent listen over tilgjengelige versjoner av Ruby.
rvm list known
Du vil se en lang liste over Ruby-versjoner.
[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
...
Installer den nyeste versjonen av Ruby fra listen.
rvm install 2.4
Bruk den installerte versjonen av Ruby.
rvm use 2.4
Du kan bekrefte versjonen.
ruby -v
Du vil se en lignende utgang.
[redmine@vultr ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Installer bundler, som er avhengighetsbehandleren for Ruby-applikasjonen.
gem install bundler
Ruby er nå installert. Før vi installerer Redmine, må vi installere Phusion Passenger.
Installer Passasjer
Kjør følgende kommando for å installere Passenger.
gem install passenger
Gi utførelsestillatelse til brukerens hjemmekatalog redmine. Passasjer må kjøre binærfilene for å betjene applikasjonen.
chmod o+x "/home/redmine"
Installer Apache-modulen for 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.
Installation of the Redmine application is now finished. Change ownership and permissions of the directories and files.
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
We have configured everything we need from the non-privileged user. Switch back to the sudo user by running su - <username>.
Add the Passenger module for Apache into the Apache configuration file. This will automatically load the Passenger module.
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
Create a new virtual host file for your Redmine application.
sudo nano /etc/httpd/conf.d/redmine.conf
Populate the file with the following content.
<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>
Make sure to replace redmine.example.com with your actual domain name. Also, make sure that the path to the PassengerRoot and PassengerRuby are correct. The path to the binaries may change when there is a new release of Ruby or Passenger. To find these paths, run the following command.
sudo su redmine -c "passenger-config about ruby-command"
You will get following 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
Når den virtuelle vertsfilen er opprettet, start Apache-webserveren på nytt.
sudo systemctl restart httpd
Endre brannmurkonfigurasjonen for å tillate port 80gjennom brannmuren.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
Du kan nå få tilgang til Redmine-grensesnittet på http://redmine.example.com. Logg inn med brukernavn adminog passord admin. Ved din første pålogging vil Redmine be deg om å oppdatere passordet.
Sikre Apache med Let's Encrypt SSL
Siden vår Redmine-installasjon er på en offentlig server, anbefales det å bruke SSL for å sikre utvekslingen av dataene fra serveren.
Installer Certbot, som er klientapplikasjonen for Let's Encrypt CA.
sudo yum -y install epel-release
sudo yum -y install certbot mod_ssl
Før du kan be om sertifikatene, må du tillate port 80og/ 443eller standard HTTPog HTTPStjenester gjennom brannmuren. Siden vi allerede har tillatt port 80tidligere, la oss tillate port 443.
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Merk: For å få sertifikater fra Let's Encrypt CA, må domenet som sertifikatene skal genereres for peke mot serveren. Hvis ikke, gjør de nødvendige endringene i DNS-postene til domenet og vent til DNS-en forplanter seg før du foretar sertifikatforespørselen igjen. Certbot sjekker domeneautoriteten før sertifikatene leveres.
Generer SSL-sertifikatene.
sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com
De genererte sertifikatene blir sannsynligvis lagret i /etc/letsencrypt/live/redmine.example.com/. SSL-sertifikatet vil bli lagret som cert.pemog privat nøkkel vil bli lagret som privkey.pem.
La oss kryptere sertifikater utløper om 90 dager, derfor anbefales det å sette opp automatisk fornyelse av sertifikatene ved å bruke Cron-jobber.
Åpne Cron-jobbfilen for rootbrukeren.
sudo crontab -e
Legg til følgende linje på slutten av filen.
30 5 * * * /usr/bin/certbot renew --quiet
Cron-jobben ovenfor vil kjøre hver dag klokken 05.30. Hvis sertifikatet skal utløpe, vil det automatisk bli fornyet.
Rediger den virtuelle vertsfilen vi opprettet tidligere for Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Endre den virtuelle vertsfilen slik at den ser slik ut.
<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>
Lagre filen og gå ut av redigeringsprogrammet.
Start Apache på nytt slik at endringene kan tre i kraft.
sudo systemctl restart httpd
Du kan nå få tilgang til Redmine over HTTPSpå https://redmine.example.com.
Gratulerer, du har installert Redmine på din CentOS 7-forekomst. Begynn å utvikle prosjektet ditt enten ved å opprette eller importere prosjektet.