1
0
hugo/content/blog/2019-12-06-gitea.md
2024-12-21 15:52:52 +09:00

129 lines
4.2 KiB
Markdown

+++
date = "2019-12-06"
tags = ["git"]
title = "giteaでgit serverを立てる"
slug = "gitea"
+++
[gitea](https://github.com/go-gitea/gitea)は、golangで書かれたgit serverで、ワンバイナリで起動します。
Dockerfileも用意されており、簡単に環境を構築できます。
設定ファイルは、`./custom/conf/app.ini`にあります。
```yml:docker-compose.yml
version: '3'
services:
web:
image: gitea/gitea:latest
volumes:
- ./gitea-data:/data
ports:
- "3000:3000"
- "10022:10022"
environment:
- TZ=Japan
- SSH_PORT=10022
restart: always
```
https://docs.gitea.io/en-us/install-with-docker/
```sh
# serverの初期設定
$ docker-compose up -d
$ sudo docker ps
$ chromium localhost:3000/install
# sshでpushできるようにする
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/gitea
$ cat ~/.ssh/gitea.pub | pbcopy
$ vi gitea-data/gitea/conf/app.ini
START_SSH_SERVER = true
$ vi ~/.ssh/config
Host localhost
User syui
Hostname localhost
IdentityFile ~/.ssh/gitea
$ docker-compose down
$ docker-compose up -d
$ touch README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
$ git remote add origin ssh://git@localhost:10022/syui/test.git
$ git push -u origin master
```
`/install`実行後に保存される設定ファイルは`./gitea-data/gitea/conf/app.ini`にあります。その他の保全情報は`./gitea-data/gitea/`です。例えば、Dockerfileで以下のようにして、Hostingできます。
```yml:Dockerfile
ENV GITEA_CUSTOM /data/gitea
COPY ./gitea-data/gitea/conf/app.ini /data/gitea/conf/app.ini
VOLUME ["/data"]
```
herokuにあげる場合は、`heroku.yml`に書いて、Dockerfileを調整します。
```yml:heroku.yml
build:
docker:
web: ./Dockerfile
run:
web: gitea web -p $PORT
#web: echo RUN_USER=$USER >> /data/gitea/conf/app.ini; echo "[server]\nHTTP_PORT=$PORT\nROOT_URL=https://git.syui.ai:$PORT" >> /data/gitea/conf/app.ini ;gitea web -p $PORT -c /data/gitea/conf/app.ini
```
```yml:gitea/conf/app.ini
[database]
DB_TYPE = postgres
HOST = aws.amazonaws.com:5432
NAME = xxxx
USER = xxxx
PASSWD = xxxx
```
```sh
$ cat .gitignore
$ docker-compose down
$ sudo heroku container:login
$ heroku container:push web
# dockerなので動いてるコンテナにはアクセスできず、pushした時の状態にアクセスするのみ
$ heroku run bash
$ gitea web -p $PORT --config /data/gitea/conf/app.ini
# herokuでも問題は多分この2つ{ port, user }
$ cat /data/gitea/conf/app.ini
RUN_USER = git
HTTP_PORT = 3000
$ sudo docker ps -q
$ sudo docker exec -it xxx /bin/bash
$ su git;cd
$ gitea admin create-user --username myname --password asecurepassword --email me@example.com --admin
$ gitea admin auth list
```
https://docs.gitea.io/en-us/command-line/
基本的には、`/data/gitea/conf/app.ini`に書き出した情報が正しければ動きます。herokuで動作させる場合、/installを実行後に、正常に動くapp.iniを持ってきて、それをpush(docker-copy)すると良いと思います。この辺が面倒で、localで動くからと言って、heroku上でも動くとは限りません。portも変動します。ユーザー名も変動します。よって、herokuで動くapp.iniを出力し、それを持ってくる必要があると思います。herokuは定期でディレクトリをリセットします。実質的にファイルの保存ができないからです。
localからheroku-dbにアクセスするには、`require`を指定する。登録を停止するには以下。
```sh
[database]
SSL_MODE = require
[service]
DISABLE_REGISTRATION = true
```
https://docs.gitea.io/en-us/config-cheat-sheet/
また、webは動いたとしても、git-serverとして機能するかというと難しそう。user:gitが上手く動作していない感じですし、sshの設定とかもあります。そもそもheroku webがssh serverの起動を許すとは思えません。したがって、今の所の運用は、localでdockerを立ち上げてheroku-dbに接続して更新する方法です。
![](https://raw.githubusercontent.com/syui/img/master/old/gitea_heroku_deploy_docker_01.png)
VPSならそのへんは自由にできるので、giteaは手軽に立てられて便利そうです。