Мы будем устанавливать контрольную панель вебсервера Hestia на Ubuntu 20.04 LTS, после чего установим Redmine
Установка Hestia
Логинимся под root
Ставим саму панель. Она бесплатная. Но будьте внимательны выбирая параметры сервера и компонентов, откат на данный момент невозможен.
[bash title=»код»]wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh[/bash]
Если ставить по умолчанию всё что предлагают, а это:
[bash title=»код»]-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]
Просто запустить скрипт:
[bash title=»код»]bash hst-install.sh[/bash]
Либо ставить с ключами
[bash title=»код»]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[/bash]
После чего можем логиниться в панель и проверять как работает.
Установка Ruby
RVM
Для установки нам понадобится установить curl:
[bash title=»код»]apt-get install curl[/bash]
А так же установить public key для скачивания RVM
[bash title=»код»]gpg —keyserver hkp://keys.gnupg.net —recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB[/bash]
Теперь установим RVM, что бы можно было использовать любые версии Ruby и наборы Gem-ов в дальнейшем.
[bash title=»код»]curl -sSL https://get.rvm.io | bash -s stable[/bash]
Устанавливаем Ruby ruby-2.4.1
[bash title=»код»]rvm install ruby-2.4.1
rvm use ruby 2.4.1 —default
rvm gemset create redmine
rvm use 2.4.1@redmine —default[/bash]
Возможные проблемы в процессе
Если во время установки curl вы получите такое сообщение:
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html
То вам нужно выполнить:
[bash title=»код»]apt-get install ca-certificates[/bash]
При попытки установить Ruby вы можете получить сообщение:
RVM is not a function, selecting rubies with ‘rvm use …’ will not work.
В этом случае вам нужно выполнить команду:
[bash title=»код»]/bin/bash —login[/bash]
Если у вас возникнут какие то другие проблемы с работой RVM, то большинство из них решается установкой зависимостей.
Для получения зависимостей RVM выполните команду:
[bash title=»код»]rvm requirements[/bash]
После установки мы можем создать БД для Redmine, для этого подключитесь к MySQL:
Можно визуально создать базу данных через Hestia, указав имя базы данных, логин, пароль и кодировку UTF8MB4
Либо через терминал:
[bash title=»код»]mysql -ulogin -ppassword[/bash]
B выполните команды по созданию БД, пользователя который будет с ней работать и привелегий для него:
[bash title=»код»]create database redmine character set utf8mb4;
create user ‘redmine’@’localhost’ identified by ‘my_password’;
grant all privileges on redmine.* to ‘redmine’@’localhost’;
exit;[/bash]
Установка Redmine
Выберите директорию в которой у вас будет размещен Redmine, перейдите в нее и клонируйте репозиторий, с помощью команды:
[bash title=»код»]git clone https://github.com/redmine/redmine.git[/bash]
В таком случае он будет в подпапке redmine, чтобы клонировать в текущий каталог, необходимо добавить точку в конце:
[bash title=»код»]git clone https://github.com/redmine/redmine.git.[/bash]
После необходимо выдать права на директорию Redmine:
[bash title=»код»]chmod 775 -R /your_redmine_directory/redmine
chown -R admin /your_redmine_director/redmine[/bash]
Далее редактируем файл конфигурации базы данных /your_redmine_director/redmine/config/database.yml и вписываем в него следующие строки:
[bash title=»код»]production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "[password]"
encoding: utf8mb4[/bash]
Устанавливаем Rmagic и пакет без которого не поставиться gem:
[bash title=»код»]apt-get install graphicsmagick-libmagick-dev-compat
apt-get install libmagickwand-dev[/bash]
Устанавливаем все необходимые gem с помощью бандлера:
[bash title=»код»]cd /your_redmine_directory/redmine
gem install bundler[/bash]
Если вы установли MySql то, вам нужно будет выполнить команду:
[bash title=»код»]apt-get install libmysqlclient-dev[/bash]
Устанавливаем все необходимые гемы:
[bash title=»код»]bundle install —without development test
bundle exec rake generate_secret_token[/bash]
Проведем миграции и загрузим данные необходимые для работы системы:
[bash title=»код»]RAILS_ENV=production rake db:migrate
RAILS_ENV=production REDMINE_LANG=ru rake redmine:load_default_data[/bash]
На этом этапе ваша база данных должна распухнуть.
Установка и настройка Application-сервера
Стандартный WebRick сервер крайне медлителен, поэтому разумно будет установить сторонний Application-сервер. Из огромного их числа, я предпочитаю Puma.
Для этого создадим в корневой директории Redmine файл с названием Gemfile.local. Внутри него напишем:
[bash title=»код»]gem ‘puma’, ‘5.0.2’[/bash]
Снова выполним команду bundle install, что бы gem установился.
Создадим файл puma.rb
[bash title=»код»]touch /your_redmine_directory/redmine/config/puma.rb[/bash]
И запишем в него следующие содержимое:
[bash title=»код»]# 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[/bash]
Для systemd
Создайте файл в директории /etc/systemd/system/puma.service и добавьте в него следующее содержимое:
[bash title=»код»][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/ruby-2.4.1@redmine/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[/bash]
После этого выполняем следующие команды:
[bash title=»код»]# После установки или изминения puma.service
systemctl daemon-reload
# Включаем автозагрузку
systemctl enable puma.service
# Стартуем puma
systemctl start puma.service
# Проверяем, что puma запустилась
systemctl status puma.service[/bash]
Создаём шаблон виртуальных хостов под Redmin для nginx
[bash title=»код»]nano /usr/local/hestia/data/templates/web/nginx/redmine.tpl[/bash]
[bash title=»код»]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_*;
}[/bash]
[bash title=»код»]nano /usr/local/hestia/data/templates/web/nginx/redmine.stpl[/bash]
[bash title=»код»]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_*;
}[/bash]
После чего выбираем шаблон с названием Redmin при создании или редактировании виртуального хоста в Hestia в разделе Поддержка Proxy NGINX — Шаблон Proxy
Сомневаюсь что вы поставите всё с первого раза, а возможно просто я такой невезучий.
Будьте внимательны с путями в каталог redmin, в зависимости от того куда и как ставили.
В любом случае моя огромная благодарность другу со стажем Максиму Иванченко, за терпение