+++ date = "2022-06-08" tags = ["git","heroku","gitea"] title = "giteaのcleanとupdate" slug = "gitea" +++ 現在、giteaをherokuで動かしてるんだけど、この前、postgres(pgsql)のメンテンナンスがあるとかで一時停止されて、メンテナンス後に動作しなくなってたので再度動かしてみたときの知見。 https://git.syui.ai/syui まず、メンテナンス後にherokuのpgsqlがwebとcliで情報が違ってたので、cliを参考にすること。 app.iniのdb情報を修正すれば動くと思う。 ただ、db(record)がいっぱいになりかけてたし、updateもしたかったので、resetしてからdeployすることに。 ```sh $ git clone https://github.com/go-gitea/gitea $ cd gitea $ vim docker-compose.yml ``` ```yml:docker-compose.yml version: "3" networks: gitea: external: false services: server: image: gitea/gitea:1.16.8 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=db:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" depends_on: - db db: image: postgres:14 restart: always environment: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea - POSTGRES_DB=gitea networks: - gitea volumes: - ./postgres:/var/lib/postgresql/data ``` 最小構成はこんな感じです。 ```yml:docker-compose.yml version: '3' services: web: image: gitea/gitea:latest volumes: - ./gitea:/data ports: - "3000:3000" - "10022:10022" environment: - TZ=Japan - SSH_PORT=10022 restart: always ``` ```sh $ docker-compose up ``` 起動しないときは、dockerのpsやimageを削除します。 ```sh $ sudo docker ps -aq $ sudo docker images -aq $ sudo docker stop `sudo docker ps -aq` $ sudo docker rm -f `sudo docker ps -aq` $ sudo docker rmi -f `sudo docker images -aq` ``` ```sh $ chromium localhost:3000/install ``` webでぽちぽちやると以下のファイルが生成されます。重要な設定部分を載せています。 ```yml:gitea/gitea/conf/app.ini [database] DB_TYPE = postgres SSL_MODE = require [service] DISABLE_REGISTRATION = true REQUIRE_SIGNIN_VIEW = false REGISTER_EMAIL_CONFIRM = false ENABLE_NOTIFY_MAIL = false ALLOW_ONLY_EXTERNAL_REGISTRATION = false ENABLE_CAPTCHA = false DEFAULT_KEEP_EMAIL_PRIVATE = false DEFAULT_ALLOW_CREATE_ORGANIZATION = false DEFAULT_ENABLE_TIMETRACKING = false ``` ```sh $ heroku git:remote -a $appname $ heroku pg:credentials:url $ heroku stack:set container ``` Dockerfileの`ENV USER git`を消してください。基本的にはこれだけで動きます。 ```sh $ vim Dockerfile #ENV USER git COPY ./gitea/ /data/ $ git add gitea Dockerfile heroku.yml $ git commit -m "add conf" $ git push -u heroku main ``` ### heroku $USER, $PORT herokuの場合、毎日web-serverのストレージがリセットされる際に$USER, $PORTが変わるので、それに対応しなければなりません。 リセットされる都度、以下のような処理をどこかに入れて、`gitea web`するしかありません。 ```sh $ echo RUN_USER=`whoami` >> /data/gitea/conf/app.ini ``` カスタマイズしたい方は、`./docker/root/`以下のファイルが参考になります。 `heroku.yml`のrunはDockerfileにCMDがある場合は実行されません。ですから、仮に`heroku.yml`を優先したい場合は、DockerfileのCMDを削除してrunを書きましょう。 > Dockerfile ```sh #CMD ["/bin/s6-svscan", "/etc/s6"] ``` ```yml:heroku.yml build: docker: web: ./Dockerfile run: web: echo "RUN_USER=`whoami`" >> /data/gitea/conf/app.ini;gitea web -p $PORT -c /data/gitea/conf/app.ini ``` ```yml:heroku.yml build: docker: web: Dockerfile release: image: web command: - echo RUN_USER=`whoami` >> /data/gitea/conf/app.ini run: web: gitea web -p $PORT -c /data/gitea/conf/app.ini ``` herokuの$USERが難しいのは、Dockerfileがrootで実行されるので、heroku.ymlで制御する必要があるからです。ただし、heroku.ymlでは`/data/gitea/conf`に書き込む権限がありません。 ref : https://devcenter.heroku.com/articles/container-registry-and-runtime#dockerfile-commands-and-runtime ### git push herokuがストレージを[リセット](https://devcenter.heroku.com/ja/articles/dynos#restarting)する関係上、webで作成したrepo、つまり、web serverに書き込まれる`/data/git`は後々削除されます。 ```sh $ heroku ps:restart ``` ですから、localでrepo、つまり、`/gitea/git`を生成して、それをheroku-repoにpushする必要があります。 ただし、herokuでつかうapp.iniとdocker-localで使うapp.iniは異なります。立ち上げる際は動くように調整する必要があります。 giteaを使う場合は、作成したrepoをcloneしてpushできます。 init, remoteで作成した`.git`だとそのままではpushできません。cloneした`.git`を使ってください。 ```sh $ git clone xxx/xxx.git $ cd xxx $ tree .git ``` また、localでrepoを作成、更新するのが面倒な場合は、`/data/gitea/git/repositories/$user`にrepoの`.git`を`$repo.git`として置く方法があります。これをheroku-deployしなければなりません。 ```sh $ git clone xxx/$user/$repo.git $ mkdir -p gitea/git/repositories/$user $ mv $repo/.git ./gitea/git/repositories/$user/$repo.git $ rm -rf $repo $ git add gitea/git $ git commit -m "add git-repo" $ git push heroku main ```