0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

イントロ

前回の記事で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 が導入されていること(リバースプロキシサーバー)

手順

  1. compose.ymlを作成する

    domain.tldの部分は自分の環境に合わせて変更してください。

    forgejo公式の推奨はdocker dindですが、キャッシュが死ぬほど膨れ上がったため、通常のdockerソケットをマウントする方法を採用しています。

    compose.yml
    services:
      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
    
  2. .envファイルを作成する

    FORGEJO_DB_USER=forgejo
    FORGEJO_DB_PASSWORD=your_secure_password
    
  3. コンテナを起動する

    docker compose up -d
    

Forgejoの感想

  • 良いところ
    • 完全なフリーソフトウェアとして開発が続けられている
    • コミュニティ主導で運営されている
    • 透明性のある民主的な意思決定プロセスがある
    • リリースサイクルが決まっている
      14.forgejo_schedule.png
    • Forgejo runnerはGitea runnerよりも安定している印象
    • 将来的な機能だが、フェデレーション機能が想定している模様
  • イマイチなところ
    • Giteaからの完全な分岐により、将来的な互換性が失われる可能性がある
      • Giteaにはあるけど、Forgejoにはない機能がある(ツリービューは欲しい...)

以上、Forgejoの紹介でした。
正直1ユーザーとしてはGiteaでもForgejoでも大差ないですが、minioの例もあるところから、コミュニティ主導のプロジェクトを応援したい気持ちがあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?