Files
gitea-opengist/README.md

152 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Gitea + OpenGist docker environment
Подробности: https://axenov.dev/gitea-to-docker
Ниже краткая выжимка этого поста.
Стек:
- git, ssh, scp, nginx, certbot, docker, docker-compose-plugin, любой текстовый редактор
- gitea (latest) + mariadb 10.6
- opengist (latest) + mariadb 10.6
## Порядок действий
## Для переноса сервисов с другого сервера
1. Клонировать репозиторий
2. Выполнить `cp .env.example .env` и указать корректные данные для подключения
3. Перенос Gitea:
1. Потушить сервис (не сервер)
2. Скопировать существующий конфиг в `./gitea/app.ini` и скорректировать по необходимости
3. Снять дамп mysql и положить в `./gitea/dump.sql.gz`
4. Директории с данными скопировать в `./gitea/data`
4. Перенос Gitea Runner:
* Скопировать старый конфиг в `./runner/config.yaml` и скорректировать по необходимости
ИЛИ
* Выполнить `cp ./runner/config.example.yaml ./runner/config.yaml` и скорректировать по необходимости
5. Перенос OpenGist:
1. Потушить сервис (не сервер)
2. Скопировать существующий конфиг скопировать в `./opengist/opengist.yml` и скорректировать по необходимости
3. Снять дамп mysql и положить в `./opengist/dump.sql.gz`
4. Директории с данными скопировать в `./opengist/data`
6. Убедиться, что владельцем `./` является юзер с `UID`=`1000`, если не -- `cd ..; chown -R 1000:1000 gitea; cd -`
7. Запустить через `docker compose up -d --build`
8. Проверить логи через `docker logs -f ...`
9. Проверить веб-морды через `curl -I localhost:...`
Опционально, если есть домены:
10. Настроить nginx на хосте как реверс-прокси из внешки в контейнеры:
(поменять `server_name` и порты на свои)
1. `/etc/nginx/sites-available/gitea.conf`
```
server {
listen 80;
listen [::]:80;
server_name git.example.com
access_log /var/log/nginx/gitea-access.log;
error_log /var/log/nginx/gitea-error.log;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
```
2. `/etc/nginx/sites-available/opengist.conf`
```
server {
listen 80;
listen [::]:80;
server_name gist.example.com
access_log /var/log/nginx/opengist-access.log;
error_log /var/log/nginx/opengist-error.log;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8081;
}
}
```
3. Сделать линки и перезапустить `nginx`
```shell
ln -s /etc/nginx/sites-available/gitea.conf /etc/nginx/sites-enabled/gitea.conf
ln -s /etc/nginx/sites-available/opengist.conf /etc/nginx/sites-enabled/opengist.conf
unlink /etc/nginx/sites-enabled/default
systemctl restart nginx
```
11. Переключить DNS на новый IP
12. Проверить веб-морды по доменам через `curl -i ...`
13. Настроить SSL через `certbot`
## Для деплоя с нуля
Шаги 3-4 можно опустить.
## Gitea + ssh через хост
Проблема в том, что порт openssh на хосте занят (по дефолту 22), пробросить порт напрямую из докера не получится.
1. Запомнить абсолютный путь до скрипта [./gitea/gitea.sh](./gitea/gitea.sh) (например, `/home/user/gitea/gitea/gitea.sh`)
2. Назначить его оболочкой для юзера `git`
```shell
usermod -s /home/user/gitea/gitea/gitea.sh git
```
3. Создать конфиг `/etc/ssh/sshd_config.d/gitea.conf` следующее:
```shell
Match User git
AuthorizedKeysCommandUser git
AuthorizedKeysCommand /usr/bin/docker exec -i gitea /usr/local/bin/gitea keys -e git -u %u -t %t -k %k
```
4. Перезапустить демона через `systemctl restart sshd`
## Настройка Gitea Actions (runner)
При использовании Gitea версии ниже 1.21.0, необходимо в `./gitea/app.ini` добавить строчки:
```ini
[actions]
ENABLED=true
```
Для начала нужно запустить всю среду.
Чтобы раннер заработал, его нужно зарегистрировать в Gitea с помощью токена регистрации.
Они могу быть разными.
Получить его можно с помощью мануалов:
* https://docs.gitea.com/usage/actions/quickstart
* https://docs.gitea.com/usage/actions/act-runner#register-the-runner
Базово, для создания глобального раннера, нужно зайти в [список раннеров](http://localhost:8080/-/admin/actions/runners) и найти кнопку в правом верхнем углу.
Токен из этого поля нужно скопировать в файл [`.env`](.env.example) в переменную `RUNNER_REG_TOKEN` и перезапустить контейнер `gitea-runner` или всю среду по желанию.
В логах раннера должны быть подобные строчки:
```
level=info msg="Registering runner, arch=amd64, os=linux, version=v0.2.11."
level=debug msg="Successfully pinged the Gitea instance server"
level=info msg="Runner registered successfully."
SUCCESS
time="2025-04-08T02:14:17Z" level=info msg="Starting runner daemon"
time="2025-04-08T02:14:17Z" level=info msg="runner: gitea-runner, with version: v0.2.11, with labels: [ubuntu-latest ubuntu-22.04 ubuntu-20.04], declare successfully"
```
В списке раннеров по ссылке выше должен отобразиться `gitea-runner` зелёном статусе "Простаивает".
Если во время выполнения экшена `actions/checkout@v4` возникает ошибка `Could not resolve host`, то в конфиге `./runner/config.yaml` надо указать имя сети:
```yaml
#...
container:
network: "gitea_network"
#...
```
Доп. информация:
* https://docs.gitea.com/usage/actions/quickstart
* https://docs.gitea.com/usage/actions/act-runner#start-the-runner-using-docker-compose