diff --git a/deploy/gitea-runner.compose.README.md b/deploy/gitea-runner.compose.README.md new file mode 100644 index 0000000..317b4d6 --- /dev/null +++ b/deploy/gitea-runner.compose.README.md @@ -0,0 +1,87 @@ +# 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` вручную не редактируйте. diff --git a/deploy/gitea-runner.compose.yaml b/deploy/gitea-runner.compose.yaml new file mode 100644 index 0000000..1f02ec6 --- /dev/null +++ b/deploy/gitea-runner.compose.yaml @@ -0,0 +1,36 @@ +services: + gitea: + image: gitea/gitea:latest + container_name: gitea + restart: unless-stopped + environment: + PUID: "1000" + PGID: "1000" + TZ: ${TZ:-Asia/Krasnoyarsk} + ports: + - "3232:22" + volumes: + - ${GITEA_DATA_DIRECTORY:-/srv/gitea}:/data + networks: + - kycb_internal + + runner: + image: docker.io/gitea/act_runner:latest + container_name: gitea-runner + restart: unless-stopped + depends_on: + - gitea + environment: + GITEA_INSTANCE_URL: ${GITEA_INSTANCE_URL:-http://gitea:3000/} + GITEA_RUNNER_REGISTRATION_TOKEN: ${GITEA_RUNNER_REGISTRATION_TOKEN:?Set GITEA_RUNNER_REGISTRATION_TOKEN in .env} + GITEA_RUNNER_NAME: ${GITEA_RUNNER_NAME:-rf4-runner-01} + GITEA_RUNNER_LABELS: ${GITEA_RUNNER_LABELS:-ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest} + volumes: + - ${GITEA_RUNNER_DATA_DIRECTORY:-/srv/gitea-runner}:/data + - /var/run/docker.sock:/var/run/docker.sock + networks: + - kycb_internal + +networks: + kycb_internal: + external: true