Пост

Easy Redmine - перенос на Centos 7, обновление, бэкапирование

Easy Redmine - это полноценное и расширяемое обновление Redmine, которое оснащено лучшими плагинами, функциями и новым дизайном для мобильных устройств. Он обеспечивает более эффективное управление проектами, четкую коммуникацию, лучший пользовательский опыт и экономит ваше драгоценное время.

Есть сервер с Centos 6 и устаревшей версией Easy Redmine.
Необходимо обновить Easy Redmine до последней версии, перенести пользовательские данные.

План работы:

  • Делается бэкап данных и базы
  • Разворачивается новая виртуальная машина с Centos 7
  • Устанавливается необходимый софт
  • Разворачивается бэкап данных на новом сервере
  • Обновляется EasyRedmine

Backup файлов и базы на старом сервере

Т.к. на старом сервере изначально было выделено мало места, устанавливаем утилиту, что примонтировать расшаренный каталог рабочего ПК.

1
2
3
$ sudo yum install cifs-utils
$ sudo mkdir -p /mnt/smb
$ sudo mount.cifs //192.168.1.99/share /mnt/smb -o username=user domain=DOMAIN

На старом сервере делаем бэкап файлов и базы Easy Redmine и сохраняем эти данные в примонтированный каталог.

1
2
$ sudo tar -zcf /mnt/smb/backup_$(date +%y%m%d).tar.gz /var/www/html/redmine
$ sudo mysqldump -u redmine -predmine redmine | gzip > /mnt/smb/backup_$(date +%y%m%d).sql.gz

На этом все манипуляции со старым сервером закончились.

Разворачиваем Centos 7 и ставим софт

На новом сервере добавляем репозиторий EPEL и обновляемся

1
2
$ sudo yum install epel-release
$ sudo yum update

Ставим необходимый набор софта

1
2
3
$ sudo yum install nano htop mc wget
$ sudo yum groupinstall "Development tools"
$ sudo yum install ImageMagick ImageMagick-devel git libcurl-devel 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

Отключаем SELinux

1
2
3
$ sudo setenforce 0
$ sudo nano /etc/sysconfig/selinux
SELINUX=disabled

Устанавливаем WEB-сервер Apache, добавляем его в автозагрузку и запускаем

1
2
3
$ sudo yum install httpd mod_ssl httpd-devel
$ sudo systemctl enable httpd.service
$ sudo systemctl start httpd.service

Открываем порты 80 и 443 в firewall

1
2
3
$ sudo firewall-cmd --permanent --zone=public --add-service=http
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload

Устанавливаем MySQL-сервер (MariaDB) добавляем его в автозагрузку и запускаем

1
2
3
$ sudo yum install mariadb-server mariadb mariadb-devel
$ sudo systemctl enable mariadb.service
$ sudo systemctl start mariadb.service

Задаем root-пароль для MySQL и проверяем подключение

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] 
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] 
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] 
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] 
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] 
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

$ sudo mysql -u root -p

Ставим утилиту, чтоб перенести бэкап из расшаренной папки рабочего ПК на сервер

1
2
3
$ sudo yum install cifs-utils
$ sudo mkdir -p /mnt/smb
$ sudo mount.cifs //192.168.1.99/share /mnt/smb -o username=user domain=DOMAIN

Переносим файлы на сервер

1
2
$ sudo cp /mnt/sdb/backup_180807.sql.gz /home/backup_180807.sql.gz
$ sudo cp /mnt/sdb/backup_180807.sql.gz /home/backup_180807.tar.gz

Добавляем пользователя redmine и добавляем ему права sudo

1
2
3
4
5
6
$ sudo adduser redmine
$ sudo passwd redmine
$ sudo visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
redmine ALL=(ALL)       ALL

Переключаемся на пользователя redmine

1
$ sudo su - redmine

Устанавливаем Ruby 2.5.1 от пользователя eedmine

1
2
3
4
5
6
7
$ curl -sSL https://rvm.io/mpapis.asc | gpg --import -
$ curl -L get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm
$ rvm reload
$ rvm list known
$ rvm install 2.5
$ rvm use 2.5 --default

