Compare commits
3 Commits
cd691e8f5e
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
a8c3166936
|
|||
|
1883f6459b
|
|||
|
eb9d44a3c7
|
@@ -6,6 +6,7 @@ GITEA_DB_NAME=
|
|||||||
GITEA_HOST_DB_PORT=3306
|
GITEA_HOST_DB_PORT=3306
|
||||||
GITEA_HOST_WEB_PORT=8080
|
GITEA_HOST_WEB_PORT=8080
|
||||||
GITEA_HOST_SSH_PORT=222
|
GITEA_HOST_SSH_PORT=222
|
||||||
|
RUNNER_REG_TOKEN=
|
||||||
|
|
||||||
OG_DB_ROOT_PASSWORD=
|
OG_DB_ROOT_PASSWORD=
|
||||||
OG_DB_USER=
|
OG_DB_USER=
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,4 +1,4 @@
|
|||||||
/gitea/*.ini
|
/gitea/app.ini
|
||||||
/gitea/data/
|
/gitea/data/
|
||||||
|
|
||||||
/runner/*.yaml
|
/runner/*.yaml
|
||||||
@@ -17,7 +17,6 @@
|
|||||||
*.sql
|
*.sql
|
||||||
*.sql.*
|
*.sql.*
|
||||||
*.log
|
*.log
|
||||||
*.ini
|
|
||||||
*dump*
|
*dump*
|
||||||
*backup*
|
*backup*
|
||||||
|
|
||||||
|
|||||||
166
README.md
166
README.md
@@ -5,110 +5,102 @@
|
|||||||
Ниже краткая выжимка этого поста.
|
Ниже краткая выжимка этого поста.
|
||||||
|
|
||||||
Стек:
|
Стек:
|
||||||
- git, ssh, scp, nginx, certbot, docker, docker-compose-plugin, любой текстовый редактор
|
|
||||||
- gitea (latest) + mariadb 10.6
|
- gitea (latest) + mariadb 10.6
|
||||||
- opengist (latest) + mariadb 10.6
|
- opengist (latest) + mariadb 10.6
|
||||||
|
- git, docker, docker-compose-plugin; могут понадобиться ssh, scp, nginx, certbot, любой текстовый редактор
|
||||||
|
|
||||||
## Порядок действий
|
## Порядок действий
|
||||||
|
|
||||||
### Для переноса сервисов с другого сервера
|
### Для переноса сервисов с другого сервера
|
||||||
|
|
||||||
1. Клонировать репозиторий
|
1. Клонировать репозиторий
|
||||||
2. Выполнить `cp .env.example .env` и указать корректные данные для подключения
|
2. Выполнить `cp ./.env.example ./.env` и указать корректные данные для подключения
|
||||||
3. Перенос Gitea:
|
3. Создать пользователя git, подробности [описаны в блоге](https://axenov.dev/gitea-to-docker)
|
||||||
1. Потушить сервис (не сервер)
|
4. Выполнить `cp ./gitea/app.example.ini ./gitea/app.ini` и указать необходимые настройки
|
||||||
2. Скопировать существующий конфиг в `./gitea/app.ini` и скорректировать по необходимости
|
**ИЛИ**
|
||||||
3. Снять дамп mysql и положить в `./gitea/dump.sql.gz`
|
- (Необязательно) Для переноса инстанса Gitea:
|
||||||
4. Директории с данными скопировать в `./gitea/data`
|
- Потушить сервис (не сервер)
|
||||||
4. Перенос Gitea Runner:
|
- Выполнить `cp ./compose.override.yml.example ./compose.override.yml`
|
||||||
* Скопировать старый конфиг в `./runner/config.yaml` и скорректировать по необходимости
|
- Скопировать существующий конфиг в `./gitea/app.ini` и скорректировать по необходимости
|
||||||
ИЛИ
|
- Снять дамп mysql и положить в `./gitea/dump.sql.gz`
|
||||||
* Выполнить `cp ./runner/config.example.yaml ./runner/config.yaml` и скорректировать по необходимости
|
- Директории с данными скопировать в `./gitea/data`
|
||||||
5. Перенос OpenGist:
|
- (Необязательно) Для переноса инстанса Gitea Runner:
|
||||||
1. Потушить сервис (не сервер)
|
- Выполнить `cp ./compose.override.yml.example ./compose.override.yml`, если ещё не
|
||||||
2. Скопировать существующий конфиг скопировать в `./opengist/opengist.yml` и скорректировать по необходимости
|
- Скопировать старый конфиг в `./runner/config.yaml` и скорректировать по необходимости
|
||||||
3. Снять дамп mysql и положить в `./opengist/dump.sql.gz`
|
**ИЛИ**
|
||||||
4. Директории с данными скопировать в `./opengist/data`
|
- Выполнить `cp ./runner/config.example.yaml ./runner/config.yaml` и скорректировать по необходимости
|
||||||
6. Убедиться, что владельцем `./` является юзер с `UID`=`1000`, если не -- `cd ..; chown -R 1000:1000 gitea; cd -`
|
- (Необязательно) Для переноса инстанса OpenGist:
|
||||||
7. Запустить через `docker compose up -d --build`
|
- Потушить сервис (не сервер)
|
||||||
8. Проверить логи через `docker logs -f ...`
|
- Выполнить `cp ./compose.override.yml.example ./compose.override.yml`, если ещё не
|
||||||
9. Проверить веб-морды через `curl -I localhost:...`
|
- Скопировать существующий конфиг скопировать в `./opengist/opengist.yml` и скорректировать по необходимости
|
||||||
|
- Снять дамп mysql и положить в `./opengist/dump.sql.gz`
|
||||||
|
- Директории с данными скопировать в `./opengist/data`
|
||||||
|
5. Убедиться, что владельцем `./` является юзер `git`, если нет -- присвоить владение ему
|
||||||
|
6. Запустить через `docker compose up -d --build`
|
||||||
|
7. Проверить логи через `docker logs -f ...`
|
||||||
|
8. Проверить веб-морды через `curl -I localhost:...`
|
||||||
|
9. (Необязательно) Если есть домены:
|
||||||
|
- Настроить nginx на хосте как реверс-прокси из внешки в контейнеры:
|
||||||
|
(поменять `server_name` и порты на свои)
|
||||||
|
|
||||||
Опционально, если есть домены:
|
<details>
|
||||||
|
<summary>Файл: /etc/nginx/sites-available/gitea.conf</summary>
|
||||||
|
|
||||||
10. Настроить nginx на хосте как реверс-прокси из внешки в контейнеры: (поменять `server_name` и порты на свои)
|
```
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name git.example.com
|
||||||
|
|
||||||
Файл: `/etc/nginx/sites-available/gitea.conf`
|
access_log /var/log/nginx/gitea-access.log;
|
||||||
|
error_log /var/log/nginx/gitea-error.log;
|
||||||
|
client_max_body_size 100M;
|
||||||
|
|
||||||
```
|
location / {
|
||||||
server {
|
proxy_pass http://127.0.0.1:8080;
|
||||||
listen 80;
|
}
|
||||||
listen [::]:80;
|
}
|
||||||
server_name git.example.com
|
```
|
||||||
|
|
||||||
access_log /var/log/nginx/gitea-access.log;
|
</details>
|
||||||
error_log /var/log/nginx/gitea-error.log;
|
|
||||||
client_max_body_size 100M;
|
|
||||||
|
|
||||||
location / {
|
<details>
|
||||||
proxy_pass http://127.0.0.1:8080;
|
<summary>Файл: /etc/nginx/sites-available/opengist.conf</summary>
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Файл: `/etc/nginx/sites-available/opengist.conf`
|
```
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name gist.example.com
|
||||||
|
|
||||||
```
|
access_log /var/log/nginx/opengist-access.log;
|
||||||
server {
|
error_log /var/log/nginx/opengist-error.log;
|
||||||
listen 80;
|
client_max_body_size 100M;
|
||||||
listen [::]:80;
|
|
||||||
server_name gist.example.com
|
|
||||||
|
|
||||||
access_log /var/log/nginx/opengist-access.log;
|
location / {
|
||||||
error_log /var/log/nginx/opengist-error.log;
|
proxy_pass http://127.0.0.1:8081;
|
||||||
client_max_body_size 100M;
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
location / {
|
</details>
|
||||||
proxy_pass http://127.0.0.1:8081;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Сделать линки и перезапустить `nginx`
|
- Сделать линки и перезапустить `nginx`
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
ln -s /etc/nginx/sites-available/gitea.conf /etc/nginx/sites-enabled/gitea.conf
|
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
|
ln -s /etc/nginx/sites-available/opengist.conf /etc/nginx/sites-enabled/opengist.conf
|
||||||
unlink /etc/nginx/sites-enabled/default
|
unlink /etc/nginx/sites-enabled/default
|
||||||
systemctl restart nginx
|
systemctl restart nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
11. Переключить DNS на новый IP
|
- Переключить DNS на новый IP
|
||||||
12. Проверить веб-морды по доменам через `curl -i ...`
|
- Проверить веб-морды по доменам через `curl -i ...`
|
||||||
13. Настроить SSL через `certbot`
|
- (Необязательно) Настроить SSL через `certbot`
|
||||||
|
|
||||||
### Для деплоя с нуля
|
## Gitea + ssh через хостовый порт
|
||||||
|
|
||||||
Всё то же, но шаги 3 и 5 можно опустить.
|
Выполнить скрипт [`./gitea/config-gitea-ssh.sh`](./gitea/config-gitea-ssh.sh).
|
||||||
|
|
||||||
## 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 Actions (runner)
|
||||||
|
|
||||||
@@ -119,17 +111,19 @@ systemctl restart nginx
|
|||||||
ENABLED=true
|
ENABLED=true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Для версий выше этого делать не нужно.
|
||||||
|
|
||||||
Для начала нужно запустить всю среду.
|
Для начала нужно запустить всю среду.
|
||||||
|
|
||||||
Чтобы раннер заработал, его нужно зарегистрировать в Gitea с помощью токена регистрации.
|
Чтобы раннер заработал, его нужно зарегистрировать в Gitea с помощью токена регистрации.
|
||||||
|
|
||||||
Раннеры могут работать в разных скоупах: на уровне репозитория, организации или глобально.
|
Раннеры могут работать в разных скоупах: на уровне пользователя, репозитория, организации или глобально.
|
||||||
|
|
||||||
Базово, для создания глобального раннера, нужно зайти в раздел админки со [списком раннеров](http://localhost:8080/-/admin/actions/runners) и найти кнопку в правом верхнем углу.
|
Базово, для создания глобального раннера, нужно зайти в раздел админки со [списком раннеров](http://localhost:8080/-/admin/actions/runners) и найти кнопку в правом верхнем углу.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Токен из этого поля нужно скопировать в файл [`.env`](.env.example) в переменную `RUNNER_REG_TOKEN` и перезапустить контейнер `gitea-runner` или всю среду по желанию.
|
Токен из этого поля нужно скопировать в файл [`.env`](.env.example) в переменную `RUNNER_REG_TOKEN` и пересоздать контейнер `gitea-runner`.
|
||||||
|
|
||||||
В логах раннера должны быть подобные строчки:
|
В логах раннера должны быть подобные строчки:
|
||||||
|
|
||||||
@@ -147,12 +141,14 @@ time="2025-04-08T02:14:17Z" level=info msg="runner: gitea-runner, with version:
|
|||||||
Если во время выполнения экшена `actions/checkout@v4` возникает ошибка `Could not resolve host`, то в конфиге `./runner/config.yaml` надо указать имя сети:
|
Если во время выполнения экшена `actions/checkout@v4` возникает ошибка `Could not resolve host`, то в конфиге `./runner/config.yaml` надо указать имя сети:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
#...
|
|
||||||
container:
|
container:
|
||||||
network: "gitea_network"
|
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/quickstart
|
||||||
* https://docs.gitea.com/usage/actions/act-runner
|
* https://docs.gitea.com/usage/actions/act-runner
|
||||||
|
|||||||
2854
gitea/app.example.ini
Normal file
2854
gitea/app.example.ini
Normal file
File diff suppressed because it is too large
Load Diff
48
gitea/config-gitea-ssh.sh
Executable file
48
gitea/config-gitea-ssh.sh
Executable file
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# ==================================================================================
|
||||||
|
|
||||||
|
echo "Configuring user 'git'..."
|
||||||
|
|
||||||
|
if ! id git; then
|
||||||
|
sudo adduser \
|
||||||
|
--system \
|
||||||
|
--disabled-password \
|
||||||
|
--group \
|
||||||
|
--gecos 'Gitea user' \
|
||||||
|
--home /home/git \
|
||||||
|
git
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo passwd -d git
|
||||||
|
sudo usermod -aG docker git
|
||||||
|
|
||||||
|
currentdir=$(dirname $(readlink -e -- "${BASH_SOURCE}"))
|
||||||
|
sudo cp -f "$currentdir/gitea-shell" /home/git/
|
||||||
|
sudo chmod a+x /home/git/gitea-shell
|
||||||
|
sudo usermod -s /home/git/gitea-shell git
|
||||||
|
|
||||||
|
sudo mkdir -p /home/git/.ssh
|
||||||
|
sudo chown -R git:git /home/git
|
||||||
|
sudo chmod 755 /home/git
|
||||||
|
sudo chmod 700 /home/git/.ssh
|
||||||
|
|
||||||
|
# ==================================================================================
|
||||||
|
|
||||||
|
cfgpath="/etc/ssh/sshd_config.d/gitea.conf"
|
||||||
|
echo "Installing new ssh config: $cfgpath"
|
||||||
|
sudo tee "$cfgpath" > /dev/null <<EOF
|
||||||
|
Match User git
|
||||||
|
PasswordAuthentication no
|
||||||
|
AuthorizedKeysCommandUser git
|
||||||
|
AuthorizedKeysCommand /usr/bin/docker exec -i gitea /usr/local/bin/gitea keys -e git -u %u -t %t -k %k
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# ==================================================================================
|
||||||
|
|
||||||
|
echo "Reloading ssh configs..."
|
||||||
|
sudo systemctl reload ssh
|
||||||
|
# sudo systemctl reload sshd
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
Reference in New Issue
Block a user