Files
gitea-opengist/README.md

159 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` и порты на свои)
Файл: `/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;
}
}
```
Файл: `/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;
}
}
```
Сделать линки и перезапустить `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 и 5 можно опустить.
## 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 с помощью токена регистрации.
Раннеры могут работать в разных скоупах: на уровне репозитория, организации или глобально.
Базово, для создания глобального раннера, нужно зайти в раздел админки со [списком раннеров](http://localhost:8080/-/admin/actions/runners) и найти кнопку в правом верхнем углу.
![Скриншот админки из документации, весьма старый, но суть передаёт](https://docs.gitea.com/assets/images/register-runner-9a8b9ef53a945ba67fe002b581b1ecf4.png)
Токен из этого поля нужно скопировать в файл [`.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