# Gitea + OpenGist docker environment Подробности: https://axenov.dev/gitea-to-docker Ниже краткая выжимка этого поста. Стек: - git, ssh, scp, nginx, certbot, docker, docker-compose-plugin, любой текстовый редактор - gitea (latest) + mariadb 10.6 - opengist (latest) + mariadb 10.6 ## Порядок действий ## Для переноса сервисов с другого сервера 1. Клонировать репозиторий 2. Выполнить `cp .env.example .env` и указать корректные данные для подключения 3. Перенос Gitea: 1. Потушить сервис (не сервер) 2. Скопировать существующий конфиг в `./gitea/app.ini` и скорректировать по необходимости 3. Снять дамп mysql и положить в `./gitea/dump.sql.gz` 4. Директории с данными скопировать в `./gitea/data` 4. Перенос Gitea Runner: * Скопировать старый конфиг в `./runner/config.yaml` и скорректировать по необходимости ИЛИ * Выполнить `cp ./runner/config.example.yaml ./runner/config.yaml` и скорректировать по необходимости 5. Перенос OpenGist: 1. Потушить сервис (не сервер) 2. Скопировать существующий конфиг скопировать в `./opengist/opengist.yml` и скорректировать по необходимости 3. Снять дамп mysql и положить в `./opengist/dump.sql.gz` 4. Директории с данными скопировать в `./opengist/data` 6. Убедиться, что владельцем `./` является юзер с `UID`=`1000`, если не -- `cd ..; chown -R 1000:1000 gitea; cd -` 7. Запустить через `docker compose up -d --build` 8. Проверить логи через `docker logs -f ...` 9. Проверить веб-морды через `curl -I localhost:...` Опционально, если есть домены: 10. Настроить nginx на хосте как реверс-прокси из внешки в контейнеры: (поменять `server_name` и порты на свои) 1. `/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; } } ``` 2. `/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; } } ``` 3. Сделать линки и перезапустить `nginx` ```shell 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 ``` 11. Переключить DNS на новый IP 12. Проверить веб-морды по доменам через `curl -i ...` 13. Настроить SSL через `certbot` ## Для деплоя с нуля Шаги 3-4 можно опустить. ## Gitea + ssh через хост Проблема в том, что порт openssh на хосте занят (по дефолту 22), пробросить порт напрямую из докера не получится. 1. Запомнить абсолютный путь до скрипта [./gitea/gitea.sh](./gitea/gitea.sh) (например, `/home/user/gitea/gitea/gitea.sh`) 2. Назначить его оболочкой для юзера `git` ```shell usermod -s /home/user/gitea/gitea/gitea.sh git ``` 3. Создать конфиг `/etc/ssh/sshd_config.d/gitea.conf` следующее: ```shell Match User git AuthorizedKeysCommandUser git AuthorizedKeysCommand /usr/bin/docker exec -i gitea /usr/local/bin/gitea keys -e git -u %u -t %t -k %k ``` 4. Перезапустить демона через `systemctl restart sshd` ## Настройка Gitea Actions (runner) При использовании Gitea версии ниже 1.21.0, необходимо в `./gitea/app.ini` добавить строчки: ```ini [actions] ENABLED=true ``` Для начала нужно запустить всю среду. Чтобы раннер заработал, его нужно зарегистрировать в Gitea с помощью токена регистрации. Они могу быть разными. Получить его можно с помощью мануалов: * https://docs.gitea.com/usage/actions/quickstart * https://docs.gitea.com/usage/actions/act-runner#register-the-runner Базово, для создания глобального раннера, нужно зайти в [список раннеров](http://localhost:8080/-/admin/actions/runners) и найти кнопку в правом верхнем углу. Токен из этого поля нужно скопировать в файл [`.env`](.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` надо указать имя сети: ```yaml #... container: network: "gitea_network" #... ``` Доп. информация: * https://docs.gitea.com/usage/actions/quickstart * https://docs.gitea.com/usage/actions/act-runner#start-the-runner-using-docker-compose