Gitea is a lightweight, self-hosted Git service similar to GitHub or GitLab. It offers repository hosting, issue tracking, code reviews and a web-based UI. Designed for simplicity and speed, it’s ideal for teams or individuals who want to manage their own Git servers. It’s easy to deploy and low on system resources. Gitea is perfect for developers wanting version control without cloud dependency.

Setup

docker-compose.yaml

version: '3'

networks:
  docker_net:
    external: true

volumes:
  gitea:
  mysql:

services:
  server:
    image: gitea/gitea:latest
    container_name: gitea
    restart: unless-stopped
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=gitea-mysql:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=admin
      - GITEA__database__PASSWD=$MYSQL_PASSWORD
    networks:
      - docker_net
    volumes:
      - gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 3000:3000
      - 2222:22
    depends_on:
      - db

  db:
    image: mysql:8
    container_name: gitea-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
      - MYSQL_USER=admin
      - MYSQL_PASSWORD=$MYSQL_PASSWORD
      - MYSQL_DATABASE=gitea
    networks:
      - docker_net
    volumes:
      - mysql:/var/lib/mysql

  gitea-act-runner:
    image: gitea/act_runner:latest
    container_name: gitea-act-runner
    restart: unless-stopped
    volumes:
      - /root/config/act-runner:/config/act-runner
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      CONFIG_FILE: "/config/act-runner/config.yaml"
      GITEA_INSTANCE_URL: $GITEA_INSTANCE_URL
      GITEA_RUNNER_REGISTRATION_TOKEN: $RUNNER_REGISTRATION_TOKEN
      GITEA_RUNNER_NAME: "main-runner"
      GITEA_RUNNER_LABELS: ""
    networks:
      - docker_net
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G

Add Gitea runner

generate config file:

docker run --entrypoint="" --rm -it gitea/act_runner:latest act_runner generate-config > config.yaml

-> gitea runner service in portainer stack


Sources