diff --git a/.env.example b/.env.example index 751538c..1844239 100644 --- a/.env.example +++ b/.env.example @@ -5,7 +5,7 @@ GITEA_DB_NAME= GITEA_HOST_DB_PORT=3306 GITEA_HOST_WEB_PORT=8080 -GITEA_HOST_SSH_PORT=22 +GITEA_HOST_SSH_PORT=222 OG_DB_ROOT_PASSWORD= OG_DB_USER= @@ -17,4 +17,4 @@ OG_DB_NAME= OG_HOST_DB_PORT=3307 OG_HOST_WEB_PORT=8081 -OG_HOST_SSH_PORT=23 +OG_HOST_SSH_PORT=223 diff --git a/README.md b/README.md index a014aed..23b22e5 100644 --- a/README.md +++ b/README.md @@ -8,21 +8,21 @@ ## Порядок действий -## Для переноса сервисов +## Для переноса сервисов с другого сервера 1. Клонировать репозиторий 2. Выполнить `cp .env.example .env` и указать корректные данные для подключения -3. Перенос Gitea с рабочего сервера: - 1. Потушить сервер +3. Перенос Gitea: + 1. Потушить сервис (не сервер) 2. Конфиг скопировать в `./gitea/app.ini` и скорректировать по необходимости 3. Снять дамп mysql и положить в `./gitea/dump.sql.gz` - 4. Директорию с данными скопировать в `./gitea/data` -4. Перенос OpenGist с рабочего сервера: - 1. Потушить сервер + 4. Директории с данными скопировать в `./gitea/data` +4. Перенос OpenGist: + 1. Потушить сервис (не сервер) 2. Конфиг скопировать в `./opengist/opengist.yml` и скорректировать по необходимости 3. Снять дамп mysql и положить в `./opengist/dump.sql.gz` - 4. Директорию с данными скопировать в `./opengist/data` -5. Убедиться, что `git` рекурсивно является владельцем `./`, если не -- `cd ..; chown -R git: gitea; cd -` + 4. Директории с данными скопировать в `./opengist/data` +5. Убедиться, что владельцем `./` является юзер с `UID`=`1000`, если не -- `cd ..; chown -R 1000:1000 gitea; cd -` 6. Запустить через `docker compose up -d --build` 7. Проверить логи через `docker logs -f ...` 8. Проверить веб-морды через `curl -i localhost:...` @@ -70,5 +70,29 @@ unlink /etc/nginx/sites-enabled/default systemctl restart nginx ``` -10. Проверить веб-морды по доменам через `curl -i ...` -11. Настроить SSL через `certbot` +10. Переключить DNS на новый IP +11. Проверить веб-морды по доменам через `curl -i ...` +12. Настроить 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` diff --git a/docker-compose.yml b/docker-compose.yml index 00092d5..df37618 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,7 +33,7 @@ services: - ./gitea/data:/var/lib/gitea ports: - ${GITEA_HOST_WEB_PORT:-8080}:3000 - - ${GITEA_HOST_SSH_PORT:-22}:22 + - ${GITEA_HOST_SSH_PORT:-222}:22 depends_on: - gitea-db @@ -61,7 +61,7 @@ services: OG_DB_URI: mysql://${OG_DB_USER:?check your .env file}:${OG_DB_PASSWORD:?check your .env file}@opengist-db:3306/${OG_DB_NAME:-opengist} ports: - ${OG_HOST_WEB_PORT:-8081}:6157 - - ${OG_HOST_SSH_PORT:-23}:2222 + - ${OG_HOST_SSH_PORT:-223}:2222 volumes: # copy backup files first to pass them inside - ./opengist/data:/opengist diff --git a/gitea/gitea.sh b/gitea/gitea.sh new file mode 100755 index 0000000..6cdf16f --- /dev/null +++ b/gitea/gitea.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# https://docs.gitea.com/installation/install-with-docker-rootless +if [ $(docker ps | grep -wc 'gitea') -le 1 ]; then + echo "============================================" >&2 + echo "Gitea is currently offline. Try again later." >&2 + echo "============================================" >&2 + exit 1 +fi + +docker exec -i --env SSH_ORIGINAL_COMMAND="$SSH_ORIGINAL_COMMAND" gitea sh "$@"