Site icon IT Draft

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

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

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

План работы:

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

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

[root@localhost]# yum install cifs-utils
[root@localhost]# mkdir -p /mnt/smb
[root@localhost]# mount.cifs //192.168.1.99/share /mnt/smb -o username=user domain=DOMAIN

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

Selectel — ведущий провайдер облачной инфраструктуры и услуг дата-центров

Компания занимает лидирующие позиции на рынке на рынке выделенных серверов и приватных облаков, и входит в топ-3 крупнейших операторов дата-центров в России.


[root@localhost]# tar -zcf /mnt/smb/backup_$(date +%y%m%d).tar.gz /var/www/html/redmine
[root@localhost]# mysqldump -u redmine -predmine redmine | gzip > /mnt/smb/backup_$(date +%y%m%d).sql.gz

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

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

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

[root@localhost]# yum install epel-release
[root@localhost]# yum update

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

[root@localhost]# yum install nano htop mc wget
[root@localhost]# yum groupinstall "Development tools"
[root@localhost]# 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

[root@localhost]# setenforce 0
[root@localhost]# nano /etc/sysconfig/selinux
SELINUX=disabled

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

[root@localhost]# yum install httpd mod_ssl httpd-devel
[root@localhost]# systemctl enable httpd.service
[root@localhost]# systemctl start httpd.service

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

[root@localhost]# firewall-cmd --permanent --zone=public --add-service=http
[root@localhost]# firewall-cmd --permanent --zone=public --add-service=https
[root@localhost]# firewall-cmd --reload

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

[root@localhost]# yum install mariadb-server mariadb mariadb-devel
[root@localhost]# systemctl enable mariadb.service
[root@localhost]# systemctl start mariadb.service

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

[root@localhost]# 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!

[root@localhost]# mysql -u root -p

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

[root@localhost]# yum install cifs-utils
[root@localhost]# mkdir -p /mnt/smb
[root@localhost]# mount.cifs //192.168.1.99/share /mnt/smb -o username=user domain=DOMAIN

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

[root@localhost]# cp /mnt/sdb/backup_180807.sql.gz /home/backup_180807.sql.gz
[root@localhost]# cp /mnt/sdb/backup_180807.sql.gz /home/backup_180807.tar.gz

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

[root@localhost]# adduser redmine
[root@localhost]# passwd redmine
[root@localhost]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
redmine ALL=(ALL)       ALL

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

[root@localhost]# su - redmine

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

[redmine@localhost]# curl -sSL https://rvm.io/mpapis.asc | gpg --import -
[redmine@localhost]# curl -L get.rvm.io | bash -s stable
[redmine@localhost]# source ~/.rvm/scripts/rvm
[redmine@localhost]# rvm reload
[redmine@localhost]# rvm list known
[redmine@localhost]# rvm install 2.5
[redmine@localhost]# rvm use 2.5 --default

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

[redmine@localhost]# ruby --version

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

[redmine@localhost]# mv /home/backup_180807.sql.gz /home/redmine/backup_180807.sql.gz
[redmine@localhost]# mv /home/backup_180807.tar.gz /home/redmine/backup_180807.tar.gz

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

[redmine@localhost]# gzip -d /home/redmine/backup_180807.sql.gz
[redmine@localhost]# tar -xvzf /home/redmine/backup_180807.tar.gz

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

[redmine@localhost]# mkdir -p /home/redmine/easyredmine/

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

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

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

[redmine@localhost]# mysql -u root -p

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

MariaDB [(none)]> CREATE DATABASE redmine;
MariaDB [(none)]> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';

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

MariaDB [(none)]> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;

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

[redmine@localhost]# mysql -u redmine -ppassword redmine < /home/redmine/backup_180807.sql

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

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

[redmine@localhost ~]$ exit

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

[root@localhost]# nano /etc/httpd/conf.d/vhosts.conf
# Загрузка моих vhosts
IncludeOptional vhosts.d/*.conf

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

[root@localhost]# mkdir /etc/httpd/vhosts.d

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

[root@localhost]# 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

[root@localhost]# mkdir /home/redmine/logs

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

[root@localhost]# systemctl restart httpd.service

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

[root@localhost]# chmod o+x "/home/redmine"

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

[root@localhost]# su - redmine

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

[redmine@localhost]# gem install passenger
[redmine@localhost]# passenger-install-apache2-module

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

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

[redmine@localhost ~]$ exit

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

[root@localhost]# 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 приводим к виду

[root@localhost]# 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

[root@localhost]# systemctl restart httpd.service

Обновляем Easy Redmine

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

[root@localhost]# su - redmine

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

[redmine@localhost]# wget https://raw.githubusercontent.com/easyredmine/easy_server_requirements_check/master/easycheck.sh
[redmine@localhost]# sh ./easycheck.sh

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

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

[redmine@localhost ~]$ gem install redmine-installer --pre

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

[redmine@localhost ~]$ redmine upgrade /home/redmine/easyredmine20180101.zip /home/redmine/easyredmine

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

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

[redmine@localhost]# sudo systemctl restart httpd.service

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

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

[redmine@localhost ~]$ exit

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

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

[root@server] 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

[root@localhost]# su - redmine

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

[redmine@localhost]# redmine backup /home/redmine/easyredmine

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

[redmine@localhost]# ls /home/redmine/redmine-backups/backup_%date%_%time%
redmine.sql redmine.zip

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

[root@localhost]# tar -zcf /home/redmine/redmine-backups/$(date +%y%m%d)_backup_filse.tar.gz /home/redmine/easyredmine
[root@localhost]# 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 наружу

[root@external]# cat /etc/httpd/vhosts/redmine.example.ru.conf 
<VirtualHost *:80>
 ServerName redmine.example.ru
 ServerAlias www.redmine.example.ru
 ServerAdmin root@example.ru
 Redirect / https://redmine.example.ru/
</VirtualHost>

NameVirtualHost *:443
<VirtualHost *:443>
 ServerName redmine.example.ru
 ServerAlias www.redmine.example.ru
 ServerAdmin root@example.ru
 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>
Exit mobile version