Як встановити Redmine на Ubuntu 16.04

Redmine — це безкоштовний веб-інструмент керування проектами з відкритим вихідним кодом. Він написаний на Ruby on Rails і підтримує кілька серверів баз даних для зберігання бази даних. Це багатофункціональна програма, яка підтримує кілька проектів, ACL на основі ролей і систему відстеження проблем. Він також має підтримку діаграми Ганта та календаря, керування файлами, вікі та форуму для кожного проекту, а також багато інших функцій. Він підтримує системи контролю версій, такі як Git, SVN або CVS. Він також багатомовний, підтримує аж 49 мов.

Передумови

  • Примірник сервера Vultr Ubuntu 16.04.
  • Користувач sudo .
  • Доменне ім’я, спрямоване на сервер.

У цьому підручнику ми будемо використовувати 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. Почніть розробляти свій проект, створивши або імпортуючи проект.

Залишити коментар

Повстання машин: застосування ШІ в реальному світі

Повстання машин: застосування ШІ в реальному світі

Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.

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. Прочитайте цю статтю, щоб дізнатися більше