イントロ
セルフホスト & エンジニアといえば、Gitサーバーを立てたくなるものです。
代表的なものはGitLabですが、正直一人で使う分には重すぎます。。。
ということで、Gogsからフォークされた軽量GitサーバーであるGiteaを導入しました。
当然、GitHubでいいんじゃないの?という声が聞こえてきますが、プライベートリポジトリにさえデータを起きたくない、あるいは色々テストする上でローカルにある方が便利、GitHub Actionsの記載で色々試したい(Gitea Runner)と諸々の理由で立ち上げました。
なお、現在は14日目のアドベントカレンダーで紹介するForgejoをメインにしています。Giteaはバージョンアップの時に試す程度です。
Giteaの使い方
環境情報
$ docker version
Client: Docker Engine - Community
Version: 29.1.3
API version: 1.52
Go version: go1.25.5
Git commit: f52814d
Built: Fri Dec 12 14:49:51 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 29.1.3
API version: 1.52 (minimum version 1.44)
Go version: go1.25.5
Git commit: fbf3ed2
Built: Fri Dec 12 14:49:51 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v2.2.0
GitCommit: 1c4457e00facac03ce1d75f7b6777a7a851e5c41
runc:
Version: 1.3.4
GitCommit: v1.3.4-0-gd6d73eb8
docker-init:
Version: 0.19.0
GitCommit: de40ad0
前提条件
- Docker がインストールされていること
- Traefik が導入されていること(リバースプロキシサーバー)
手順
-
compose.ymlを作成するdomain.tldは自分のドメインに置き換えてください。初期の頃に立ち上げたcontainerというのもあり、DB Passwordとかは直記載になっています。git管理する場合は.envファイルなどで管理してください。services: gitea: image: gitea/gitea:1.25 restart: always container_name: gitea volumes: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - 3000:3000 - 2222:22 environment: GITEA__database__DB_TYPE: postgres GITEA__database__HOST: db:5432 GITEA__database__NAME: gitea GITEA__database__USER: gitea GITEA__database__PASSWD: gitea USER_UID: 1000 USER_GID: 1000 GITEA__webhook__ALLOWED_HOST_LIST: "*" depends_on: - db dns: - 1.1.1.1 labels: traefik.enable: true traefik.http.services.gitea.loadbalancer.server.port: 3000 traefik.http.routers.gitea.rule: Host(`gitea.domain.tld`) traefik.http.routers.gitea.entrypoints: websecure traefik.http.routers.gitea.tls: true traefik.http.routers.gitea.tls.certResolver: cloudflare traefik.docker.network: traefik-network networks: - traefik-network - service-gitea - runner-network docker: image: docker:dind-rootless container_name: gitea-docker restart: always privileged: true environment: DOCKER_TLS_CERTDIR: /certs expose: - 2376 volumes: - ./gitea-certs:/certs networks: runner-network: {} gitea-runner: image: gitea/act_runner:0.2.13 container_name: gitea-runner restart: always environment: GITEA_INSTANCE_URL: http://gitea:3000 GITEA_RUNNER_REGISTRATION_TOKEN: zDESEykTYk0iZgjhaqqvwiM6eR5t9aUeUqQgV7OB GITEA_RUNNER_NAME: default-runner DOCKER_TLS_CERTDIR: /certs DOCKER_CERT_PATH: /certs/client DOCKER_TLS_VERIFY: 1 DOCKER_HOST: tcp://docker:2376 volumes: - ./runner:/data - ./gitea-certs:/certs depends_on: - gitea - docker networks: runner-network: {} db: image: postgres:14 restart: always container_name: gitea-db environment: POSTGRES_USER: gitea POSTGRES_PASSWORD: gitea POSTGRES_DB: gitea volumes: - ./postgres:/var/lib/postgresql/data networks: - service-gitea networks: service-gitea: runner-network: name: runner-network external: false traefik-network: external: true -
Dockerコンテナを起動する
docker compose -f compose.yml up -d
Giteaの感想
-
いいところ
-
イマイチなところ
- labelerなどはGitHubでしか使えない
- GitHub Actionsと互換性がない部分もある
以上、Giteaの紹介でした。
冒頭で記載したForgejoに移行した理由については次の記事で。
クラウドもあるよ!(これが原因でForgejoが誕生したり...)
