61 lines
1.6 KiB
Markdown
61 lines
1.6 KiB
Markdown
# Управление переменными окружения
|
|
|
|
## Принцип
|
|
|
|
Все настройки, которые меняются между окружениями — в переменных окружения. Никаких hardcoded значений.
|
|
|
|
## Формат: .env
|
|
|
|
```bash
|
|
# === Core ===
|
|
PROJECT_NAME=VoIdea
|
|
PROJECT_ENV=production
|
|
|
|
# === Server ===
|
|
SERVER_HOST=0.0.0.0
|
|
SERVER_PORT=8020
|
|
|
|
# === Database (PostgreSQL only) ===
|
|
DATABASE_URL=postgresql+asyncpg://voidea:password@localhost:5432/voidea
|
|
|
|
# === JWT ===
|
|
JWT_SECRET_KEY=your-secret-key
|
|
JWT_ALGORITHM=HS256
|
|
|
|
# === AI ===
|
|
AI_YANDEX_KEY=
|
|
AI_YANDEX_FOLDER_ID=
|
|
AI_GIGACHAT_CLIENT_ID=
|
|
AI_GIGACHAT_SECRET=
|
|
```
|
|
|
|
## Валидация при старте
|
|
|
|
```python
|
|
# app/core/config.py
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(env_file=".env", extra="ignore")
|
|
|
|
database_url: str = "postgresql+asyncpg://voidea:password@localhost:5432/voidea"
|
|
jwt_secret_key: str = ""
|
|
|
|
@property
|
|
def sync_database_url(self) -> str:
|
|
return self.database_url.replace("+asyncpg", "")
|
|
```
|
|
|
|
## Синхронизация .env.example
|
|
|
|
- `.env.example` в репозитории
|
|
- Обновляется при каждом добавлении переменной
|
|
- Все переменные с комментариями
|
|
- Чувствительные значения пустые
|
|
- Секции разделены `# === Name ===`
|
|
|
|
## Secrets management
|
|
|
|
| Окружение | Где хранить |
|
|
|-----------|-------------|
|
|
| Local | `.env` (в .gitignore) |
|
|
| Production | GitHub Secrets / 1Password |
|