Files
lauadminandClaude Opus 5.5 2b7a92645a
CI / backend (pull_request) Successful in 3m7s
CI / frontend (pull_request) Failing after 15m55s
Add CRM stub flag, deploy/backup scripts, CI and prod runbook
- CRM_USE_STUB: local runs no longer reach the live CRM. With only the
  Checkbox stub, a stub receipt would still move the real order to PACKED.
  Refused in production, same as CHECKBOX_USE_STUB.
- scripts/deploy.sh: backup, fast-forward main, build, health check and
  code rollback on failure. scripts/backup.sh: pg_dump with verification
  and 14-day rotation (used by cron and deploy.sh).
- Gitea Actions CI: ruff + pytest, oxlint + build.
- DEPLOY.md runbook; CLAUDE.md rules for safe local development.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:52:20 +03:00

79 lines
4.1 KiB
Bash
Raw Permalink 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.
# ---------------------------------------------------------------------------
# lux_fiscal — пример конфигурации. Скопируйте в .env и заполните.
# cp .env.example .env
# ---------------------------------------------------------------------------
# --- Общее --------------------------------------------------------------
ENVIRONMENT=local # local | staging | production
DEBUG=true
LOG_LEVEL=INFO
PROJECT_NAME=lux_fiscal
# Базовый публичный URL приложения. Из него строится callback_url для Checkbox,
# поэтому в проде он обязан быть реальным https-адресом.
BASE_URL=http://localhost:8000
# Домены, которым разрешён доступ к API из браузера (через запятую).
CORS_ORIGINS=http://localhost:5173,http://localhost:8000
# --- Postgres -----------------------------------------------------------
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=lux_fiscal
POSTGRES_USER=lux_fiscal
POSTGRES_PASSWORD=change-me-postgres
# --- Redis --------------------------------------------------------------
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
# --- Криптография -------------------------------------------------------
# SECRET_KEY подписывает JWT. ENCRYPTION_KEY шифрует ключи Checkbox/CRM в БД.
#
# Сгенерировать оба ключа:
# python -c "import secrets; print(secrets.token_urlsafe(64))" # SECRET_KEY
# python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" # ENCRYPTION_KEY
#
# ВАЖНО: при смене ENCRYPTION_KEY все сохранённые ключи касс станут
# нечитаемыми — их придётся ввести заново через админку.
SECRET_KEY=change-me-generate-a-real-secret-key
ENCRYPTION_KEY=change-me-generate-a-real-fernet-key
ACCESS_TOKEN_EXPIRE_MINUTES=15
REFRESH_TOKEN_EXPIRE_DAYS=7
# --- Первый администратор ----------------------------------------------
# Создаётся один раз командой `python -m app.cli bootstrap`.
FIRST_ADMIN_EMAIL=admin@example.com
FIRST_ADMIN_PASSWORD=change-me-admin-password
FIRST_ADMIN_NAME=Администратор
# --- CRM (exoCRM) ---------------------------------------------------------
# Ключи доступа к магазину — запросить у администратора CRM.
CRM_BASE_URL=https://optstore.exocrm.com/api/1.1/
CRM_API_KEY=change-me-crm-apikey
CRM_SECRET_KEY=change-me-crm-secretkey
CRM_SHOP_KEY=change-me-crm-shopkey
CRM_SID=1
# Стаб вместо реальной CRM (локально — обязательно вместе с CHECKBOX_USE_STUB):
# иначе после стаб-чека боевой заказ уйдёт в PACKED. В production запрещено.
CRM_USE_STUB=true
# --- Nova Poshta ----------------------------------------------------------
# Ключи API Nova Poshta задаются у касс (страница «Кассы»). Эта переменная нужна
# только миграции 0008: переносит старый общий ключ в кассу по умолчанию.
NOVA_POSHTA_API_KEY=change-me-novaposhta-apikey
# --- Checkbox -------------------------------------------------------------
# Ключ лицензии кассы и PIN кассира вводятся в админке «Кассы» и хранятся в БД
# зашифрованными (ENCRYPTION_KEY), а не здесь.
CHECKBOX_BASE_URL=https://api.checkbox.ua
CHECKBOX_CLIENT_NAME=lux_fiscal
CHECKBOX_CLIENT_VERSION=0.1.0
# Пауза между запросами к Checkbox (мс): Новая Почта за Checkbox ограничивает частоту.
CHECKBOX_MIN_REQUEST_INTERVAL_MS=1000
# ЕТТН-чеки на тестовой кассе Checkbox не работают: локально весь цикл
# прогоняется через стаб (чек «фискализируется» на втором опросе). В production запрещено.
CHECKBOX_USE_STUB=true