イントロ
前回の記事でGiteaを紹介しましたが、今回はそのGiteaからフォークされたForgejoを紹介します。
Giteaが創業者から営利企業へ移管されたことにより、色々揉めることも多かったです。そのためForgejoというフォークが誕生しました。
Forgejoは完全なフリーソフトウェアとして開発が続けられており、コミュニティ主導で運営されています。
当初はgiteaとの互換性を保った開発が進められていましたが、ハードフォークに移行した結果、Giteaからのcherry-pickが終了しました。
Gitea側のリファクタリングによる競合や、Forgejo独自の機能追加による競合などが多数発生したためです。
透明性のある民主的な意思決定プロセスもあるところから、Forgejoをメインに利用しています。
Forgejoの使い方
環境情報
$ 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の部分は自分の環境に合わせて変更してください。forgejo公式の推奨はdocker dindですが、キャッシュが死ぬほど膨れ上がったため、通常のdockerソケットをマウントする方法を採用しています。
compose.ymlservices: forgejo: image: codeberg.org/forgejo/forgejo:13 container_name: forgejo restart: always volumes: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro expose: - 3000 ports: - 2222:22 environment: FORGEJO___database__DB_TYPE: postgres FORGEJO___database__HOST: db:5432 FORGEJO___database__NAME: forgejo FORGEJO___database__USER: ${FORGEJO_DB_USER:-forgejo} FORGEJO___database__PASSWD: ${FORGEJO_DB_PASSWORD:-forgejo} USER_UID: 1000 USER_GID: 1000 FORGEJO___webhook__ALLOWED_HOST_LIST: "*" depends_on: - db labels: traefik.enable: true traefik.http.services.forgejo.loadbalancer.server.port: 3000 traefik.http.routers.forgejo.rule: Host(`forgejo.domain.tld`) traefik.http.routers.forgejo.entrypoints: websecure traefik.http.routers.forgejo.tls: true traefik.http.routers.forgejo.tls.certResolver: cloudflare traefik.docker.network: traefik-network glance.name: Forgejo glance.icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/forgejo.png glance.url: https://forgejo.domain.tld/ glance.description: Forgejo git server glance.id: forgejo networks: - traefik-network - forgejo-database - runner-network forgejo-runner: image: code.forgejo.org/forgejo/runner:12 container_name: forgejo-runner restart: always links: - forgejo environment: DOCKER_HOST: unix:///var/run/docker.sock volumes: - /var/run/docker.sock:/var/run/docker.sock:rw - ./runner:/data user: 1000:1000 group_add: - 996 command: '/bin/sh -c "sleep 10; forgejo-runner --config /data/config.yml daemon"' networks: - runner-network labels: glance.name: Forgejo Runner glance.parent: forgejo db: image: postgres:14 restart: always container_name: forgejo-db environment: POSTGRES_USER: ${FORGEJO_DB_USER:-forgejo} POSTGRES_PASSWORD: ${FORGEJO_DB_PASSWORD:-forgejo} POSTGRES_DB: forgejo volumes: - ./postgres:/var/lib/postgresql/data networks: - forgejo-database - postgres-backup-network labels: glance.name: Forgejo Database glance.parent: forgejo networks: traefik-network: external: true forgejo-database: name: forgejo-database driver: bridge external: false runner-network: name: runner-network driver: bridge external: false postgres-backup-network: external: true -
.envファイルを作成するFORGEJO_DB_USER=forgejo FORGEJO_DB_PASSWORD=your_secure_password -
コンテナを起動する
docker compose up -d
Forgejoの感想
- 良いところ
- イマイチなところ
- Giteaからの完全な分岐により、将来的な互換性が失われる可能性がある
- Giteaにはあるけど、Forgejoにはない機能がある(ツリービューは欲しい...)
- Giteaからの完全な分岐により、将来的な互換性が失われる可能性がある
以上、Forgejoの紹介でした。
正直1ユーザーとしてはGiteaでもForgejoでも大差ないですが、minioの例もあるところから、コミュニティ主導のプロジェクトを応援したい気持ちがあります。
