Перейти к основному содержимому

Структура проекта

У каждого проекта два отдельных репозитория в вашей организации 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 НЕ ТРОГАТЬ

Оба репозитория создаются с рабочей заготовкой и деплоятся «зелёными» сразу — ты постепенно заменяешь код своим.

Helm chart и werf.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_ORIGINSURL для CORS

Для frontend домен API подставляется через VITE_API_URL (https://<домен>/api).