воскресенье, 28 июля 2019 г.

Установка и настройка Gogs

Gogs - это веб-интерфейс для работы с репозиториями git. Приложение написано на языке программирования Go, не требовательно к системным ресурсам и поэтому хорошо подходит для организации репозиториев исходных текстов небольших команд разработчиков.

Сборка приложения

Устанавливаем утилиту git и компилятор языка Go из репозиториев:
# apt-get install git golang-go
Создадим каталог для сборки приложения и перейдём в него:
$ mkdir gogs
$ cd gogs
Скачиваем и собираем приложение в только что созданном каталоге. При сборке указываем тег, предписывающий включить поддержку SQLite3:
$ env GOPATH=/home/stupin/gogs/ go get github.com/gogs/gogs
$ cd src/github.com/gogs/gogs
$ env GOPATH=/home/stupin/gogs/ go build -tags sqlite

Установка и настройка запуска приложения

Создаём пользователя gogs, от имени которого будет работать приложение:
# useradd -c 'Gogs' -r -M -d /opt/gogs gogs
Создаём каталог приложения gogs и копируем в него только то, что необходимо для работы приложения:
# cd /opt
# mkdir gogs
# cd gogs
# cp -R /home/stupin/gogs/src/github.com/gogs/gogs/gogs /home/stupin/gogs/src/github.com/gogs/gogs/public /home/stupin/gogs/src/github.com/gogs/gogs/templates .
Создаём каталог для файла конфигурации:
# mkdir -p custom/conf/
Создаём файл /opt/gogs/custom/conf/app.ini с настройками приложения:
[server]
DOMAIN = stupin.su
HTTP_ADDR = 127.0.0.1
HTTP_PORT = 3000
ROOT_URL = https://stupin.su/git/
DISABLE_SSH = false
SSH_PORT = 22
OFFLINE_MODE = false
Чтобы настройки приложения в дальнейшем можно было поменять в процессе первоначальной настройки через веб-интерфейс, дадим пользователю gogs доступ к файлу конфигурации:
# chown gogs:gogs /opt/gogs/custom/conf/app.ini
Создаём service-файл /etc/systemd/system/gogs.ini для запуска/остановки приложения через systemd:
[Unit]
Description=Gogs (Go Git Service)
After=syslog.target
After=network.target
;After=postgresql.service
After=nginx.service

[Service]
Type=simple
User=gogs
Group=gogs
WorkingDirectory=/opt/gogs
ExecStart=/opt/gogs/gogs web
Restart=always
Environment=USER=gogs HOME=/opt/gogs

[Install]
WantedBy=multi-user.target
Добавляем сервис в автозапуск при загрузке операционной системы:
# systemctl enable gogs.service
И запускаем его прямо сейчас:
# systemctl start gogs.service

Настройка проксирования через nginx

Если приложение планируется запускать на выделенном домене, то для настройки проксирования внешних запросов с https на локальный адрес http при помощи nginx в общем случае нужно создать следующую конфигурацию в файле /etc/nginx/sites-enabled/gogs:
server {
    listen 80;
    server_name example.com;
    return 302 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate_key.key;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://localhost:3000;
  }
}
И подключить её командой:
# sudo ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/gogs
Я же разместил приложение на одном домене с другими приложениями, в отдельном каталоге. Для настройки впишем в файл /etc/nginx/sites-enabled/root настройки проксирования запросов с адреса https://stupin.su/git/ на адрес http://127.0.0.1/git/:
# Gogs
  location /git/ {
    proxy_redirect off;
    proxy_bind 127.0.0.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://127.0.0.1:3000/;
  }

Настройка приложения

Осталось зайти в приложение и завершить его настройку. Я создал электронный почтовый ящик gogs@stupin.su и использовал следующие настройки:
Настройки базы данных
  Тип базы данных: SQLite3
  Путь: data/gogs.db

Общие параметры Gogs
  Имя приложения: Gogs
  Путь корня репозитория: /opt/gogs/gogs-repositories
  Пользователь: gogs
  Домен: stupin.su
  SSH порт: 22
  Использовать встроенный SSH сервер: Нет
  Порт HTTP: 3000
  URL приложения: https://stupin.su/git/
  Путь к журналу: /opt/gogs/log
  Включите режим консоли: Нет

Расширенные настройки
  Настройки службы электронной почты:
    Узел SMTP: mail.stupin.su:587
    Из: gogs@stupin.su
    Электронная почта отправителя: gogs@stupin.su
    Пароль отправителя: mailbox_password
    Включить подтверждение регистрации: Да
    Разрешить почтовые уведомления: Да
  Сервер и другие настройки служб
    Включение офлайн режима: Нет
    Отключить службу Gravatar: Да
    Включить поиск внешних Аватаров: Нет
    Отключить самостоятельную регистрацию: Да
    Включить капчу: Нет
    Разрешить требовать авторизацию для просмотра страниц: Нет
  Настройки учётной записи администратора
    Имя пользователя: stupin
    Пароль:
    Подтвердить пароль:
    Электронная почта администратора: vladimir@stupin.su
После сохранения этих настроек файл /opt/gogs/custom/conf/app.ini принял следующий вид:
APP_NAME = Gogs
RUN_USER = gogs
RUN_MODE = prod

[server]
DOMAIN           = stupin.su
HTTP_ADDR        = 127.0.0.1
HTTP_PORT        = 3000
ROOT_URL         = https://stupin.su/git/
DISABLE_SSH      = false
SSH_PORT         = 22
OFFLINE_MODE     = false
START_SSH_SERVER = false

[database]
DB_TYPE  = sqlite3
HOST     = 127.0.0.1:3306
NAME     = gogs
USER     = root
PASSWD   = 
SSL_MODE = disable
PATH     = data/gogs.db

[repository]
ROOT = /opt/gogs/gogs-repositories

[mailer]
ENABLED = true
HOST    = mail.stupin.su:587
FROM    = gogs@stupin.su
USER    = gogs@stupin.su
PASSWD  = mailbox_password

[service]
REGISTER_EMAIL_CONFIRM = true
ENABLE_NOTIFY_MAIL     = true
DISABLE_REGISTRATION   = true
ENABLE_CAPTCHA         = false
REQUIRE_SIGNIN_VIEW    = false

[picture]
DISABLE_GRAVATAR        = true
ENABLE_FEDERATED_AVATAR = false

[session]
PROVIDER = file

[log]
MODE      = file
LEVEL     = Info
ROOT_PATH = /opt/gogs/log

[security]
INSTALL_LOCK = true
SECRET_KEY   = secret_key
Теперь для пущей безопасности, чтобы никто не подсмотрел в файле пароль почтового ящика mailbox_password и ключ secret_key, которым шифруются данные сеансов пользователей, поменяем права доступа к файлу конфигурации:
# chmod ug=r,o= /opt/gogs/custom/conf/app.ini
Пример страницы обзора репозиториев:

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