# Gitea + Actions runner Этот compose сохраняет существующие данные Gitea в `/srv/gitea` и хранит регистрацию runner отдельно в `/srv/gitea-runner`. Он рассчитан на перенос существующего контейнера, созданного через `docker run`. ## Подготовка На сервере, где работает Gitea, проверьте сеть и контейнер: ```bash docker network inspect kycb_internal >/dev/null docker inspect gitea --format '{{json .Mounts}}' docker inspect gitea --format '{{json .Config.Env}}' ``` В каталоге рядом с compose создайте `.env` с правами `600`: ```dotenv TZ=Asia/Krasnoyarsk GITEA_DATA_DIRECTORY=/srv/gitea GITEA_RUNNER_DATA_DIRECTORY=/srv/gitea-runner # Для runner внутри той же Docker-сети: GITEA_INSTANCE_URL=http://gitea:3000/ GITEA_RUNNER_NAME=rf4-runner-01 GITEA_RUNNER_LABELS=ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest GITEA_RUNNER_REGISTRATION_TOKEN=вставьте_одноразовый_токен_из_Gitea ``` Токен создаётся в `Repository → Settings → Actions → Runners → Create new runner`. Он не должен попадать в Git, shell history или compose-файл. ## Переключение без потери данных Сначала остановите старый контейнер, но не удаляйте каталог данных: ```bash docker stop gitea docker rename gitea gitea-before-compose sudo install -d -m 700 /srv/gitea-runner sudo chmod 600 .env ``` Запустите compose из каталога, где лежат `.env` и `gitea-runner.compose.yaml`: ```bash docker compose -f gitea-runner.compose.yaml config docker compose -f gitea-runner.compose.yaml up -d docker compose -f gitea-runner.compose.yaml ps docker compose -f gitea-runner.compose.yaml logs -f runner ``` После запуска в Gitea runner должен иметь состояние `Idle`/`Online`. Проверка файлов регистрации: ```bash sudo find /srv/gitea-runner -maxdepth 2 -type f -print ``` Старый контейнер оставьте остановленным до проверки web UI, SSH и Actions. Если нужно вернуться назад: ```bash docker compose -f gitea-runner.compose.yaml down docker rename gitea-before-compose gitea docker start gitea ``` Команда `down` удаляет только контейнеры compose, а `/srv/gitea` и `/srv/gitea-runner` не удаляет. ## Важные условия `GITEA_INSTANCE_URL` должен быть доступен из контейнера runner. Если Gitea работает за reverse proxy и внутренний адрес `http://gitea:3000/` не подходит, укажите внешний `ROOT_URL`, доступный с этого сервера. Runner получает доступ к `/var/run/docker.sock`, потому что workflow проекта запускает Docker Compose, PostgreSQL service и Playwright. Такой runner должен исполнять только доверенный код: доступ к socket фактически даёт заданиям административный доступ к Docker-хосту. Если runner уже регистрировался с другим label, удалите старую регистрацию в Gitea и используйте новый каталог `/srv/gitea-runner`; файл регистрации внутри `/data` вручную не редактируйте.