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

Порядок действий

Для переноса сервисов с другого сервера

  1. Клонировать репозиторий
  2. Выполнить cp .env.example .env и указать корректные данные для подключения
  3. Перенос Gitea:
    1. Потушить сервис (не сервер)
    2. Конфиг скопировать в ./gitea/app.ini и скорректировать по необходимости
    3. Снять дамп mysql и положить в ./gitea/dump.sql.gz
    4. Директории с данными скопировать в ./gitea/data
  4. Перенос OpenGist:
    1. Потушить сервис (не сервер)
    2. Конфиг скопировать в ./opengist/opengist.yml и скорректировать по необходимости
    3. Снять дамп mysql и положить в ./opengist/dump.sql.gz
    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:...

Опционально, если есть домены:

  1. Настроить nginx на хосте как реверс-прокси из внешки в контейнеры:
    (поменять server_name и порты на свои)
    1. /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;
        }
    }
    
    1. /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;
        }
    }
    
    1. Сделать линки и перезапустить 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
    
  2. Переключить DNS на новый IP
  3. Проверить веб-морды по доменам через curl -i ...
  4. Настроить SSL через certbot

Для деплоя с нуля

Шаги 3-4 можно опустить.

Gitea + ssh через хост

Проблема в том, что порт openssh на хосте занят (по дефолту 22), пробросить порт напрямую из докера не получится.

  1. Запомнить абсолютный путь до скрипта ./gitea/gitea.sh (например, /home/user/gitea/gitea/gitea.sh)

  2. Назначить его оболочкой для юзера git

    usermod -s /home/user/gitea/gitea/gitea.sh git
    
  3. Создать конфиг /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
    
  4. Перезапустить демона через systemctl restart sshd

Description
Docker-окружение для запуска Gitea + Opengist
https://axenov.dev/gitea-to-docker Readme 38 KiB
Languages
Shell 100%