giteaでgit serverを立てる
giteaは、golangで書かれたgit serverで、ワンバイナリで起動します。
Dockerfileも用意されており、簡単に環境を構築できます。
設定ファイルは、./custom/conf/app.ini
にあります。
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/
# 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できます。
ENV GITEA_CUSTOM /data/gitea
COPY ./gitea-data/gitea/conf/app.ini /data/gitea/conf/app.ini
VOLUME ["/data"]
herokuにあげる場合は、heroku.yml
に書いて、Dockerfileを調整します。
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.cf:$PORT" >> /data/gitea/conf/app.ini ;gitea web -p $PORT -c /data/gitea/conf/app.ini
[database]
DB_TYPE = postgres
HOST = aws.amazonaws.com:5432
NAME = xxxx
USER = xxxx
PASSWD = xxxx
$ 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 [email protected] --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
を指定する。登録を停止するには以下。
[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に接続して更新する方法です。
VPSならそのへんは自由にできるので、giteaは手軽に立てられて便利そうです。