220 lines
5.9 KiB
Markdown
220 lines
5.9 KiB
Markdown
+++
|
|
date = "2022-06-08"
|
|
tags = ["git","heroku","gitea"]
|
|
title = "giteaのcleanとupdate"
|
|
slug = "gitea"
|
|
+++
|
|
|
|
現在、giteaをherokuで動かしてるんだけど、この前、postgres(pgsql)のメンテンナンスがあるとかで一時停止されて、メンテナンス後に動作しなくなってたので再度動かしてみたときの知見。
|
|
|
|
https://git.syui.cf/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
|
|
```
|