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
Порядок действий
Для переноса сервисов с другого сервера
- Клонировать репозиторий
- Выполнить
cp .env.example .env
и указать корректные данные для подключения - Перенос Gitea:
- Потушить сервис (не сервер)
- Конфиг скопировать в
./gitea/app.ini
и скорректировать по необходимости - Снять дамп mysql и положить в
./gitea/dump.sql.gz
- Директории с данными скопировать в
./gitea/data
- Перенос OpenGist:
- Потушить сервис (не сервер)
- Конфиг скопировать в
./opengist/opengist.yml
и скорректировать по необходимости - Снять дамп mysql и положить в
./opengist/dump.sql.gz
- Директории с данными скопировать в
./opengist/data
- Убедиться, что владельцем
./
является юзер сUID
=1000
, если не --cd ..; chown -R 1000:1000 gitea; cd -
- Запустить через
docker compose up -d --build
- Проверить логи через
docker logs -f ...
- Проверить веб-морды через
curl -I localhost:...
Опционально, если есть домены:
- Настроить 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
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
Для деплоя с нуля
Шаги 3-4 можно опустить.
Gitea + ssh через хост
Проблема в том, что порт openssh на хосте занят (по дефолту 22), пробросить порт напрямую из докера не получится.
-
Запомнить абсолютный путь до скрипта ./gitea/gitea.sh (например,
/home/user/gitea/gitea/gitea.sh
) -
Назначить его оболочкой для юзера
git
usermod -s /home/user/gitea/gitea/gitea.sh git
-
Создать конфиг
/etc/ssh/sshd_config.d/gitea.conf
следующее: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
-
Перезапустить демона через
systemctl restart sshd
Description
Languages
Shell
100%