12
Окт

Установка Hestia + Redmin на Ubuntu 20.04 LTS

Мы будем устанавливать контрольную панель вебсервера Hestia на Ubuntu 20.04 LTS, после чего установим Redmine

Установка Hestia

Логинимся под root
Ставим саму панель. Она бесплатная. Но будьте внимательны выбирая параметры сервера и компонентов, откат на данный момент невозможен.

wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh

Если ставить по умолчанию всё что предлагают, а это:

-a, --apache          Install Apache        [yes|no]  default: yes
-n, --nginx           Install Nginx         [yes|no]  default: yes
-w, --phpfpm          Install PHP-FPM       [yes|no]  default: yes
-o, --multiphp        Install Multi-PHP     [yes|no]  default: no
-v, --vsftpd          Install Vsftpd        [yes|no]  default: yes
-j, --proftpd         Install ProFTPD       [yes|no]  default: no
-k, --named           Install Bind          [yes|no]  default: yes
-m, --mysql           Install MariaDB       [yes|no]  default: yes
-g, --postgresql      Install PostgreSQL    [yes|no]  default: no
-x, --exim            Install Exim          [yes|no]  default: yes
-z, --dovecot         Install Dovecot       [yes|no]  default: yes
-c, --clamav          Install ClamAV        [yes|no]  default: yes
-t, --spamassassin    Install SpamAssassin  [yes|no]  default: yes
-i, --iptables        Install Iptables      [yes|no]  default: yes
-b, --fail2ban        Install Fail2ban      [yes|no]  default: yes
-q, --quota           Filesystem Quota      [yes|no]  default: no
-d, --api             Activate API          [yes|no]  default: yes
-r, --port            Change Backend Port             default: 8083
-l, --lang            Default language                default: en
-y, --interactive     Interactive install   [yes|no]  default: yes
-s, --hostname        Set hostname
-e, --email           Set admin email
-p, --password        Set admin password
-f, --force           Force installation
-h, --help            Print this help

Просто запустить скрипт:

bash hst-install.sh

Либо ставить с ключами

bash hst-install.sh -n yes -w yes -t no -c no -x yes -z yes -b yes -i yes -m yes -l de \ -s youdomain.tld -e [email protected] -p yourpasswordhere -a no -k no -o no

После чего можем логиниться в панель и проверять как работает.

Установка Ruby

RVM

Для установки нам понадобится установить curl:

apt-get install curl

А так же установить public key для скачивания RVM

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Теперь установим RVM, что бы можно было использовать любые версии Ruby и наборы Gem-ов в дальнейшем.

curl -sSL https://get.rvm.io | bash -s stable

Устанавливаем Ruby ruby-2.4.1

rvm install ruby-2.4.1
rvm use ruby 2.4.1 --default
rvm gemset create redmine
rvm use [email protected] --default

Возможные проблемы в процессе
Если во время установки curl вы получите такое сообщение:
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

То вам нужно выполнить:

apt-get install ca-certificates

При попытки установить Ruby вы можете получить сообщение:
RVM is not a function, selecting rubies with ‘rvm use …’ will not work.

В этом случае вам нужно выполнить команду:

/bin/bash --login

Если у вас возникнут какие то другие проблемы с работой RVM, то большинство из них решается установкой зависимостей.
Для получения зависимостей RVM выполните команду:

rvm requirements

После установки мы можем создать БД для Redmine, для этого подключитесь к MySQL:
Можно визуально создать базу данных через Hestia, указав имя базы данных, логин, пароль и кодировку UTF8MB4

Либо через терминал:

mysql -ulogin -ppassword

B выполните команды по созданию БД, пользователя который будет с ней работать и привелегий для него:

create database redmine character set utf8mb4;
create user 'redmine'@'localhost' identified by 'my_password';
grant all privileges on redmine.* to 'redmine'@'localhost';
exit;

Установка Redmine

Выберите директорию в которой у вас будет размещен Redmine, перейдите в нее и клонируйте репозиторий, с помощью команды:

git clone https://github.com/redmine/redmine.git

В таком случае он будет в подпапке redmine, чтобы клонировать в текущий каталог, необходимо добавить точку в конце:

git clone https://github.com/redmine/redmine.git.

После необходимо выдать права на директорию Redmine:

chmod 775 -R /your_redmine_directory/redmine
chown -R admin /your_redmine_director/redmine

Далее редактируем файл конфигурации базы данных /your_redmine_director/redmine/config/database.yml и вписываем в него следующие строки:

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "[password]"
  encoding: utf8mb4

Устанавливаем Rmagic и пакет без которого не поставиться gem:

apt-get install graphicsmagick-libmagick-dev-compat
apt-get install libmagickwand-dev

Устанавливаем все необходимые gem с помощью бандлера:

