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