Проверяем установленную версию Ruby

1
$ ruby --version

Переносим файлы бэкапа в домашнюю папку пользователя eedmine

1
2
$ mv /home/backup_180807.sql.gz /home/redmine/backup_180807.sql.gz
$ mv /home/backup_180807.tar.gz /home/redmine/backup_180807.tar.gz

Распаковываем архив с базой и с файлами

1
2
$ gzip -d /home/redmine/backup_180807.sql.gz
$ tar -xvzf /home/redmine/backup_180807.tar.gz

Создаем каталог, где будет лежать EasyRedmine

1
$ mkdir -p /home/redmine/easyredmine/

Переносим распакованные файлы в него

Настраиваем MySQL

Подключаемся к MYSQL

1
$ mysql -u root -p

Создаем базу данных, пользователя и назначаем ему пароль

1
2
> CREATE DATABASE redmine;
> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';

Назначаем привилегии на базу, обновляем привилегии, отключаемся от MySQL

1
2
3
> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
> FLUSH PRIVILEGES;
> exit;

Восстанавливаем базу данных из дампа

1
$ mysql -u redmine -ppassword redmine < /home/redmine/backup_180807.sql

Настраиваем Apache

Переключаемся обратно на пользователя root

1
$ exit

Добавим vhosts — несколько сайтов на одном ip-адресе