cd /your_redmine_directory/redmine
gem install bundler

Если вы установли MySql то, вам нужно будет выполнить команду:

apt-get install libmysqlclient-dev

Устанавливаем все необходимые гемы:

bundle install --without development test
bundle exec rake generate_secret_token

Проведем миграции и загрузим данные необходимые для работы системы:

RAILS_ENV=production rake db:migrate
RAILS_ENV=production REDMINE_LANG=ru rake redmine:load_default_data

На этом этапе ваша база данных должна распухнуть.

Установка и настройка Application-сервера

Стандартный WebRick сервер крайне медлителен, поэтому разумно будет установить сторонний Application-сервер. Из огромного их числа, я предпочитаю Puma.
Для этого создадим в корневой директории Redmine файл с названием Gemfile.local. Внутри него напишем:

gem 'puma', '5.0.2'

Снова выполним команду bundle install, что бы gem установился.

Создадим файл puma.rb

touch /your_redmine_directory/redmine/config/puma.rb

И запишем в него следующие содержимое:

# Change to match your CPU core count
workers 2

# Min and Max threads per worker
threads 1, 6

worker_timeout 600

app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/tmp"
directory app_dir

# Default to production
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env

# Set up socket location
bind "unix://#{shared_dir}/sockets/puma.sock"

# Logging
stdout_redirect "#{app_dir}/log/puma.stdout.log", "#{app_dir}/log/puma.stderr.log", true

# Set master PID and state locations
pidfile "#{shared_dir}/pids/puma.pid"
state_path "#{shared_dir}/pids/puma.state"

on_worker_boot do
  require "active_record"
  ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
  ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end

Для systemd

Создайте файл в директории /etc/systemd/system/puma.service и добавьте в него следующее содержимое:

[Unit]
Description=Redmine
After=network.target

# Uncomment for socket activation (see below)
# Requires=puma.socket

[Service]
# Foreground process (do not use --daemon in ExecStart or config.rb)
Type=simple

# Preferably configure a non-privileged user
User=admin
#Group=www

# Specify the path to your puma application root
WorkingDirectory=/home/admin/web/ваш_хост/public_html/redmine

ExecStart=/bin/bash -lc '/usr/local/rvm/gems/[email protected]/wrappers/puma -C /home/admin/web/ваш_хост/public_html/redmine/config/puma.rb'
public_html/tmp/pids/puma.pid

Restart=always

[Install]
WantedBy=multi-user.target

После этого выполняем следующие команды:

# После установки или изминения puma.service
systemctl daemon-reload

# Включаем автозагрузку
systemctl enable puma.service

# Стартуем puma
systemctl start puma.service

# Проверяем, что puma запустилась
systemctl status puma.service

Создаём шаблон виртуальных хостов под Redmin для nginx

nano /usr/local/hestia/data/templates/web/nginx/redmine.tpl
upstream redmine {
    server unix:/home/%user%/web/%domain%/public_html/redmine/tmp/sockets/puma.sock fail_timeout=0;
}

server {
    listen      %ip%:%proxy_port%;
    server_name %domain_idn% %alias_idn%;

    include %home%/%user%/conf/web/%domain%/nginx.forcessl.conf*;

    root %docroot%/public;

    try_files $uri/index.html $uri @redmine;

    location @redmine {
        proxy_pass http://redmine;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        proxy_read_timeout 1800;
        proxy_send_timeout 1800;
        send_timeout       1800;
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/%domain%/nginx.conf_*;
}
nano /usr/local/hestia/data/templates/web/nginx/redmine.stpl
upstream sredmine {
    server unix:/home/%user%/web/%domain%/public_html/redmine/tmp/sockets/puma.sock fail_timeout=0;
}

server {
    listen      %ip%:%proxy_ssl_port% ssl http2;
    server_name %domain_idn% %alias_idn%;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;
    ssl_stapling on;
    ssl_stapling_verify on;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;
    access_log     /var/log/%web_system%/domains/%domain%.log combined;
    access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;

    include %home%/%user%/conf/web/%domain%/nginx.hsts.conf*;

    root %docroot%/public;

    try_files $uri/index.html $uri @redmine;

    location @redmine {
        proxy_pass http://sredmine;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        proxy_read_timeout 1800;
        proxy_send_timeout 1800;
        send_timeout       1800;
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*;
}

После чего выбираем шаблон с названием Redmin при создании или редактировании виртуального хоста в Hestia в разделе Поддержка Proxy NGINX — Шаблон Proxy

Сомневаюсь что вы поставите всё с первого раза, а возможно просто я такой невезучий.
Будьте внимательны с путями в каталог redmin, в зависимости от того куда и как ставили.
В любом случае моя огромная благодарность другу со стажем Максиму Иванченко, за терпение

Комментариев нет

Leave a Comment