Установка Gitlab + MariaDB на FreeBSD с SSL от Let’s Encrypt

Имеем свежеустановленую FreeBSD 11. Задача: поднять Gitlab.
Обновляем дерево портов
portsnap fetch && portsnap extract && portsnap update

1) Устанавливаем MariaDB
cd /usr/ports/databases/mariadb102-server/
make config-recursive
make install clean
,
добавляем в автозапуск, запускаем и производим настройку ( установку root пароля и так далее )
sysrc mysql_enable=YES
service mysql_server start
/usr/local/bin/mysql_secure_installation

Создаем базу для Gitlab:

Заходим в MySQL
mysql -u root -p

Вводим ранее установленный пароль для root

Создаем пользователя для Gitlab
CREATE USER 'git'@'localhost' IDENTIFIED BY 'password';

Устанавливаем тип таблиц и прочие настройки
SET storage_engine=INNODB;
SET GLOBAL innodb_file_per_table=1, innodb_file_format=Barracuda, innodb_large_prefix=1;

Создаем базу
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_general_ci`;

Предоставляем привелегии на базу для пользователя git
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES, REFERENCES, TRIGGER ON `gitlabhq_production`.* TO 'git'@'localhost';

Вызодим из MySQL
\q

2) Устанавливаем Gitlab и настраиваем Redis
cd /usr/ports/www/gitlab
make config-recursive
( отмечаем MySQL )
make install
sysrc gitlab_enable=YES

Включаем чтоб Redis слушался по сокуту
echo 'unixsocket /var/run/redis/redis.sock' >> /usr/local/etc/redis.conf

Выставляем права на сокет
echo 'unixsocketperm 770' >> /usr/local/etc/redis.conf

Добавляем в автозагрузку и запускаем Redis
sysrc redis_enable=YES
service redis restart

Добавляем пользователя git в группу redis
pw groupmod redis -m git

3) Настраиваем Gitlab
Изменяем домашний каталог пользователя git
vipw -d /etc

Находим строку
git:*:211:211::0:0:gitosis user:/usr/local/git:/bin/sh

и меняем на
git:*:211:211::0:0:gitosis user:/home/git:/bin/sh

Идем в директорию с Gitlab
cd /usr/local/www/gitlab

И редактируем конфиг
vi config/gitlab.yml

Указываем доменное имя, указываем использование HTTPS, пример
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: home.deathstar.name
port: 443 # Set to 443 if using HTTPS, see installation.md#using-https for additional HTTPS configuration details
https: true # Set to true if using HTTPS, see installation.md#using-https for additional HTTPS configuration details
. Также меняем все пути где есть /usr/home на /home

Выясняем сколько ядер процессора на сервере
sysctl hw.ncpu

и правим конфиг unicorn.rb
vi config/unicorn.rb

указываем количество воркеров ( кол-во ядер + 1 )
worker_processes 3

Настройка глобальных настроек Git для пользователя git
su -l git -c "git config --global core.autocrlf input"
su -l git -c "git config --global gc.auto 0"
su -l git -c "git config --global repack.writeBitmaps true"
su -l git -c "mkdir -p /home/git/.ssh"

4) Настройка параметров базы данных GitLab
Редактируем конфиг database.yml
vi config/database.yml

Прописываем созданный ранее пароль для пользователя git в MySQL. Пример:
production:
adapter: mysql2
encoding: utf8
collation: utf8_general_ci
reconnect: false
database: gitlabhq_production
pool: 10
username: git
password: "password"
# host: localhost
socket: /tmp/mysql.sock

Даем права для пользователя git чтоб создать символические ссылки
chown git /usr/local/share/gitlab-shell

Инициализируем базу данных и активируем дополнительные функции
su -l git -c "cd /usr/local/www/gitlab && rake gitlab:setup RAILS_ENV=production"
Если получили ошибку
Could not find gem 'peek-mysql2 (~> 1.1.0)' in any of the gem sources listed in your Gemfile.
меняем в Gemfile
gem 'peek-mysql2', '~> 1.1.0', group: :mysql на gem 'peek-mysql2', '~> 1.2.0', group: :mysql
( посмотреь установленную версию можно команДой pkg info | grep rubygem-peek-mysql2 ) и повторить предыдущую команду. Отвечаем yes для создания таблиц
Do you want to continue (yes/no)? yes

chown root /usr/local/share/gitlab-shell
su -l git -c "cd /usr/local/www/gitlab && rake gitlab:env:info RAILS_ENV=production"
su -l git -c "cd /usr/local/www/gitlab && rake yarn:install gitlab:assets:clean gitlab:assets:compile RAILS_ENV=production NODE_ENV=production"
su -l git -c "cd /usr/local/www/gitlab && rake gettext:compile RAILS_ENV=production"

Запускаем Gitlab
service gitlab start

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

6) Устанавливаем и настраиваем Nginx. Получаем SSL сертификат
cd /usr/ports/www/nginx
make config-recursive
make install clean
sysrc nginx_enable=YES

Правим конфиг nginx.conf
vi /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;
include /usr/local/www/gitlab-ce/lib/support/nginx/gitlab;
}

Правим конфиг /usr/local/www/gitlab-ce/lib/support/nginx/gitlab
vi /usr/local/www/gitlab-ce/lib/support/nginx/gitlab
и прописываем имя домена в server_name и запускаем Nginx service nginx start , переходим по ссылке http://home.deathstar.name и видим Gitlab. Устанавливаем пароль для пользователя root ( админ в Gitlab ).

Получаем сертификат SSL
certbot certonly --rsa-key-size 4096 --webroot -w /usr/local/www/gitlab-ce/public/ -d home.deathstar.name и видим

- Congratulations! Your certificate and chain have been saved at:
/usr/local/etc/letsencrypt/live/home.deathstar.name/fullchain.pem
Your key file has been saved at:
/usr/local/etc/letsencrypt/live/home.deathstar.name/privkey.pem

Правим конфиг /usr/local/www/gitlab-ce/lib/support/nginx/gitlab-ssl
vi /usr/local/www/gitlab-ce/lib/support/nginx/gitlab-ssl , указывая пути к сертификатам и доменное имя в server_name
ssl_certificate /usr/local/etc/letsencrypt/live/home.deathstar.name/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/home.deathstar.name/privkey.pem;

Редактируем nginx.conf, вместо строки
include /usr/local/www/gitlab-ce/lib/support/nginx/gitlab; прописываем
include /usr/local/www/gitlab-ce/lib/support/nginx/gitlab-ssl; и перезапускаем Nginx
service nginx restart .
Заходим на http://home.deathstar.name и видим что нам перенаправило на https://home.deathstar.name


На этом установка и настройка Gitlab закончена.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.