Files
tp/main_dc/README.md
T
valitovgaziz 90a96b4125 Migrate easysite from api_es to api_yal
- Remove api_es service, Dockerfile, all Go source files
- Remove api_es from docker-compose.yml, nginx-ssl.conf, .env, Makefile
- Replace nginx /api/ proxy with /api/v1/ → api_yal:8787
- Add amenity/upload domains, AuthResponse, GET /auth/me, GET /objects/my to api_yal
- Rewrite easysite frontend: types, composables, and all 5 pages to use api_yal DTOs
- Wire nuxt.config public.apiBase, add useObjects CRUD composable
- Update docs references from api_es to api_yal
2026-06-12 10:14:38 +05:00

223 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Текущие проблемы
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/**'Текущие проблемы
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/**'
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 с авто-детектом Быстрый частичный деплой