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

61 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 【おうちGit鯖】Giteaを立てよう
released_at: 2024-06-30T00:00:00+09:00
updated_at: 2024-09-03T07:08:00+09:00
tags:
- Linux
- Server
- 自宅鯖
- Docker
image: /uploads/
publish: public
---
<script>
</script>
# Giteaを始めよう
---
自分のサーバーにGiteaを立てたよという話です。
Giteaとは、GithubやGitlabなどのGitホスティングサービスの一つで、Giteaはオープンソースで、公式の[gitea.com](https://gitea.com)と(ほぼ)同様のものを自分でホストすることができます。
issue管理や、プロジェクト、Actions、Wiki等のリポジトリマネジメントに使える機能はGitlab
にも同様のものがありますが、Gitlabと比べると構築がかんたんで、消費するリソース主にメモリーが少ないらしいのでGiteaを選択しています。
## 宅鯖Giteaの意義
自分のリソースなので、好きなように使えることが一番嬉しいです。どんなにカスなリポジトリを立てても、咎める人間は存在しません。
また、個人的な思想として中央集権的なシステムが好きではないので、自分のプロジェクトを分散管理したいなー、なんて欲求がそこはかとなくあったのです。まあ、自分はGithub Educationに入っているのでタダでけっこうなリソース使わせてくれるのですがね...(Github大好き♡)
# Dockerを使ったセルフホスティング
---
[Installation with Docker](https://docs.gitea.com/installation/install-with-docker)に書かれているようにdocker-composeファイルを作り、起動します。
自分はMySQLをDBに設定しました。PostgreSQLを使った設定もあるようです。
ポートは3000がウェブ、22がsshdとなっています。適当にホスト側のポートにバインドしておきます。
## HTTPS
HTTPS接続を有効にする方法には、Giteaのビルトインhttpsサポートを利用する方法と、リバースプロキシを利用する方法([HTTPS setup](https://docs.gitea.com/administration/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に限らずメールサーバーを立てようとは思っています。