Как да инсталирате Redmine на Ubuntu 16.04

Redmine е безплатен уеб-базиран инструмент за управление на проекти с отворен код. Той е написан на Ruby on Rails и поддържа множество сървъри на база данни за съхранение на базата данни. Това е богато на функции приложение, поддържащо множество проекти, базиран на роли ACL и система за проследяване на проблеми. Освен това има поддръжка на диаграма на Гант и календар, управление на файлове, уики и форум за проекти, както и много други функции. Той поддържа системи за контрол на версиите като Git, SVN или CVS. Освен това е многоезичен и поддържа до 49 езика.

Предпоставки

За този урок ще използваме 192.168.1.1като публичен IP адрес и redmine.example.com като име на домейн, насочено към екземпляра Vultr. Моля, не забравяйте да замените всички срещания на примерното име на домейн и IP адрес с действителния.

Актуализирайте базовата си система с помощта на ръководството Как да актуализирате Ubuntu 16.04 . След като вашата система бъде актуализирана, продължете с инсталирането на зависимостите.

Инсталирайте Apache

Redmine е написан на Ruby on Rails, така че ще изискваме Phusion Passenger да се интегрира с уеб сървъра на Apache, за да обслужва приложението.

Инсталирайте Apache.

sudo apt -y install apache2 apache2-dev libcurl4-openssl-dev

За да изградим Ruby и Passenger, ще ни трябват и някои инструменти за разработка. Инсталирайте необходимите инструменти.

sudo apt -y install imagemagick libmagickwand-dev git build-essential automake libgmp-dev

Инсталирайте PostgreSQL

Redmine поддържа множество типове сървъри на бази данни като MySQL, PostgreSQL и MSSQL. В този урок ще използваме PostgreSQL за хостване на сървъра на базата данни Redmine.

PostgreSQL е обектно-релационна система за бази данни. Хранилището на Ubuntu по подразбиране съдържа стара версия на PostgreSQL, така че добавете хранилището на PostgreSQL към системата.

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update

Инсталирайте сървъра на база данни PostgreSQL.

sudo apt -y install postgresql

Стартирайте PostgreSQL сървъра и го активирайте да стартира автоматично при стартиране.

sudo systemctl start postgresql
sudo systemctl enable postgresql

Променете паролата за потребителя на PostgreSQL по подразбиране.

sudo passwd postgres

Влезте като потребител на PostgreSQL.

sudo su - postgres

Създайте нов потребител на PostgreSQL за Redmine.

createuser redmine

Разрешено е да използвате всяко потребителско име вместо redmine. PostgreSQL предоставя psql обвивката за изпълнение на заявки към базата данни. Превключете към обвивката на PostgreSQL.

psql

Задайте парола за новосъздадения потребител за базата данни Redmine.

ALTER USER redmine WITH ENCRYPTED password 'DBPassword';

Заменете DBPassword със сигурна парола. Създайте нова база данни за инсталацията на Redmine.

CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;

Излезте от psql черупката.

\q

Превключете към sudo потребителя.

exit

Инсталирайте още няколко необходими PostgreSQL зависимости.

sudo apt -y install libpqxx-dev protobuf-compiler

Инсталирайте Ruby

Ще инсталираме най-новата версия на Ruby с помощта на RVM. Използва се за инсталиране и управление на множество версии на Ruby.

Добавете RVM хранилището.

sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt update

Инсталирайте RVM.

sudo apt -y install rvm

Тъй като трябва да инсталираме Ruby в цялата система, временно ще преминем към root потребител.

sudo -i

Актуализирайте променливите на средата.

echo "source /etc/profile.d/rvm.sh" | tee -a /etc/profile
source /etc/profile.d/rvm.sh

Инсталирайте най-новата версия на Ruby.

rvm install 2.5.1

Забележка: Ако използвате различна версия на Ruby, не забравяйте да актуализирате съответно пътя на Ruby.

Използвайте инсталираната версия на Ruby.

rvm use 2.5.1 --default

Можете да проверите неговата версия.

ruby -v

Ще видите подобен изход.

root@vultr:~# ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

Install bundler, който е мениджърът на зависимости за приложението Ruby.

gem install bundler

Ruby вече е инсталиран. Преди да инсталираме Redmine, ще трябва да инсталираме Phusion Passenger.

Инсталирайте Passenger

Изпълнете следната команда, за да инсталирате Passenger.

gem install passenger

Инсталирайте модула Apache за Passenger.

passenger-install-apache2-module

Скриптът на инсталатора ще ви зададе някои въпроси. Първо, той ще ви предостави информация за процеса на инсталиране. След това ще ви помоли да изберете езика, който ще използвате. Тъй като нашето приложение е написано на Ruby on Rails, изберете Ruby от менюто и натиснете, за ENTERда продължите по-нататък.

Which languages are you interested in?

Use <space> to select.
If the menu doesn't display correctly, press '!'

 ‣ ⬢  Ruby
   ⬢  Python
   ⬡  Node.js
   ⬡  Meteor

Сега инсталаторът ще провери за изискванията. Инсталаторът няма да срещне липсващи зависимости и автоматично ще продължи да компилира и инсталира модула.

След като модулът бъде инсталиран, той ще ви подкани да добавите модула към конфигурационния файл на Apache.

Almost there!

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
     PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.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. 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/apache2/apache2.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. Switch to the sudo user again since we do not need to run any more commands using root user.

exit

Install Redmine

It is recommended to use an unprivileged user to run the application to keep it isolated from rest of the system. Create a new user for Redmine and switch to the newly created user.

