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, любой текстовый редактор

Порядок действий

Для переноса сервисов с другого сервера

  1. Клонировать репозиторий
  2. Выполнить cp ./.env.example ./.env и указать корректные данные для подключения
  3. Создать пользователя git, подробности описаны в блоге
  4. Выполнить 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
  5. Убедиться, что владельцем ./ является юзер git, если нет -- присвоить владение ему
  6. Запустить через docker compose up -d --build
  7. Проверить логи через docker logs -f ...
  8. Проверить веб-морды через curl -I localhost:...
  9. (Необязательно) Если есть домены:
    • Настроить 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;
          }
      }
      
    • Сделать линки и перезапустить nginx

      ln -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"

Доп. информация:

Description
Docker-окружение для запуска Gitea + Opengist
https://axenov.dev/gitea-to-docker Readme 92 KiB
Languages
Shell 100%