Files
tp/main_dc
valitovgaziz 5d22544df1 docs(nginx): remove outdated serv_spa references
Updated the domains table to reflect that yalarba.ru is now
Nuxt 4 SSR (not static Vue SPA), and the old static path
/usr/share/nginx/yalarba/html no longer exists.
2026-06-12 11:27:28 +05:00
..
2026-05-02 09:15:43 +05:00
2026-06-10 13:02:00 +05:00
2026-06-12 10:14:38 +05:00

Текущие проблемы

  1. Деплой в 5 шагов: локальный код → push → SSH → pull → make (ручной, медленный)
  2. Добавление нового сайта требует правки 7+ файлов: .env, docker-compose.yml, nginx-http.conf, nginx-ssl.conf, switch-config.sh, init-certbot.sh, checkRenewCerts.sh, Makefile — легко забыть что-то
  3. HTTPS all-or-nothing: если у одного домена нет сертификата — все сайты падают на HTTP
  4. Certbot: дублирование кода на каждый домен в init-certbot.sh, checkRenewCerts.sh и 5 отдельных renew-скриптов
  5. Makefile растёт — на каждый сервис 4-5 целей Предложение Фаза 1: CI/CD через GitHub Actions Создать .github/workflows/deploy.yml: name: Deploy on: push: branches: [main] paths:
    • 'main_dc/**'Текущие проблемы
  6. Деплой в 5 шагов: локальный код → push → SSH → pull → make (ручной, медленный)
  7. Добавление нового сайта требует правки 7+ файлов: .env, docker-compose.yml, nginx-http.conf, nginx-ssl.conf, switch-config.sh, init-certbot.sh, checkRenewCerts.sh, Makefile — легко забыть что-то
  8. HTTPS all-or-nothing: если у одного домена нет сертификата — все сайты падают на HTTP
  9. Certbot: дублирование кода на каждый домен в init-certbot.sh, checkRenewCerts.sh и 5 отдельных renew-скриптов
  10. Makefile растёт — на каждый сервис 4-5 целей Предложение Фаза 1: CI/CD через GitHub Actions Создать .github/workflows/deploy.yml: name: Deploy on: push: branches: [main] paths:
    • 'main_dc/**'

jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.HOST }} username: ${{ secrets.USER }} key: ${{ secrets.SSH_KEY }} script: | cd /home/valitovgaziz/tp git pull origin main # Определить какие сервисы изменились и пересобрать только их # Или просто: make all Преимущества: push → авто-деплой за ~1 мин, без SSH вручную. Фаза 2: Единый источник истины — sites.yml Ввести файл main_dc/sites.yml со списком всех сайтов: sites: yalarba: domain: yalarba.ru aliases: [www.yalarba.ru] type: spa root: /usr/share/nginx/yalarba/html api: http://api_tp/ api_yal: http://api_yal/

valitovgaziz: domain: valitovgaziz.ru aliases: [www.valitovgaziz.ru] type: container upstream: http://valitovgaziz/ api: http://analytics:3000/

easysite102: domain: easysite102.ru aliases: [www.easysite102.ru] type: container upstream: http://easysite:3000 api: http://api_yal:8787/

begushiybashkir: domain: begushiybashkir.ru aliases: [www.begushiybashkir.ru] type: spa root: /usr/share/nginx/begushiybashkir/html api: http://api_bb:8080/ Скрипт-генератор (generate-configs.sh) на основе sites.yml создаёт:

  • nginx-http.conf — HTTP-блоки
  • nginx-ssl.conf — HTTPS-блоки для каждого домена, каждый независимо проверяет свой сертификат
  • nginx-partial-ssl.conf — комбинированный: HTTPS где есть серт, HTTP где нет
  • certbot-domains.txt — список доменов для certbot
  • .env — переменные окружения Добавление нового сайта: 1 правка в sites.yml → ./generate-configs.sh → git commit. Фаза 3: Умный nginx — per-domain HTTPS Убрать all-or-nothing switch-config.sh. Вместо этого nginx грузит все конфиги через include: /etc/nginx/conf.d/ ├── 00-http-default.conf # HTTP на 80 ├── 10-yalarba-ssl.conf # HTTPS, если есть серт ├── 20-valitovgaziz-ssl.conf # HTTPS, если есть серт ├── 30-easysite102-ssl.conf # HTTPS, если есть серт └── common/ # Общие настройки Каждый файл SSL генерируется с if-проверкой наличия сертификата: server { listen 443 ssl; server_name valitovgaziz.ru www.valitovgaziz.ru; ssl_certificate /etc/letsencrypt/live/valitovgaziz.ru/fullchain.pem; ... } А HTTP-сервер делает return 301 https://$host$request_uri только для тех доменов, у кого есть сертификат. Остальные работают по HTTP. Фаза 4: Certbot — один скрипт для всех Вместо 5 renew-скриптов:

/opt/renew-all.sh — единый скрипт