sudo adduser --disabled-password --gecos "Redmine User" redmine
sudo su - 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 the 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/bin/pg_config

Install the dependencies required by the application.

bundle install --path vendor/bundle --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.
Bundled gems are installed into `./vendor/bundle`

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

Configure Apache

Add the Passenger module for Apache into the Apache configuration file. This will automatically load the Passenger module.

echo "LoadModule passenger_module /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/apache2/apache2.conf

Забележка: Пътят към модула Passenger може да се промени, когато има нова версия на Passenger. За да намерите пътя към модула, използвайте sudo find / -name mod_passenger.soкомандата.

Създайте нов виртуален хост файл за вашето приложение Redmine.

sudo nano /etc/apache2/sites-available/redmine.conf

Попълнет�� файла със следното съдържание.

<VirtualHost *:80>
    ServerName redmine.example.com

    DocumentRoot /home/redmine/redmine/public

    PassengerRoot /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
    PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
    PassengerUser redmine

    <Directory /home/redmine/redmine/public>
      Allow from all
      Options -MultiViews
      Require all granted
    </Directory>
</VirtualHost>

Не забравяйте да замените redmine.example.com с действителното си име на домейн. Също така се уверете, че пътят към PassengerRoot и PassengerDefaultRuby са правилни. Пътят към двоичните файлове може да се промени, когато има нова версия на Ruby или Passenger. За да намерите тези пътища, изпълнете следната команда.

passenger-config about ruby-command

Ще получите следния изход.

user@vultr:~$ passenger-config about ruby-command
passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
  To use in Apache: PassengerRuby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
  To use in Nginx : passenger_ruby /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby
  To use with Standalone: /usr/share/rvm/gems/ruby-2.5.1/wrappers/ruby /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3/bin/passenger start


## Notes for RVM users
Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config about ruby-command'.

След като виртуалният хост файл е създаден. Активирайте конфигурацията.

sudo a2ensite redmine

Рестартирайте уеб сървъра на Apache.

sudo systemctl restart apache2

Вече можете да получите достъп до вашия Redmine интерфейс на http://redmine.example.com. Влезте с потребителско име adminи парола admin. При първото ви влизане Redmine ще ви подкани да актуализирате паролата.

Защита на Apache с Let's Encrypt SSL

Тъй като нашата инсталация на Redmine е на публичен сървър, се препоръчва да използвате SSL, за да осигурите обмена на данни от сървъра.

Добавете хранилището на Certbot.

sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update

Инсталирайте Certbot, което е клиентското приложение за Let's Encrypt CA.

sudo apt -y install certbot

Забележка: За да получите сертификати от Let's Encrypt CA, домейнът, за който трябва да се генерират сертификатите, трябва да бъде насочен към сървъра. Ако не, направете необходимите промени в DNS записите на домейна и изчакайте DNS да се разпространи, преди да направите отново заявка за сертификат. Certbot проверява авторитета на домейна, преди да предостави сертификатите.

Генерирайте SSL сертификати.

sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com

Генерираните сертификати вероятно ще се съхраняват в /etc/letsencrypt/live/redmine.example.com/. SSL сертификатът ще се съхранява като, cert.pem а частният ключ ще се съхранява като privkey.pem.

Срокът на валидност на сертификатите Let's Encrypt изтича след 90 дни, поради което се препоръчва да настроите автоматично подновяване на сертификатите с помощта на задания на Cron.

Отворете файла за задание на Cron за root потребителя.

sudo crontab -e

Добавете следния ред в края на файла.

30 5 * * * /usr/bin/certbot renew --quiet

Горната задача на Cron ще се изпълнява всеки ден в 5:30 сутринта. Ако сертификатът изтича, той автоматично ще бъде подновен.

Активирайте SSL модула за Apache.

sudo a2enmod ssl

Редактирайте файла за виртуален хост, който създадохме по-рано за Redmine.

sudo nano /etc/apache2/sites-available/redmine.conf

Променете файла на виртуалния хост, за да бъде подобен на следния.

<VirtualHost *:80>
    ServerName redmine.example.com
    Redirect permanent / https://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 /usr/share/rvm/gems/ruby-2.5.1/gems/passenger-5.2.3
    PassengerDefaultRuby /usr/share/rvm/gems/ruby-2.5.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>

Запазете файла и излезте от редактора.

Рестартирайте Apache, за да могат промените да влязат в сила.

sudo systemctl restart apache2

Вече имате достъп до Redmine над HTTPS най https://redmine.example.com.

Поздравления, успешно инсталирахте Redmine на вашия екземпляр на Ubuntu 16.04. Започнете да разработвате своя проект чрез създаване или импортиране на вашия проект.

Оставете коментар

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

DDOS атаки: кратък преглед

DDOS атаки: кратък преглед

Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.

Чудили ли сте се как хакерите печелят пари?

Чудили ли сте се как хакерите печелят пари?

Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.

Революционни изобретения на Google, които ще улеснят живота ви.

Революционни изобретения на Google, които ще улеснят живота ви.

Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Технологична сингулярност: далечно бъдеще на човешката цивилизация?

Тъй като науката се развива с бързи темпове, поемайки много от нашите усилия, рискът да се подложим на необяснима сингулярност също нараства. Прочетете какво може да означава сингулярността за нас.

Функционалности на референтните архитектурни слоеве за големи данни

Функционалности на референтните архитектурни слоеве за големи данни

Прочетете блога, за да разберете различни слоеве в архитектурата на големи данни и техните функционалности по най-простия начин.

Еволюция на съхранението на данни – инфографика

Еволюция на съхранението на данни – инфографика

Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече