Chienomi

Gitホスティングプラットフォーム Forgejoを建てる

Live With Linux::server

このたび、はねずさんが校正やってくれるというので、共同作業環境としてForgejoを建てた。

こちらはプライベートなので公開はしないが、Forgejo構築と運営の話をしておこう。

Forgejoとは

Forgejoは(GitLabのような)セルフホスト可能なGitホスティングプラットフォームソフトウェアで、GogsのフォークであるGiteaのフォーク。

CodebergはForgejoをカスタマイズしたものを使っているらしい。

Goで書かれている。

非常にコンパクトに動作させることが可能。

構築

ForgejoはバイナリとDockerが用意されているが、よほど特別な理由がなければバイナリ推奨の感じ。 実際、私が試したところバイナリのほうが良かった。

バイナリのサイズは100MB程度と小さい。

まず前提として公式のInstallationに従うものとし、この節ではあくまで補足に留める。

Forgejoバイナリは/usr/local/bin/forgejoであることが想定されている。 これは大人しく従ったほうが良い。

Forgejoが使うディレクトリは/etc/forgejo/var/lib/forgejogitユーザーでアクセスする。

Database Preparationの節だが、sqliteを使う場合は必要ない。 sqliteは10ユーザー以下推奨らしい。 sqliteが使えるのは素晴らしい長所。

HTTPポートは初期設定で設定できるのだが、初期状態では3000番ポートで起動するため、3000番ポートを開けておく必要あり。 初期起動時に/etc/forgejo/app.iniが生える。ここをいじる機会は割とある。

ここで設定するドメインやポートは、UI表示上の意味もあるが、揃えないとうまく機能しない。 SSHのポートはホストのsshdのポートである。 ForgejoがSSHサーバーをlistenしたりはしない。

Archlinuxではgitユーザーはgitパッケージで生えるが、ホームディレクトリを/home/gitに変更することと、ログインシェルを/bin/bashに変更することが必要。

git:x:971:971:git daemon user:/home/git:/bin/bash

ここは本当はgitユーザーを流用しないほうがいいと思う。目的が違うので。

gitユーザーを使わない場合は、まずapp.iniRUN_USERを指定

RUN_USER = forgejo

ユーザーを作る

groupadd -g 2001 forgejo
useradd -u 2001 -g 2001 -m -s /bin/bash -r forgejo

パーミッションの変更

chown -R forgejo:forgejo /etc/forgejo /var/lib/forgejo

Systemdユニットはgitユーザー前提になっているので、これも全部直しておく。

追加の設定

app.iniは記載量が少なく何が設定できるのかわかりにくいが、フルで記載されたものがリポジトリに含まれておりチートシートもある。

SSHでRSAを禁止する:

[ssh.minimum_key_sizes]
; Define allowed algorithms and their minimum key length (use -1 to disable a type)
ED25519 = 256
ECDSA = 256
RSA = -1
DSA = -1

パスワードを最低16文字、小文字・大文字・数字を必須にする:

[security]
MIN_PASSWORD_LENGTH = 16
PASSWORD_COMPLEXITY = lower,upper,digit

デフォルトのデフォルトをmasterに

[repository]
DEFAULT_BRANCH = master

曖昧な文字

に対して曖昧な文字だと警告してくる。

意図的なら無視しろと言うが、無視する手段は用意されていない。 また、「エスケープ」を押すとio is not iterableというエラーになる。

負荷

私の環境だと消費メモリは200MB以下。非常に軽い。

感想

個人的には共同作業ではGitHubは相当使いにくいと思っていて、かといってGitLabは進め方の点で良くないと思う。 このあたりが一番快適なのはBitBucketだ。

ForgejoはGitHubやGitLabより良いと思う。

UIの見た目はGitLabに似ているが、構成はGitHubに近い。 最大単位は組織(またはユーザー)で、その下がリポジトリ。 「プロジェクト」という機能があるが、これはissue等をまとめたりする機能。

リポジトリ別でWikiがある。 「曖昧文字」問題で使い勝手はいまいちだけど、Wikiがあること自体は普通に便利。 deploy手順とか、contribute手順とかをまとめておける。

リリースのほかにパッケージという機能がある。

プルリクエストの画面はGitHubと似た感じ。 diffはわずかにForgejoのほうが見やすいと思う。 レビューワークフローも多少使いやすい。 でも、BitBucketのようにコードありきの形式のほうが好きだなぁ。

エクスプローラーはインスタンス全体から検索するものなので、そんなに使いやすくはない。

でもまぁ、GitHubより使いやすいし、欲しい機能はだいたいあるからとても良いと思う。 これで200MBで済むなら超良い。sqliteも含めてコンパクトでリソースも使わないので、私は相当高く評価している。