Gitea + OpenGist docker environment
Подробности: https://axenov.dev/gitea-to-docker
Ниже краткая выжимка этого поста.
Стек:
- gitea (latest) + mariadb 10.6
- opengist (latest) + mariadb 10.6
- git, docker, docker-compose-plugin; могут понадобиться ssh, scp, nginx, certbot, любой текстовый редактор
Порядок действий
Для переноса сервисов с другого сервера
- Клонировать репозиторий
- Выполнить
cp ./.env.example ./.envи указать корректные данные для подключения - Создать пользователя git, подробности описаны в блоге
- Выполнить
cp ./gitea/app.example.ini ./gitea/app.iniи указать необходимые настройки
ИЛИ- (Необязательно) Для переноса инстанса Gitea:
- Потушить сервис (не сервер)
- Выполнить
cp ./compose.override.yml.example ./compose.override.yml - Скопировать существующий конфиг в
./gitea/app.iniи скорректировать по необходимости - Снять дамп mysql и положить в
./gitea/dump.sql.gz - Директории с данными скопировать в
./gitea/data
- (Необязательно) Для переноса инстанса Gitea Runner:
- Выполнить
cp ./compose.override.yml.example ./compose.override.yml, если ещё не - Скопировать старый конфиг в
./runner/config.yamlи скорректировать по необходимости
ИЛИ - Выполнить
cp ./runner/config.example.yaml ./runner/config.yamlи скорректировать по необходимости
- Выполнить
- (Необязательно) Для переноса инстанса OpenGist:
- Потушить сервис (не сервер)
- Выполнить
cp ./compose.override.yml.example ./compose.override.yml, если ещё не - Скопировать существующий конфиг скопировать в
./opengist/opengist.ymlи скорректировать по необходимости - Снять дамп mysql и положить в
./opengist/dump.sql.gz - Директории с данными скопировать в
./opengist/data
- (Необязательно) Для переноса инстанса Gitea:
- Убедиться, что владельцем
./является юзерgit, если нет -- присвоить владение ему - Запустить через
docker compose up -d --build - Проверить логи через
docker logs -f ... - Проверить веб-морды через
curl -I localhost:... - (Необязательно) Если есть домены:
-
Настроить nginx на хосте как реверс-прокси из внешки в контейнеры:
(поменятьserver_nameи порты на свои)Файл: /etc/nginx/sites-available/gitea.conf
server { listen 80; listen [::]:80; server_name git.example.com access_log /var/log/nginx/gitea-access.log; error_log /var/log/nginx/gitea-error.log; client_max_body_size 100M; location / { proxy_pass http://127.0.0.1:8080; } }Файл: /etc/nginx/sites-available/opengist.conf
server { listen 80; listen [::]:80; server_name gist.example.com access_log /var/log/nginx/opengist-access.log; error_log /var/log/nginx/opengist-error.log; client_max_body_size 100M; location / { proxy_pass http://127.0.0.1:8081; } } -
Сделать линки и перезапустить
nginxln -s /etc/nginx/sites-available/gitea.conf /etc/nginx/sites-enabled/gitea.conf ln -s /etc/nginx/sites-available/opengist.conf /etc/nginx/sites-enabled/opengist.conf unlink /etc/nginx/sites-enabled/default systemctl restart nginx -
Переключить DNS на новый IP
-
Проверить веб-морды по доменам через
curl -i ... -
(Необязательно) Настроить SSL через
certbot
-
Gitea + ssh через хостовый порт
Выполнить скрипт ./gitea/config-gitea-ssh.sh.
Настройка Gitea Actions (runner)
При использовании Gitea версии ниже 1.21.0, необходимо в ./gitea/app.ini добавить строчки:
[actions]
ENABLED=true
Для версий выше этого делать не нужно.
Для начала нужно запустить всю среду.
Чтобы раннер заработал, его нужно зарегистрировать в Gitea с помощью токена регистрации.
Раннеры могут работать в разных скоупах: на уровне пользователя, репозитория, организации или глобально.
Базово, для создания глобального раннера, нужно зайти в раздел админки со списком раннеров и найти кнопку в правом верхнем углу.
Токен из этого поля нужно скопировать в файл .env в переменную RUNNER_REG_TOKEN и пересоздать контейнер gitea-runner.
В логах раннера должны быть подобные строчки:
level=info msg="Registering runner, arch=amd64, os=linux, version=v0.2.11."
level=debug msg="Successfully pinged the Gitea instance server"
level=info msg="Runner registered successfully."
SUCCESS
time="2025-04-08T02:14:17Z" level=info msg="Starting runner daemon"
time="2025-04-08T02:14:17Z" level=info msg="runner: gitea-runner, with version: v0.2.11, with labels: [ubuntu-latest ubuntu-22.04 ubuntu-20.04], declare successfully"
В списке раннеров должен отобразиться gitea-runner в зелёном статусе "Простаивает".
Если во время выполнения экшена actions/checkout@v4 возникает ошибка Could not resolve host, то в конфиге ./runner/config.yaml надо указать имя сети:
container:
network: "gitea_network"
Доп. информация:
- https://axenov.dev/gitea-to-docker
- https://docs.gitea.com/installation/install-with-docker-rootless
- https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini
- https://docs.gitea.com/administration/config-cheat-sheet
- https://docs.gitea.com/usage/actions/quickstart
- https://docs.gitea.com/usage/actions/act-runner
