Публикация docker образа в self-hosted Gitea registry с помощью Gitea Act Runner

Предварительно на сервере должна быть установлена Gitea c помощью docker compose. Актуально для версии Gitea >= 1.21.8
Документация по установке. Готовое решение с Gitea от Beget.

Токен для раннера

Токен будем создавать на глобальном уровне. Переходим на страницу администратора <your_gitea.com>/admin/actions/runners

создание токена для раннера

Копируем токен в .env файл со всеми переменными для Gitea. Название для переменной устанавливаем GITEA_RUNNER_REGISTRATION_TOKEN

Docker compose файл

Добавляем новый сервис с раннером:

gitea-runner-1:
  container_name: gitea-runner-1
  restart: always
  depends_on:
    - server
  image: gitea/act_runner:latest
  environment:
    - GITEA_RUNNER_REGISTRATION_TOKEN
    - GITEA_INSTANCE_URL=${GITEA__server__ROOT_URL}
    - GITEA_RUNNER_NAME=runner1
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./runner-1-data:/data
  networks:
    - gitea

Скачиваем образ и запускаем docker compose:

docker compose pull

docker compose up -d

В админке Gitea должен отображаться созданный раннер:

раннер

Подготовка репозитория

Создаём новый репозиторий и добавляем в его настройках секреты:

добавление секретов в репозиторий

  • REGISTRY — домен с self-hosted Gitea (<your_gitea.com>)
  • TOKEN — сгенерированный токен в админке Gitea (<your_gitea.com>/user/settings/applications)

генерация токена для gitea

Gitea Action конфиг

Используются готовые Github Actions. Данный конфиг будет актуален и для Github (нужно только заменить переменные c ${{ gitea.[variable] }} на ${{ github.[variable] }}).

  • В корне проекта создаём папку .gitea и в ней папку workflows, в которой будет находиться файл-конфигурация deploy.yml:
name: Create and publish a Docker image 🚀

on:
  push:
    branches:
      # Запускает workflow при пуше в ветку master
      - master

env:
  # URL контейнерного реестра из секретов
  REGISTRY: ${{ secrets.REGISTRY }}
  # Имя образа (название репозитория в Gitea)
  IMAGE_NAME: ${{ gitea.repository }}

jobs:
  build-and-push-image:
    # Использует последний доступный образ Ubuntu для выполнения
    runs-on: ubuntu-latest

    steps:
      -
        # Шаг для получения кода из репозитория
        name: Checkout repository
        uses: actions/checkout@v4

      -
        # Шаг для входа в контейнерный реестр
        name: Log in to the Container registry
        uses: docker/login-action@v3
        with:
          # Регистрация контейнерного реестра
          registry: ${{ env.REGISTRY }}
          # Имя пользователя (автор пуша)
          username: ${{ gitea.actor }}
          # Токен для доступа к реестру из секретов
          password: ${{ secrets.TOKEN }}

      -
        # Шаг для извлечения метаданных (тегов, меток) образа
        name: Extract metadata (tags, labels) for
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

      # Шаг для сборки и отправки Docker-изображения
      - name: Build and push Docker image
        id: push
        uses: docker/build-push-action@v6
        with:
          # Контекст сборки (текущая директория)
          context: .
          # Указывает на необходимость отправки образа в реестр
          push: true
          # Теги для образа, извлеченные на предыдущем шаге
          tags: ${{ steps.meta.outputs.tags }}
           # Метки для образа, извлеченные на предыдущем шаге
          labels: ${{ steps.meta.outputs.labels }}
  • Добавляем в корень проекта простой Dockerfile для теста
  • Делаем коммит и пушим в мастер

работа экшена в репозитории gitea

Посмотреть информацию об образе можно здесь: <your_gitea.com>/<your_user>/-/packages

работа экшена в репозитории gitea

Документация container registry

Ошибка 413 Request Entity Too Large

Если во время шага Build and push Docker image в Gitea Action возникла ошибка 413 Request Entity Too Large, то нужно проверить конфиг Nginx. Размер максимально допустимого файла должен быть больше, чем передаваемый docker образ.

  • Перейти в /etc/nginx/nginx.conf
  • Установить параметр client_max_body_size <размер>M;
  • Проверить конфигурацию sudo nginx -t
  • Перезагрузить сервер sudo systemctl restart nginx

Последние обновления

© 2023 — 2026 nbeam.ru