Структура проекта
У каждого проекта два отдельных репозитория в вашей организации project-NN:
backend и frontend. Они деплоятся независимо (push в backend обновляет только
backend, push в frontend — только frontend), но работают в одном пространстве:
на домене проекта / отдаёт frontend, /api — backend.
Не меняй .gitea/workflows/ci.yaml — это сломает деплой.
Репозиторий backend
backend/
├── Dockerfile ⚠️ контейнер non-root, слушает backend.port (8000)
├── requirements.txt
├── main.py заготовка (FastAPI) — замени своим приложением
├── test_main.py
├── deploy.yaml ✅ оверрайды деплоя (порт, env, worker, миграции)
└── .gitea/workflows/
└── ci.yaml НЕ ТРОГАТЬ
Репозиторий frontend
frontend/
├── Dockerfile ⚠️ nginx-unprivileged, слушает 8080
├── nginx.conf
├── index.html заготовка — замени своим приложением (напр. сборкой React)
├── deploy.yaml ✅ оверрайды деплоя
└── .gitea/workflows/
└── ci.yaml НЕ ТРОГАТЬ
Оба репозитория создаются с рабочей заготовкой и деплоятся «зелёными» сразу — ты постепенно заменяешь код своим.
Конфигурация сборки (werf.yaml) и Helm-чарт управляются платформой в
репозитории simple-env/deploy-action — в твоих репозитор иях их нет, и трогать
не нужно. Всё, что настраивается под проект, лежит в deploy.yaml.
Что можно менять в deploy.yaml
backend/deploy.yaml:
backend:
port: 8000
env: # несекретные переменные окружения
DJANGO_SETTINGS_MODULE: "config.settings.production"
# replicas: 1
# resources: {...} # дефолт: requests 100m/256Mi, limits 1/512Mi
# migrate: # раскомментируй, если нужны миграции (command обязателен)
# command: ["python", "manage.py", "migrate", "--noinput"]
# worker: # раскомментируй для Celery
# command: ["celery", "-A", "config", "worker", "-l", "info", "-c", "2"]
frontend/deploy.yaml:
frontend:
port: 8080
domain, project, registry, component приходят из настроек платформы и из
deploy.yaml не переопределяются.
Секретные переменные
Секреты (SECRET_KEY, API ключи и т.п.) хранятся в Kubernetes Secret app-secrets,
не в deploy.yaml. Напиши преподавателю список нужных переменных — он создаст Secret
в твоём namespace. Подробнее: Переменные окружения.
В коде backend они доступны как обычные env переменные:
import os
SECRET_KEY = os.environ['SECRET_KEY']
Переменные окружения (автоматические)
Доступны в контейнерах backend автоматически (из секрета db-credentials):
| Переменная | Описание |
|---|---|
DATABASE_URL | Полный URL подключения к PostgreSQL |
DB_HOST | Хост PostgreSQL |
DB_PORT | Порт (5432) |
DB_NAME | Имя базы данных |
DB_USER | Пользователь |
DB_PASSWORD | Пароль |
ALLOWED_HOSTS | Домен приложения |
CORS_ALLOWED_ORIGINS | URL для CORS |
Для frontend домен API подставляется через VITE_API_URL (https://<домен>/api).