From 163351b345a6517028c1e3e22935a440d5d4a4ba 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 15:15:17 +0300 Subject: [PATCH] =?UTF-8?q?docs(log):=20=D1=88=D0=B0=D0=B3=D0=B8=200.3,=20?= =?UTF-8?q?0.6,=200.14=20=E2=80=94=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=B4=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B4=D0=B5,=20=D1=8D=D1=82=D0=B0=D0=BF=20E=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IMPLEMENTATION_LOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/IMPLEMENTATION_LOG.md b/IMPLEMENTATION_LOG.md index f105f73..083b5ee 100644 --- a/IMPLEMENTATION_LOG.md +++ b/IMPLEMENTATION_LOG.md @@ -474,19 +474,19 @@ - Зачем: укоротить окно атаки при краже access-токена; токены в БД только в виде хэша. - Что изменено: дефолт JWT_ACCESS_EXPIRES 30d→15m (env сохранён); миграция 0082 (refresh_token_hash + parent/replaced_by хэши в user_sessions, reset_password_token_hash в users; очистка сессий = глобальный разлогин); выпуск/поиск/отзыв только по sha256-хэшу (server/utils/jwt.ts hashToken, users.storage.ts, auth.service.ts — rotateFamilySession, grace-ротация для гонки вкладок); resetPasswordTokenHash в исключениях SafeUser. Фронт не тронут — refresh реактивный по 401. - Как проверялось: 12 новых тестов (118/118); деплой на прод — сессии очищены миграцией (ожидаемо). -- Проверка на проде: re-login работает, refresh-ротация (access 15 мин) — см. ниже в этой записи после подтверждения. +- Проверка на проде: сессии очищены (user_sessions=0 после миграции), health 200, re-login/refresh — подтверждается пользователем в браузере (первый вход после деплоя). - Влияние на поиск/UX: нет; пользователи перелогинились один раз. - Подводные камни: bot_sessions не хэшированы (отдельная audience-модель, отложено); legacy plain-колонки удалить отдельной миграцией после стабилизации. ## [0.3] Не-root deploy-пользователь -- Статус: ✅ done +- Статус: ✅ done (деплой от deploy подтверждён; PermitRootLogin prohibit-password применён, root-ключ как fallback проверен — ROOT_KEY_OK) - Зачем: убрать постоянный root-SSH из CI. - Что изменено: - Сервер: пользователь `deploy` (uid 1000, группа docker), SSH-ключ `github-actions-deploy` (сгенерирован локально, публичный — в authorized_keys deploy, приватный — в секрет SSH_KEY через GitHub API, локальная копия `.ssh/deploy_ci` вне репо). - `/opt/crm` переписан на deploy:deploy; бэкап compose доступен на чтение. - `.github/workflows/deploy.yml`: `username: deploy`, хост — секрет `DEPLOY_HOST` (вместо хардкода). - - PermitRootLogin — будет выставлен в prohibit-password после подтверждения, что деплой от deploy работает (ниже). + - PermitRootLogin=prohibit-password (бэкап sshd_config.bak-20260908); root-ключ остаётся fallback. - Как проверялось: SSH от deploy + docker ps — OK; su deploy git status в /opt/crm — OK; деплой от deploy — после пуша этого коммита. - Влияние на поиск/UX: нет. - Подводные камни: на сервере остался UU-конфликт в index (последствие stash pop), чистится в 0.14; root-SSH пока остаётся как fallback до подтверждения. @@ -503,7 +503,7 @@ ## [0.14] Дрейф конфигурации: прод-compose в приватном инфра-репозитории -- Статус: ⏳ деплой (код запушен, первый деплой новой схемы — проверка) +- Статус: ✅ done (деплои `0fb3b54` и `a5ab294` успешны: без stash, git status на сервере чистый, Traefik/HTTPS работают, compose напрямую из инфра-репо через -f) - Зачем: прод работает ровно на коде из Git; убрать git stash и бэкап compose вне репо (аудит С5, решение пользователя — отдельный приватный репо). - Что сделано: - Создан приватный репо `iisultanov/iistwin-infra` (через GitHub API): `docker-compose.prod.yml` (бывший .bak.serverfix с лимитами 0.4), `README.md` (план перехода), `.env.template` (32 ключа без значений).