blog-articles/article/tech/how-to-setup-gitea.md
2024-09-03 07:08:18 +09:00

3.8 KiB
Raw Blame History

title released_at updated_at tags image publish
【おうちGit鯖】Giteaを立てよう 2024-06-30T00:00:00+09:00 2024-09-03T07:08:00+09:00
Linux
Server
自宅鯖
Docker
/uploads/ public

Giteaを始めよう


自分のサーバーにGiteaを立てたよという話です。 Giteaとは、GithubやGitlabなどのGitホスティングサービスの一つで、Giteaはオープンソースで、公式のgitea.comと(ほぼ)同様のものを自分でホストすることができます。 issue管理や、プロジェクト、Actions、Wiki等のリポジトリマネジメントに使える機能はGitlab にも同様のものがありますが、Gitlabと比べると構築がかんたんで、消費するリソース主にメモリーが少ないらしいのでGiteaを選択しています。

宅鯖Giteaの意義

自分のリソースなので、好きなように使えることが一番嬉しいです。どんなにカスなリポジトリを立てても、咎める人間は存在しません。 また、個人的な思想として中央集権的なシステムが好きではないので、自分のプロジェクトを分散管理したいなー、なんて欲求がそこはかとなくあったのです。まあ、自分はGithub Educationに入っているのでタダでけっこうなリソース使わせてくれるのですがね...(Github大好き♡)

Dockerを使ったセルフホスティング


Installation with Dockerに書かれているようにdocker-composeファイルを作り、起動します。 自分はMySQLをDBに設定しました。PostgreSQLを使った設定もあるようです。 ポートは3000がウェブ、22がsshdとなっています。適当にホスト側のポートにバインドしておきます。

HTTPS

HTTPS接続を有効にする方法には、Giteaのビルトインhttpsサポートを利用する方法と、リバースプロキシを利用する方法(HTTPS setup)があります。 自分はNginxとCertbotで証明書を管理しているので、Nginxでリバースプロキシします。 ↓こんなの。ちゃんとした設定は各自で...

server {
    listen              443 ssl;
    server_name         gitea.hareworks.net;
    ssl_certificate     /path/to/crt;
    ssl_certificate_key /path/to/key;
	...
	
	location / {
		...
	}
}

SSHの転送

git cloneする際、git@gitea.example.com/User/Repo.gitみたいな感じのSSHを利用すると思います。しかし、SSHを受け付けてくれるのはサーバーの中のDockerであり、そのまま接続するとホストOSのsshdがgitというユーザーの接続として処理されます。 つまり、ssh接続をゲストに飛ばす必要があります。自分は、gitユーザーのログインログイン時にdocker execする方法と採りました。

/usr/bin/docker exec -i -u git --env SSH_ORIGINAL_COMMAND="$SSH_ORIGINAL_COMMAND" gitea sh "$@"

ホストの git ユーザーのシェルが docker-shell になり、docker exec を使ってコンテナ上の git ユーザーのシェルを開きます。 加えて、ホストの/home/git/.ssh/にGiteaの/data/git/.sshをマウントすることで、Giteaがユーザーから受け取った鍵をそのままホスト側のsshdが認証に使うことができるわけです。

メールサーバー

メールサーバーがあると、 Inviteメールが届けられるらしいですが、今はまだ立ててません。 自分のドメインでメールを受け取れてないので、いずれGiteaに限らずメールサーバーを立てようとは思っています。