certbot renew --webroot -w /var/www/certbot Certbot сам знает все домены, для которых получал сертификаты. --webroot с одним -w работает для всех. Убрать:

  • renewBegushiyBAshkirLatin.sh, renewBegushiyBashkir.sh, renewEasysite102.sh, renewValitovGazizCert.sh, renewYalarbaCert.sh
  • Заменить checkRenewCerts.sh на вызов certbot renew Фаза 5: Makefile — авто-детект изменений Оставить базовые цели, но добавить: deploy: git @echo "Detecting changes..." @git diff --name-only HEAD~1 HEAD | grep -o 'main_dc/[^/]*/' | sort -u | while read dir; do
    service=$(basename $dir);
    if grep -q "^ $$service:" docker-compose.yml; then
    make stop_$service build_service start_$service;
    fi
    done Или ещё проще: GitHub Actions сам определяет какие сервисы изменились и запускает только их make цели. Дорожная карта Шаг Что делаем Эффект 1 sites.yml + generate-configs.sh Добавление сайта = 1 файл 2 Переход на per-domain HTTPS в nginx Один сайт без серта не ломает другие 3 Упрощение certbot: единый certbot renew Удалить 5 скриптов 4 GitHub Actions deploy workflow push → авто-деплой 5 Makefile: deploy с авто-детектом Быстрый частичный деплой

jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.HOST }} username: ${{ secrets.USER }} key: ${{ secrets.SSH_KEY }} script: | cd /home/valitovgaziz/tp git pull origin main # Определить какие сервисы изменились и пересобрать только их # Или просто: make all Преимущества: push → авто-деплой за ~1 мин, без SSH вручную. Фаза 2: Единый источник истины — sites.yml Ввести файл main_dc/sites.yml со списком всех сайтов: sites: yalarba: domain: yalarba.ru aliases: [www.yalarba.ru] type: spa root: /usr/share/nginx/yalarba/html api: http://api_tp/ api_yal: http://api_yal/

valitovgaziz: domain: valitovgaziz.ru aliases: [www.valitovgaziz.ru] type: container upstream: http://valitovgaziz/ api: http://analytics:3000/

easysite102: domain: easysite102.ru aliases: [www.easysite102.ru] type: container upstream: http://easysite:3000 api: http://api_yal:8787/

begushiybashkir: domain: begushiybashkir.ru aliases: [www.begushiybashkir.ru] type: spa root: /usr/share/nginx/begushiybashkir/html api: http://api_bb:8080/ Скрипт-генератор (generate-configs.sh) на основе sites.yml создаёт:

  • nginx-http.conf — HTTP-блоки
  • nginx-ssl.conf — HTTPS-блоки для каждого домена, каждый независимо проверяет свой сертификат
  • nginx-partial-ssl.conf — комбинированный: HTTPS где есть серт, HTTP где нет
  • certbot-domains.txt — список доменов для certbot
  • .env — переменные окружения Добавление нового сайта: 1 правка в sites.yml → ./generate-configs.sh → git commit. Фаза 3: Умный nginx — per-domain HTTPS Убрать all-or-nothing switch-config.sh. Вместо этого nginx грузит все конфиги через include: /etc/nginx/conf.d/ ├── 00-http-default.conf # HTTP на 80 ├── 10-yalarba-ssl.conf # HTTPS, если есть серт ├── 20-valitovgaziz-ssl.conf # HTTPS, если есть серт ├── 30-easysite102-ssl.conf # HTTPS, если есть серт └── common/ # Общие настройки Каждый файл SSL генерируется с if-проверкой наличия сертификата: server { listen 443 ssl; server_name valitovgaziz.ru www.valitovgaziz.ru; ssl_certificate /etc/letsencrypt/live/valitovgaziz.ru/fullchain.pem; ... } А HTTP-сервер делает return 301 https://$host$request_uri только для тех доменов, у кого есть сертификат. Остальные работают по HTTP. Фаза 4: Certbot — один скрипт для всех Вместо 5 renew-скриптов:

/opt/renew-all.sh — единый скрипт

certbot renew --webroot -w /var/www/certbot Certbot сам знает все домены, для которых получал сертификаты. --webroot с одним -w работает для всех. Убрать:

  • renewBegushiyBAshkirLatin.sh, renewBegushiyBashkir.sh, renewEasysite102.sh, renewValitovGazizCert.sh, renewYalarbaCert.sh
  • Заменить checkRenewCerts.sh на вызов certbot renew Фаза 5: Makefile — авто-детект изменений Оставить базовые цели, но добавить: deploy: git @echo "Detecting changes..." @git diff --name-only HEAD~1 HEAD | grep -o 'main_dc/[^/]*/' | sort -u | while read dir; do
    service=$(basename $dir);
    if grep -q "^ $$service:" docker-compose.yml; then
    make stop_$service build_service start_$service;
    fi
    done Или ещё проще: GitHub Actions сам определяет какие сервисы изменились и запускает только их make цели. Дорожная карта Шаг Что делаем Эффект 1 sites.yml + generate-configs.sh Добавление сайта = 1 файл 2 Переход на per-domain HTTPS в nginx Один сайт без серта не ломает другие 3 Упрощение certbot: единый certbot renew Удалить 5 скриптов 4 GitHub Actions deploy workflow push → авто-деплой 5 Makefile: deploy с авто-детектом Быстрый частичный деплой