Данная статья описывает настройку Redmine+Unicorn+Nginx на ОС FreeBSD. Данные будем хранить в MySQL

Установка Web сервера

Ставим nginx
# cd /usr/ports/www/nginx
# make config-recursive
# make install clean

в /etc/rc.conf добавляем:
nginx_enable=YES

Ставим MySQL ( я выбрал MariaDB 10.1 )
# cd /usr/ports/databases/mariadb101-server
# make config-recursive
# make install clean

в /etc/rc.conf добавляем:
mysql_enable=YES
Запускаем MySQL
# /usr/local/etc/rc.d/mysql-server start

Задаем пароль для root в MySQL ( в скобках сам пароль )
# mysqladmin -u root password 'password'

Установка Redmine

# cd /usr/ports/www/redmine
# make config-recursive
# make install clean

Создаем пользователя и базу для redmine:
# mysql -p
CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

Переходим в директорию с Redmine, копируем и редактируем конфиг подключения к БД в соотвествии ранее созданного пользователя:
cd /usr/local/www/redmine/
cp config/database.yml.example config/database.yml
nano config/database.yml

Установка Unicorn:
Редактируем файл Gemfile
# ee Gemfile
и добавляем в конце
gem 'unicorn'

Выполняем команду
# bundle install --without development test

Генерируем ключи и инициализируем базу данных
# bundle exec rake generate_secret_token
# rake db:migrate RAILS_ENV=production
# rake redmine:load_default_data RAILS_ENV=production

Создаем и редактируем конфиг unicorn
# touch config/unicorn.rb
# ee config/unicorn.rb

и приводим его к такому виду
worker_processes 3 # Numbers CPU + 1
working_directory "/usr/local/www/redmine/"
preload_app true
timeout 300
listen "/usr/local/www/redmine/tmp/sockets/unicorn.sock", :backlog => 64
pid "/usr/local/www/redmine/tmp/pids/unicorn.pid"
stderr_path "/usr/local/www/redmine/log/unicorn.stderr.log"
stdout_path "/usr/local/www/redmine/log/unicorn.stdout.log"

before_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end

Запускаем Unicorn
# bundle exec unicorn_rails -E production -c config/unicorn.rb -D

Приводим /usr/local/etc/nginx/nginx.conf к такому виду:
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# Redmine
upstream redmine {
server unix:/usr/local/www/redmine/tmp/sockets/unicorn.sock fail_timeout=0;
}
include /usr/local/etc/nginx/vhosts/*;
}

Создаем виртуальный хост:
# ee /usr/local/etc/nginx/vhosts/redmine.deathstar.name.conf
и прописываем
server {
listen 80;
#listen 443 ssl;
#ssl on;
#ssl_certificate /usr/local/etc/letsencrypt/live/redmine.deathstar.name/fullchain.pem;
#ssl_certificate_key /usr/local/etc/letsencrypt/live/redmine.deathstar.name/privkey.pem;
server_name redmine.deathstar.name;
access_log /var/log/nginx/exim-access.log;
error_log /var/log/nginx/exim-error.log;
root /usr/local/www/redmine;
charset utf-8;

location /.well-known/acme-challenge {
allow all;
auth_basic off;
root /tmp/;
}

location / {
try_files $uri @ruby;
}

location ~* \.(jpg|gif|png|js|css|ico)$ {
root /usr/local/www/redmine/public;
expires 7d;
error_page 404 502 504 = @ruby;
}

location @ruby {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_read_timeout 3000s;
proxy_pass http://redmine; #upstream redmine

}

location ~ /\.ht
{
deny all;
}

}

Запускаем Nginx
/usr/local/etc/rc.d/nginx start

Получение SSL сертификатов от Let’s Encrypt
Устанавливаем Certbot Для получения SSL сертификата.
# cd /usr/ports/security/py-certbot
# make config-recursive
# make install clean

Получаем сертификат SSL от Let’s Encrypt

# certbot certonly --rsa-key-size 4096 --webroot -w /tmp/ -d redmine.deathstar.name
и видим
- Congratulations! Your certificate and chain have been saved at:
/usr/local/etc/letsencrypt/live/redmine.deathstar.name/fullchain.pem
Your key file has been saved at: /usr/local/etc/letsencrypt/live/redmine.deathstar.name/privkey.pem

Редактируем виртуальный хост в nginx для Redmine
# ee /usr/local/etc/nginx/vhosts/redmine.deathstar.name и раскоментируем строки, отвечающие за работу с SSL
listen 443 ssl;
ssl on;
ssl_certificate /usr/local/etc/letsencrypt/live/redmine.deathstar.name/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/redmine.deathstar.name/privkey.pem;

Для редиректа с http на https можно прописать после строки ssl_certificate_key
if ( $scheme = "http" ) {
rewrite ^/(.*)$ https://$host/$1 permanent;
}

Перезапускаем Nginx
/usr/local/etc/rc.d/nginx restart

Идем на https://redmine.deathstar.name , логинимся с логином и паролем admin , меняем пароль на новый и пользуемся.