From 0fb3b54b66faf9283ec3becca32971318c1eab85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=BB=D1=8C=D1=8F=D1=81=20=D0=A1=D1=83=D0=BB=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Tue, 8 Sep 2026 14:27:29 +0300 Subject: [PATCH] =?UTF-8?q?ci(deploy):=20=D0=BF=D1=80=D0=BE=D0=B4-compose?= =?UTF-8?q?=20=D0=B8=D0=B7=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B0=D1=82=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B8=D0=BD=D1=84=D1=80=D0=B0-=D1=80?= =?UTF-8?q?=D0=B5=D0=BF=D0=BE=20iistwin-infra=20(=D1=88=D0=B0=D0=B3=200.14?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Убраны git stash кастомизаций и восстановление compose из бэкапа вне репо. Источник правды для прод-compose: iisultanov/iistwin-infra (приватный), клонируется в /opt/crm-infra deploy-ключом при каждом деплое --- .github/workflows/deploy.yml | 23 +++++++++++------------ IMPLEMENTATION_LOG.md | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 05b66f6..d7f22f7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -71,21 +71,20 @@ jobs: set -e cd /opt/crm - # 1. Сохранить кастомизации сервера - git stash push -m 'server-customizations' \ - -- docker-compose.yml docker-entrypoint.sh \ - server/index.ts shared/schema.ts \ - client/src/services/auth.service.ts || true - - # 2. Получить ровно ту версию, что в GitHub (без merge-конфликтов) + # 1. Получить ровно ту версию кода, что в GitHub (без merge-конфликтов) git fetch origin main git reset --hard origin/main - # 3. Восстановить кастомизации - git stash pop || true - - # 4. Восстановить docker-compose из бэкапа (вне репозитория) - cp /opt/crm-server/docker-compose.yml.bak.serverfix docker-compose.yml + # 2. Прод-compose — из приватного инфра-репозитория (единственный источник правды). + # Раньше: git stash кастомизаций + копия из бэкапа вне репо (дрейф, шаг 0.14). + if [ ! -d /opt/crm-infra/.git ]; then + GIT_SSH_COMMAND="ssh -i /home/deploy/.ssh/id_ed25519_infra" \ + git clone git@github.com:iisultanov/iistwin-infra.git /opt/crm-infra + else + git -C /opt/crm-infra fetch origin main + git -C /opt/crm-infra reset --hard origin/main + fi + cp /opt/crm-infra/docker-compose.prod.yml docker-compose.yml # 5. Удалить старые/зависшие контейнеры, чтобы избежать # Conflict: container name is already in use diff --git a/IMPLEMENTATION_LOG.md b/IMPLEMENTATION_LOG.md index bd9b547..f105f73 100644 --- a/IMPLEMENTATION_LOG.md +++ b/IMPLEMENTATION_LOG.md @@ -498,3 +498,19 @@ - Что изменено: jsdom 30 → ^26 (devDependencies). - Как проверялось: vitest 118/118 локально; pr-check на этом коммите. - Подводные камни: CI = Node 20, локаль = Node 24 — расхождение учитывать при добавлении тестовых зависимостей. + +--- + +## [0.14] Дрейф конфигурации: прод-compose в приватном инфра-репозитории + +- Статус: ⏳ деплой (код запушен, первый деплой новой схемы — проверка) +- Зачем: прод работает ровно на коде из Git; убрать git stash и бэкап compose вне репо (аудит С5, решение пользователя — отдельный приватный репо). +- Что сделано: + - Создан приватный репо `iisultanov/iistwin-infra` (через GitHub API): `docker-compose.prod.yml` (бывший .bak.serverfix с лимитами 0.4), `README.md` (план перехода), `.env.template` (32 ключа без значений). + - На сервере: `/opt/crm-infra` — клон инфра-репо под deploy (deploy-key `id_ed25519_infra`, read-only deploy key в GitHub). + - `deploy.yml`: удалены stash push/pop и `cp .bak.serverfix`; вместо них — fetch/reset основного репо + fetch/reset `/opt/crm-infra` + `cp docker-compose.prod.yml`. + - Чистка дрейфа на сервере: `git stash clear` (3 старых стеша, в т.ч. дубль /apps static — уже в репо), снят UU-конфликт, HEAD чист. + - Старый `/opt/crm-server/docker-compose.yml.bak.serverfix` сохранён (откат до первого успешного деплоя новой схемы). +- Как проверялось: clone от deploy — OK; первый деплой новой схемы — ниже в этой записи. +- Влияние на поиск/UX: нет. +- Подводные камни: deploy-ключи GitHub нельзя шарить между репо (422) — у infra свой ключ; `.env` по-прежнему только на сервере; Traefik-метки/сеть n8n_proxy теперь версионируются в iistwin-infra.