2022-06-08 /
@syui
git
, heroku
, gitea
giteaのcleanとupdate
現在、giteaをherokuで動かしてるんだけど、この前、postgres(pgsql)のメンテンナンスがあるとかで一時停止されて、メンテナンス後に動作しなくなってたので再度動かしてみたときの知見。
https://git.syui.cf/syui
まず、メンテナンス後にherokuのpgsqlがwebとcliで情報が違ってたので、cliを参考にすること。
app.iniのdb情報を修正すれば動くと思う。
ただ、db(record)がいっぱいになりかけてたし、updateもしたかったので、resetしてからdeployすることに。
$ git clone https://github.com/go-gitea/gitea
$ cd gitea
$ vim 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
最小構成はこんな感じです。
version: '3'
services:
web:
image: gitea/gitea:latest
volumes:
- ./gitea:/data
ports:
- "3000:3000"
- "10022:10022"
environment:
- TZ=Japan
- SSH_PORT=10022
restart: always
起動しないときは、dockerのpsやimageを削除します。
$ 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`
$ chromium localhost:3000/install
webでぽちぽちやると以下のファイルが生成されます。重要な設定部分を載せています。
[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
$ heroku git:remote -a $appname
$ heroku pg:credentials:url
$ heroku stack:set container
DockerfileのENV USER git
を消してください。基本的にはこれだけで動きます。
$ 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
するしかありません。
$ echo RUN_USER=`whoami` >> /data/gitea/conf/app.ini
カスタマイズしたい方は、./docker/root/
以下のファイルが参考になります。
heroku.yml
のrunはDockerfileにCMDがある場合は実行されません。ですから、仮にheroku.yml
を優先したい場合は、DockerfileのCMDを削除してrunを書きましょう。
Dockerfile
#CMD ["/bin/s6-svscan", "/etc/s6"]
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
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がストレージをリセットする関係上、webで作成したrepo、つまり、web serverに書き込まれる/data/git
は後々削除されます。
ですから、localでrepo、つまり、/gitea/git
を生成して、それをheroku-repoにpushする必要があります。
ただし、herokuでつかうapp.iniとdocker-localで使うapp.iniは異なります。立ち上げる際は動くように調整する必要があります。
giteaを使う場合は、作成したrepoをcloneしてpushできます。
init, remoteで作成した.git
だとそのままではpushできません。cloneした.git
を使ってください。
$ git clone xxx/xxx.git
$ cd xxx
$ tree .git
また、localでrepoを作成、更新するのが面倒な場合は、/data/gitea/git/repositories/$user
にrepoの.git
を$repo.git
として置く方法があります。これをheroku-deployしなければなりません。
$ 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