Добавлен скрипт для упрощения настройки ssh + точечная актуализация

This commit is contained in:
2025-09-29 02:35:38 +08:00
parent 1883f6459b
commit a8c3166936
4 changed files with 77 additions and 45 deletions

View File

@@ -6,6 +6,7 @@ GITEA_DB_NAME=
GITEA_HOST_DB_PORT=3306
GITEA_HOST_WEB_PORT=8080
GITEA_HOST_SSH_PORT=222
RUNNER_REG_TOKEN=
OG_DB_ROOT_PASSWORD=
OG_DB_USER=

View File

@@ -35,11 +35,11 @@
- Скопировать существующий конфиг скопировать в `./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. (Необязательно) Если есть домены:
5. Убедиться, что владельцем `./` является юзер `git`, если нет -- присвоить владение ему
6. Запустить через `docker compose up -d --build`
7. Проверить логи через `docker logs -f ...`
8. Проверить веб-морды через `curl -I localhost:...`
9. (Необязательно) Если есть домены:
- Настроить nginx на хосте как реверс-прокси из внешки в контейнеры:
(поменять `server_name` и порты на свои)
@@ -48,17 +48,17 @@
```
server {
listen 80;
listen [::]:80;
server_name git.example.com
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;
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;
}
location / {
proxy_pass http://127.0.0.1:8080;
}
}
```
@@ -69,17 +69,17 @@
```
server {
listen 80;
listen [::]:80;
server_name gist.example.com
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;
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;
}
location / {
proxy_pass http://127.0.0.1:8081;
}
}
```
@@ -100,26 +100,7 @@
## 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/config-gitea-ssh.sh`](./gitea/config-gitea-ssh.sh).
## Настройка Gitea Actions (runner)
@@ -130,17 +111,19 @@
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` или всю среду по желанию.
Токен из этого поля нужно скопировать в файл [`.env`](.env.example) в переменную `RUNNER_REG_TOKEN` и пересоздать контейнер `gitea-runner`.
В логах раннера должны быть подобные строчки:

48
gitea/config-gitea-ssh.sh Executable file
View 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!"