1
2
3
$ sudo nano /etc/httpd/conf.d/vhosts.conf
# Загрузка моих vhosts
IncludeOptional vhosts.d/*.conf

Создаем каталог, где будут лежать конфигурации vhosts

1
$ sudo mkdir /etc/httpd/vhosts.d

Создаем конфигурационный файл, в дальнейшем мы еще будем его редактировать

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo nano /etc/httpd/vhosts.d/redmine.example.ru.conf
<VirtualHost *:80>
   ServerName redmine.example.ru

   DocumentRoot /home/redmine/easyredmine/public

   <Directory /home/redmine/easyredmine/public>
      AllowOverride all
      Options -MultiViews
      Require all granted
   </Directory>

   ErrorLog "/home/redmine/logs/redmine-error.log"
   CustomLog "/home/redmine/logs/redmine-access.log" combined
</VirtualHost>

Создаем каталоге, где будут лежать логи Apache

1
$ sudo mkdir /home/redmine/logs

Перезапускаем Apache

1
$ sudo systemctl restart httpd.service

Назначаем права на домашний каталог пользователя redmine, чтобы другие службы имели к ней доступ

1
$ sudo chmod o+x "/home/redmine"

Переключаемся на пользователя redmine

1
$ sudo su - redmine

Установка модуля passenger

1
2
$ gem install passenger
$ passenger-install-apache2-module

при установке модуля я оставил только Ruby

Донастраиваем Apache
Переключаемся обратно на пользователя root

1
$ exit

Прописываем модуль passenger в Apache

1
$ sudo echo "LoadModule passenger_module /home/redmine/.rvm/gems/ruby-2.5.1/gems/passenger-5.3.4/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf

Конфигурационный файл виртуального хоста redmine.example.ru приводим к виду

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ sudo cat /etc/httpd/vhosts.d/redmine.example.ru.conf
<VirtualHost *:80>
   ServerName redmine.example.ru
   DocumentRoot /home/redmine/easyredmine/public

     PassengerRoot /home/redmine/.rvm/gems/ruby-2.5.1/gems/passenger-5.3.4
     PassengerDefaultRuby /home/redmine/.rvm/gems/ruby-2.5.1/wrappers/ruby
     PassengerUser redmine

   <Directory /home/redmine/easyredmine/public>
      AllowOverride all
      Options -MultiViews
      Require all granted
   </Directory>

   ErrorLog "/home/redmine/logs/redmine-error.log"
   CustomLog "/home/redmine/logs/redmine-access.log" combined
</VirtualHost>

Перезапускаем Apache

1
$ sudo systemctl restart httpd.service

Обновляем Easy Redmine

Переключаемся на пользователя redmine

1
$ sudo su - redmine

Скачиваем утилиту, для проверки готовности установки Easy Redmine и запускаем ее

1
2
$ wget https://raw.githubusercontent.com/easyredmine/easy_server_requirements_check/master/easycheck.sh
$ sh ./easycheck.sh

По результатам выполнения этой утилиты мне надо было доустановить некоторые программы: ImageMagic, mysql-devel

Устанавливаем утилиту для обновления Easy Redmine

1
$ gem install redmine-installer --pre

Запускаем процесс обновления Easy Redmine

1
$ redmine upgrade /home/redmine/easyredmine20180101.zip /home/redmine/easyredmine

Файл easyredmine20180101.zip был предварительно скачан с официального сайта Easy Redmine

Перезапускаем Apache

1
$ sudo systemctl restart httpd.service

Настраиваем ротацию логов logrotate

Переключаемся обратно на пользователя root

1
$ exit

Логи Apache: /home/redmine/logs Логи Easy Redmine: /home/redmine/easyredmine/log

Создаем конфигурационный файл

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ sudo nano /etc/logrotate.d/easyredmine
/home/redmine/logs/*log /home/redmine/easyredmine/log/*log {
  # Ежедневная ротация
  daily

  # Сжимать ротированные файлы
  compress

  # Не генерировать ошибку, если файла лога нет
  missingok

  # Если файл пустой, не выполнять никаких действий.
  notifempty

  # Ротировать 30 раз до удаления
  rotate 30

  # Пока размер лог-файла не превысит 5 мегабайт, он не будет ротироваться
  size=5M

  # Выполнять postrotate только один раз
  sharedscripts

  # Отложить сжатие последнего лога
  delaycompress

  # Создать новый лог-файл после ротирования
  create 644 root root

  # Скрипт, который необходимо выполнить после чистки лога
#  postrotate
#  /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
#  endscript
}

Бэкапирование Easy Redmine

Переключаемся на пользователя redmine

1
$ sudo su - redmine

Делаем бэкап средствами Redmine

1
$ redmine backup /home/redmine/easyredmine

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

1
2
$ ls /home/redmine/redmine-backups/backup_%date%_%time%
redmine.sql redmine.zip

Бэкапирование с помощью bash

1
2
$ sudo tar -zcf /home/redmine/redmine-backups/$(date +%y%m%d)_backup_filse.tar.gz /home/redmine/easyredmine
$ sudo mysqldump -u redmine -ppassword redmine | gzip > /home/redmine/redmine-backups/$(date +%y%m%d)_backup_base.sql.gz

Настраиваем SSL

Так как Easy Redmine лежит на виртуальном сервере внутри локальной сети, то доступ наружу будет пробрасывается через модуль для Apache mod_proxy на сервере с внешним ip

Конфигурация для проброса Easy Redmine наружу

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ sudo cat /etc/httpd/vhosts/redmine.example.ru.conf 
<VirtualHost *:80>
 ServerName redmine.example.ru
 ServerAlias www.redmine.example.ru
 ServerAdmin [email protected]
 Redirect / https://redmine.example.ru/
</VirtualHost>

NameVirtualHost *:443
<VirtualHost *:443>
 ServerName redmine.example.ru
 ServerAlias www.redmine.example.ru
 ServerAdmin [email protected]
 ServerSignature Off

 SSLEngine on
 SSLCertificateFile /etc/httpd/ssl/example.ru/certificate.crt
 SSLCertificateKeyFile /etc/httpd/ssl/example.ru/private.key
 
# Enable SSL over proxy
 SSLProxyEngine On
 SSLProxyCheckPeerCN on
 SSLProxyCheckPeerExpire on
 
 ProxyRequests Off
 ProxyPreserveHost On
 ProxyVia full
 
 ProxyPass "/" "http://192.168.1.40/"
 ProxyPassReverse "/" "http://192.168.1.40/"

 # Notify the server that the connection is secure
 RequestHeader set X-Forwarded-Proto "https"
 RequestHeader set X-Forwarded-Port "443"

ErrorLog /var/www/vhosts/easyredmine/error_ssl.log
CustomLog /var/www/vhosts/easyredmine/access_ssl.log combined
</VirtualHost>
Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.