deploy: split runtime env into individual secrets

This commit is contained in:
a.tolmachev
2026-04-11 12:18:30 +03:00
parent 0c17058d21
commit 9b6ce337e6
3 changed files with 90 additions and 36 deletions
+30 -11
View File
@@ -212,7 +212,7 @@ CD для MVP должен:
1. push в `main`
2. успешный `CI`
3. build and push images в registry
4. upload env и deployment files
4. upload runtime env и deployment files
5. `docker login` на registry на целевом хосте
6. `docker compose config -q`
7. `docker compose pull`
@@ -233,19 +233,38 @@ CD для MVP должен:
Они используются только для `docker login` на целевом Linux host перед `docker compose pull`.
Для точечных runtime override без переписывания всего `DEPLOY_ENV_FILE` можно использовать
отдельные deployment secrets. Сейчас поддержан:
Монолитный `DEPLOY_ENV_FILE` больше не используется.
- `DEPLOY_MASTER_KEY`
- `DEPLOY_DEMO_SEED`
Workflow собирает `.env` на сервере из отдельных GitHub secrets. Для runtime-переменных нужно
создавать secrets с теми же именами, что и у приложений:
Если задан `DEPLOY_MASTER_KEY`, workflow удаляет `CRANK_MASTER_KEY` из сгенерированного `.env`
и записывает туда значение из `DEPLOY_MASTER_KEY`. Это позволяет ротировать master key или
добавлять его отдельно, не переписывая весь `DEPLOY_ENV_FILE`.
- `POSTGRES_DB`
- `POSTGRES_USER`
- `POSTGRES_PASSWORD`
- `CRANK_DATABASE_URL`
- `CRANK_STORAGE_ROOT`
- `CRANK_PUBLISH_HOST`
- `CRANK_ADMIN_BIND`
- `CRANK_MCP_BIND`
- `CRANK_MCP_REFRESH_MS`
- `CRANK_LOG_LEVEL`
- `CRANK_SECRET_PROVIDER`
- `CRANK_MASTER_KEY`
- `CRANK_PUBLIC_BASE_URL`
- `CRANK_MCP_PUBLIC_URL`
- `CRANK_SESSION_SECRET`
- `CRANK_PASSWORD_PEPPER`
- `CRANK_SESSION_TTL_HOURS`
- `CRANK_BOOTSTRAP_ADMIN_EMAIL`
- `CRANK_BOOTSTRAP_ADMIN_PASSWORD`
- `CRANK_BOOTSTRAP_ADMIN_DISPLAY_NAME`
- `CRANK_DEMO_SEED`
Если задан `DEPLOY_DEMO_SEED`, workflow удаляет `CRANK_DEMO_SEED` из сгенерированного `.env`
и записывает туда значение из `DEPLOY_DEMO_SEED`. Это позволяет временно включать и выключать
demo seed отдельным secret, не переписывая основной production `.env`.
Практически это означает:
- одна runtime-переменная = один GitHub secret;
- ротация одного секрета не требует переписывать весь набор env;
- `.env` на сервере каждый deploy собирается заново из актуальных secrets.
## 12. Что нельзя забыть
+7 -4
View File
@@ -142,11 +142,14 @@ Demo/deployment:
- `CRANK_DEMO_SEED=true`
В deployment workflow этот флаг можно переопределять отдельно через GitHub secret
`DEPLOY_DEMO_SEED`, не меняя основной `DEPLOY_ENV_FILE`.
В deployment workflow больше не используется монолитный `DEPLOY_ENV_FILE`.
Аналогично `CRANK_MASTER_KEY` можно прокидывать отдельным GitHub secret `DEPLOY_MASTER_KEY`,
если не хочется каждый раз переписывать весь `DEPLOY_ENV_FILE` ради одного ключа.
`.env` на сервере собирается из отдельных GitHub secrets, причем имя секрета совпадает с именем
runtime env-переменной. Это значит, что:
- `CRANK_MASTER_KEY` хранится как GitHub secret `CRANK_MASTER_KEY`;
- `CRANK_DEMO_SEED` хранится как GitHub secret `CRANK_DEMO_SEED`;
- и так же для остальных runtime-переменных.
## 8.1. Delivery artifacts