2019-12-06 / @syui

git

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は手軽に立てられて便利そうです。