172 lines
8.3 KiB
Markdown
172 lines
8.3 KiB
Markdown
# Gitea + OpenGist docker environment
|
||
|
||
Подробности: https://axenov.dev/gitea-to-docker
|
||
|
||
Ниже краткая выжимка этого поста.
|
||
|
||
Стек:
|
||
- gitea (latest) + mariadb 10.6
|
||
- opengist (latest) + mariadb 10.6
|
||
- git, docker, docker-compose-plugin; могут понадобиться ssh, scp, nginx, certbot, любой текстовый редактор
|
||
|
||
## Порядок действий
|
||
|
||
### Для переноса сервисов с другого сервера
|
||
|
||
1. Клонировать репозиторий
|
||
2. Выполнить `cp ./.env.example ./.env` и указать корректные данные для подключения
|
||
3. Создать пользователя git, подробности [описаны в блоге](https://axenov.dev/gitea-to-docker)
|
||
4. Выполнить `cp ./gitea/app.example.ini ./gitea/app.ini` и указать необходимые настройки
|
||
**ИЛИ**
|
||
- (Необязательно) Для переноса инстанса Gitea:
|
||
- Потушить сервис (не сервер)
|
||
- Выполнить `cp ./compose.override.yml.example ./compose.override.yml`
|
||
- Скопировать существующий конфиг в `./gitea/app.ini` и скорректировать по необходимости
|
||
- Снять дамп mysql и положить в `./gitea/dump.sql.gz`
|
||
- Директории с данными скопировать в `./gitea/data`
|
||
- (Необязательно) Для переноса инстанса Gitea Runner:
|
||
- Выполнить `cp ./compose.override.yml.example ./compose.override.yml`, если ещё не
|
||
- Скопировать старый конфиг в `./runner/config.yaml` и скорректировать по необходимости
|
||
**ИЛИ**
|
||
- Выполнить `cp ./runner/config.example.yaml ./runner/config.yaml` и скорректировать по необходимости
|
||
- (Необязательно) Для переноса инстанса OpenGist:
|
||
- Потушить сервис (не сервер)
|
||
- Выполнить `cp ./compose.override.yml.example ./compose.override.yml`, если ещё не
|
||
- Скопировать существующий конфиг скопировать в `./opengist/opengist.yml` и скорректировать по необходимости
|
||
- Снять дамп mysql и положить в `./opengist/dump.sql.gz`
|
||
- Директории с данными скопировать в `./opengist/data`
|
||
1. Убедиться, что владельцем `./` является юзер с `UID`/`GID`=`1000`, если нет -- `chown -R 1000:1000 ./`
|
||
2. Запустить через `docker compose up -d --build`
|
||
3. Проверить логи через `docker logs -f ...`
|
||
4. Проверить веб-морды через `curl -I localhost:...`
|
||
5. (Необязательно) Если есть домены:
|
||
- Настроить nginx на хосте как реверс-прокси из внешки в контейнеры:
|
||
(поменять `server_name` и порты на свои)
|
||
|
||
<details>
|
||
<summary>Файл: /etc/nginx/sites-available/gitea.conf</summary>
|
||
|
||
```
|
||
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;
|
||
}
|
||
}
|
||
```
|
||
|
||
</details>
|
||
|
||
<details>
|
||
<summary>Файл: /etc/nginx/sites-available/opengist.conf</summary>
|
||
|
||
```
|
||
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;
|
||
}
|
||
}
|
||
```
|
||
|
||
</details>
|
||
|
||
- Сделать линки и перезапустить `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
|
||
```
|
||
|
||
- Переключить DNS на новый IP
|
||
- Проверить веб-морды по доменам через `curl -i ...`
|
||
- (Необязательно) Настроить SSL через `certbot`
|
||
|
||
## Gitea + ssh через хостовый порт
|
||
|
||
Если порт openssh на хосте занят (по дефолту 22), то пробросить его же напрямую из докера не получится.
|
||
|
||
Поэтому предлагается использовать порт 222 или другой (`GITEA_HOST_SSH_PORT`)
|
||
|
||
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
|
||
```
|
||
|
||
4. Создать конфиг `/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
|
||
```
|
||
|
||
5. Перезапустить демона через `systemctl restart sshd`
|
||
|
||
## Настройка Gitea Actions (runner)
|
||
|
||
При использовании Gitea версии ниже 1.21.0, необходимо в `./gitea/app.ini` добавить строчки:
|
||
|
||
```ini
|
||
[actions]
|
||
ENABLED=true
|
||
```
|
||
|
||
Для начала нужно запустить всю среду.
|
||
|
||
Чтобы раннер заработал, его нужно зарегистрировать в Gitea с помощью токена регистрации.
|
||
|
||
Раннеры могут работать в разных скоупах: на уровне репозитория, организации или глобально.
|
||
|
||
Базово, для создания глобального раннера, нужно зайти в раздел админки со [списком раннеров](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://axenov.dev/gitea-to-docker
|
||
* https://docs.gitea.com/installation/install-with-docker-rootless
|
||
* https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini
|
||
* https://docs.gitea.com/administration/config-cheat-sheet
|
||
* https://docs.gitea.com/usage/actions/quickstart
|
||
* https://docs.gitea.com/usage/actions/act-runner
|