Установка и настройка Gitea в NetBSD

В прошлом я уже описывал Установку и настройку Gitea в Debian. Теперь попробуем проделать то же самое в NetBSD.

Установка и предварительная настройка

К счастью, в pkgsrc уже есть Gitea. Установим её:

# cd /usr/pkgsrc/www/gitea
# make install

Скопируем пример скрипта инициализации:

# cp /usr/pkg/share/examples/rc.d/gitea /etc/rc.d/

Отредактируем скопированный файл /etc/rc.d/gitea, перенаправив вывод сообщений в /dev/null:

command_args="--config /usr/pkg/etc/gitea/conf/app.ini web >/dev/null 2>&1 &"

Теперь скопируем пример файла конфигурации туда, где его ожидает найти скрипт инициализации:

# cp /usr/pkg/share/examples/gitea/app.ini.sample /usr/pkg/etc/gitea/conf/app.ini

Меняем в файле конфигурации /usr/pkg/etc/gitea/conf/app.ini в секции server следующие настройки:

DOMAIN        = stupin.su
HTTP_ADDR     = 127.0.0.1
ROOT_URL      = https://stupin.su/git/

И разблокируем возможность настройки через веб-интерфейс:

INSTALL_LOCK = false

По умолчанию Gitea выводит сообщения уровня info и сообщения обо всех обращениях к страницам. Чтобы включит вывод сообщений только об ошибках и отключить сообщения об обращениях к страницам, нужно прописать в файле конфигурации в секции log следующие настройки:

LEVEL     = error
DISABLE_ROUTER_LOG = 1

Разблокируем возможность запуска Gitea, вписав в файл /etc/rc.conf соответствующую строчку:

gitea=YES

Запускаем Gitea при помощи следующей команды:

# /etc/rc.d/gitea start

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

Gitea работает от имени пользователя git и поэтому её не получится запустить для обслуживания запросов на портах ниже 1024, т.к. открывать порты с такими номерами имеют право только процессы, запущенные от имени пользователя root.

Кроме того, в Gitea отсутствует реализация протокола HTTPS и недостаёт многих других настроек, характерных для веб-сервера, поскольку фактически она является сервером-приложений, работающим по протоколу HTTP, а само приложение встроено в этот сервер.

Итак, для решения этих проблем, нам понадобится веб-сервер. Воспользуемся nginx. Для начала отключим все ненужные опции, оставив только поддержку ssl. Для этого впишем в файл /etc/mk.conf следующие опции сборки nginx:

PKG_OPTIONS.nginx=      -array-var -auth-request -dav -debug -echo -encrypted-session -flv -form-input -geoip -gtools -gzip -headers-more -http2 -image-filter -luajit -mail-proxy -memcache -naxsi -njs -pcre -perl -push -realip -rtmp -secure-link -set-misc -slice -status -stream-ssl-preread -sub -uwsgi ssl

Теперь воспользуемся pkgsrc для сборки и установки веб-сервера nginx с нужными нам опциями:

# cd /usr/pkgsrc/www/nginx/
# make install

Если приложение планируется запускать на выделенном домене, то для настройки проксирования внешних запросов с HTTPS на локальный адрес HTTP при помощи nginx в общем случае нужно прописать в файле /usr/pkg/etc/nginx/nginx.conf вовнутрь секции HTTP следующую конфигурацию:

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;
    }
}

Я же разместил приложение на одном домене с другими приложениями, в отдельном каталоге, для чего вписал в имеющуюся секцию server настройки проксирования запросов с адреса https://stupin.su/git/ на адрес http://127.0.0.1/git/:

# Gitea
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/;
}

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

Теперь можно перейти на страницу настройки https://stupin.su/git/, которую указали в переменной ROOT_URL и на странице настроек указать желаемые настройки:

Настройки базы данных
  Тип базы данных: SQLite3
  Путь: /var/db/gitea/gitea.db

Основные настройки
  Название сайта: Исходные тексты программ Владимира Ступина
  Путь корня репозитория: /var/db/gitea/gitea-repositories
  Корневой путь Git LFS: /var/db/gitea/data/lfs
  Запуск от имени пользователя: git
  Домен SSH сервера: stupin.su
  Порт SSH сервера: 22
  Gitea HTTP порт: 3000
  Базовый URL-адрес Gitea: https://stupin.su/git/
  Путь к журналу: /var/log/gitea

