Gitea は、Gitリポジトリのホスティング、コードレビュー、課題管理、Wiki、パッケージレジストリ、GitHub Actions互換のCI/CDまでを1つのソフトウェアにまとめた、自己ホスト型の開発プラットフォームです。Go言語で書かれており、Linux・macOS・Windowsなど幅広い環境で単一バイナリとして動作します。READMEには「painless self-hosted all-in-one software development service」と明記されています。
エントリーポイントは cmd/main.go で、urfave/cli/v3を使って web・admin・actions・doctor・dump などのサブコマンドに処理を振り分けます。cmd/admin.go や cmd/actions.go を見ると、各サブコマンドが models 層やservices層の関数を直接呼び出す構成だとわかります。フロントエンドはVue・TypeScriptで書かれ、pnpmとwebpackでビルドされたアセットが public/assets に置かれ、バイナリにbindataとして埋め込まれます。Dockerfileは2段階ビルドで、frontend-buildステージでpnpm installとmake frontendを実行し、build-envステージでmake backendによりGoバイナリを生成します。実行時イメージはs6-svscanでgiteaプロセスとopensshを監視するs6構成になっています(docker/root/etc/s6配下)。go.modには blevesearch、xorm系ORM相当のDBドライバ、meilisearch、prometheusクライアントなど多数の依存が含まれ、検索・メトリクス・複数DB対応の作り込みがうかがえます。
- STEP 01
まずDockerfileを見ると、frontend-buildとbuild-envの2段階でpnpm installとmake backendが実行されるため、ビルドにはGo1.27とNode系ツールが必要だとわかります。
- STEP 02
docker pullやビルド後にコンテナを起動すると、docker/root/etc/s6の設定に従いs6-svscanがgiteaプロセスとopensshを同時に監視し、ポート22と3000が公開されます。
- STEP 03
初回アクセス時はGiteaのインストールウィザード画面が表示され、DB接続情報や管理者アカウントを入力する必要があります(custom/conf/app.example.iniが設定の雛形になります)。
- STEP 04
cmd/admin.goのnewUserCommandやnewAuthCommandから、CLI経由でもユーザー作成や認証ソース(LDAP・OAuth・SMTP)の追加ができることが確認できます。
- STEP 05
cmd/actions.goのgenerate-runner-tokenコマンドを使うと、GitHub Actions互換のランナーを登録するためのトークンを発行できます。
- STEP 06
開発モードでは.air.tomlの設定に従い、air経由でGoファイル変更時にmake backendが自動再実行され、ホットリロード開発ができます。
ビルドすると、Git・SSH・Web UI・Actions・パッケージレジストリを一体化した単一のgiteaバイナリまたはDockerイメージが手に入ります。起動後はブラウザからリポジトリ作成、Issue・PR管理、GitHub Actions互換ワークフローの実行、npm・Maven・Dockerレジストリ相当のパッケージ公開までを1つの管理画面で行えます。CLI(cmd/以下)を使えば、ユーザー管理や認証ソース設定、ランナートークン発行などの運用作業も自動化できます。
go.modの依存が数百件規模で、フロントエンドビルドにpnpm、バックエンドビルドにGo1.27toolchainが必要なため、ビルド環境の準備自体に一定の手間がかかります。
本番運用では、SQLiteだけでなくMySQL・PostgreSQL・MSSQLなど外部DBの設定が前提になっている箇所が多く、custom/conf/app.example.iniの設定項目を理解する必要があります。
Dockerイメージはrootとrootless版の2種類が用意されており、権限モデルの違いを把握してから選ぶ必要があります。
READMEやDockerfileから機能と構成の全体像は把握できますが、実際のWeb UIの挙動やActionsランナーとの連携動作は、ソースコード読解だけでは細部まで確認しきれません。
GitHub・GitLabのような機能を自社サーバーに完全に持ち込みたいチームや、軽量な単一バイナリでGitホスティングを運用したい個人・小規模組織に向いています。cmd/以下のCLI実装やDockerfile・s6構成、go.modの依存構成から、機能範囲とビルド・運用の仕組みは高い精度で把握できます。ただし実際のUI操作感やActionsランナーとの結合部分の細かな挙動までは、提供された資料だけでは断定できない部分が残ります。