Мы будем устанавливать контрольную панель вебсервера 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 2.4.1@redmine --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/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
После этого выполняем следующие команды:
# После установки или изминения 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, в зависимости от того куда и как ставили.
В любом случае моя огромная благодарность другу со стажем Максиму Иванченко, за терпение