Расширенные настройки
  Настройки Email
    Узел SMTP: mail.stupin.su:587
    Отправлять Email от имени: gitea@stupin.su
    SMTP логин: gitea@stupin.su
    SMTP пароль: mailbox_password
    Требовать подтверждения по электронной почте для регистрации: Да
    Разрешить почтовые уведомления: Да
  Сервер и настройки внешних служб
    Включить локальный режим: Нет
    Отключить Gravatar: Да
    Включить федеративные аватары: Нет
    Включение входа через OpenID: Нет
    Отключить самостоятельную регистрацию: Да
    Разрешить регистрацию только через сторонние сервисы: Нет
    Включить саморегистрацию OpenID: Нет
    Включить CAPTCHA: Нет
    Требовать авторизации для просмотра страниц: Нет
    Скрывать адреса электронной почты по умолчанию: Нет
    Разрешить создание организаций по умолчанию: Да
    Включение отслеживания времени по умолчанию:  Да
  Скрытый почтовый домен:
  Настройки учётной записи администратора
    Логин администратора: stupin
    Пароль: 
    Подтвердить пароль:
    Адрес эл. почты: vladimir@stupin.su

После сохранения этих настроек файл /usr/pkg/etc/gitea/conf/app.ini, за исключением комментариев, примет следующий вид:

APP_NAME = Исходные тексты программ Владимира Ступина
RUN_USER = git
RUN_MODE = prod

[database]
DB_TYPE  = sqlite3
HOST     = 127.0.0.1:3306
NAME     = gitea
PASSWD   = 
PATH     = /var/db/gitea/gitea.db
SSL_MODE = disable
USER     = root
SCHEMA   = 
CHARSET  = utf8

[indexer]
ISSUE_INDEXER_PATH = /var/db/gitea/indexers/issues.bleve

[log]
ROOT_PATH = /var/log/gitea
MODE      = file
LEVEL     = info

[mailer]
ENABLED   = true
PROTOCOL  = smtp+starttls
SMTP_ADDR = mail.stupin.su
SMTP_PORT = 587
FROM      = gitea@stupin.su
USER      = gitea@stupin.su
PASSWD    = mail_password

[picture]
AVATAR_UPLOAD_PATH      = /var/db/gitea/data/avatars
DISABLE_GRAVATAR        = true
ENABLE_FEDERATED_AVATAR = false

[repository]
ROOT        = /var/db/gitea/gitea-repositories
SCRIPT_TYPE = sh

[repository.upload]
TEMP_PATH = /var/db/gitea/data/tmp/uploads

[security]
INSTALL_LOCK   = true
INTERNAL_TOKEN = xxx
SECRET_KEY     = xxx

[session]
PROVIDER        = file
PROVIDER_CONFIG = /var/db/gitea/data/sessions

[server]
DOMAIN           = stupin.su
HTTP_ADDR        = 127.0.0.1
HTTP_PORT        = 3000
ROOT_URL         = https://stupin.su/git/
DISABLE_SSH      = false
SSH_DOMAIN       = stupin.su
SSH_PORT         = 22
OFFLINE_MODE     = false
APP_DATA_PATH    = /var/db/gitea/data
LFS_START_SERVER = true
LFS_JWT_SECRET   = xxx

[lfs]
PATH = /var/db/gitea/data/lfs

[service]
REGISTER_EMAIL_CONFIRM            = true
ENABLE_NOTIFY_MAIL                = true
DISABLE_REGISTRATION              = true
ENABLE_CAPTCHA                    = false
REQUIRE_SIGNIN_VIEW               = false
ALLOW_ONLY_EXTERNAL_REGISTRATION  = false
DEFAULT_KEEP_EMAIL_PRIVATE        = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING       = true
NO_REPLY_ADDRESS                  = 

[oauth2]
JWT_SECRET = xxx

[openid]
ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = false

Дополнительная настройка

По умолчанию на стартовой странице выводится текст из переменной APP_NAME очень крупным шрифтом. В сочетании с моим именем это производит впечатление нарциссизма :) К счастью, в качестве стартовой страницы можно использовать любую страницу приложения.

Поскольку я использую gitea в основном как репозиторий моих личных проектов, то логично будет использовать в качестве стартовой страницы список моих репозиториев. Для этого я вписал в файл конфигурации /usr/pkg/gitea/conf/app.ini в секции [server] опцию LANDING_PAGE:

LANDING_PAGE = /stupin/

Как вариант, можно использовать ту же страницу, открытую на вкладке с историей последних действий пользователя:

LANDING_PAGE = /stupin/?tab=activity

Дополнительные материалы

Gitea Administration / Configuration Cheat Sheet