|
|
před 1 měsícem | |
|---|---|---|
| .. | ||
| README.md | před 1 měsícem | |
| deploy.sh | před 1 měsícem | |
| docker-compose.prod.yml | před 1 měsícem | |
| env.prod | před 2 měsíci | |
| env.prod.example | před 1 měsícem | |
| setup.sh | před 2 měsíci | |
# 1. Скопируйте шаблон
cp deploy/env.prod.example deploy/env.prod
# 2. Отредактируйте (или запустите deploy.sh — он предложит сгенерировать секреты)
vim deploy/env.prod
# 3. Деплой
bash deploy/deploy.sh
deploy/env.prod не коммитится в git (в .gitignore).
Поддерживаются 4 способа загрузки секретов (в порядке приоритета):
op)export OP_VAULT="Production"
export OP_ITEM="PhotoPlaces Secrets"
bash deploy/deploy.sh
Требует: op CLI, авторизованный (op signin).
export VAULT_ADDR="https://vault.example.com"
export VAULT_TOKEN="hvs.xxxxx"
export VAULT_PATH="secret/photoplaces"
bash deploy/deploy.sh
Требует: vault CLI, jq.
export AWS_SECRETS_NAME="prod/photoplaces"
bash deploy/deploy.sh
Требует: aws CLI, jq, IAM права на secretsmanager:GetSecretValue.
Если ни один из выше не настроен — используется deploy/env.prod.
Если кластер в Swarm mode (docker info | grep Swarm), deploy.sh автоматически создаёт Docker secrets:
# Секреты создаются из переменных окружения (загруженных из любого источника выше)
docker secret create db_password -
docker secret create redis_password -
docker secret create jwt_secret -
docker secret create jwt_refresh_secret -
docker secret create s3_secret_key -
В docker-compose.prod.yml сервисы читают секреты из /run/secrets/<name>.
Backend config (internal/config/config.go) поддерживает _FILE суффикс:
// JWT_SECRET_FILE=/run/secrets/jwt_secret → читает из файла
// JWT_SECRET=fallback → если файл не найден
| Переменная | Описание | Где используется |
|---|---|---|
DB_PASSWORD |
Пароль PostgreSQL | postgres, backend |
REDIS_PASSWORD |
Пароль Redis | redis, backend |
JWT_SECRET |
Подпись access токенов | backend |
JWT_REFRESH_SECRET |
Подпись refresh токенов | backend |
S3_SECRET_KEY |
Пароль MinIO | minio, backend |
S3_PUBLIC_ENDPOINT |
Публичный URL MinIO (для прямых загрузок) | frontend, backend |
NEXT_PUBLIC_API_URL |
Публичный URL API | frontend |
ALLOWED_ORIGINS |
CORS origins (через запятую) | backend |
# 32 байта = 64 hex chars
openssl rand -hex 32
# Для паролей БД/Redis можно короче
openssl rand -base64 24
deploy/env.prod в .gitignore- name: Deploy to production
env:
OP_VAULT: ${{ secrets.OP_VAULT }}
OP_ITEM: ${{ secrets.OP_ITEM }}
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
run: |
op signin --account ${{ secrets.OP_ACCOUNT }} --token $OP_SERVICE_ACCOUNT_TOKEN
bash deploy/deploy.sh