ДокументацияБезопасность и развертывание
Развертывание
Две команды: nx build производит артефакты, nx start их обслуживает.
Прежде чем начать: проект, который собирается локально с помощью nx build и — для клиентских страниц — набор инструментов внешнего интерфейса, установленный nx new.
nx buildnx start --host 0.0.0.0 --port 8000
Среде выполнения требуется только Python. Uvicorn обслуживает скомпилированное приложение и статические ресурсы; ни один процесс Node и процесс Vite не задействованы.
Что дает сборка
__nexy__/ содержит скомпилированные модули маршрутов, клиентский пакет в __nexy__/client/ и предварительно обработанный HTML для маршрутов платформы. Скопируйте проект — исходный код плюс __nexy__/ — или создайте его внутри образа.
Docker
На этапе сборки необходим Node (для Vite) и Python (для компилятора). На этапе выполнения требуется только Python.
FROM node:22-bookworm-slim AS buildWORKDIR /app COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uvCOPY pyproject.toml uv.lock ./RUN uv sync --frozen --no-install-project COPY . .RUN uv sync --frozen && uv run nx build FROM python:3.13-slimWORKDIR /appCOPY --from=build /app /appENV PATH="/app/.venv/bin:$PATH" EXPOSE 8000CMD ["nx", "start", "--host", "0.0.0.0", "--port", "8000"]uv извлекает управляемый Python, когда в базовом образе его нет, поэтому этап сборки может начаться с образа узла.
За обратным прокси
Запустите nx start на локальном хосте и позвольте Nginx, Caddy или прокси-серверу платформы завершить TLS:
nx start --host 127.0.0.1 --port 8000
Убедитесь, что прокси-сервер пересылает обновления WebSocket, если вы используете обработчики SOCKET, и что он пересылает исходный хост — FastAPI создает из него абсолютные URL-адреса.
Проверка здоровья
Добавьте файл-обработчик src/routes/api/health.py и проверьте /api/health — вместо страницы, которая может отображаться медленно:
async def GET(): return {"status": "ok"}Добавьте контроллер и проверьте /health/ — вместо представления, которое может отображаться медленно:
from nexy.decorators import Controller @Controller("/health")class HealthController: async def get(self): return {"status": "ok"}Перечислите его в controllers корневого модуля.
Встроенные конечные точки
Балансировщик нагрузки или Kubernetes задает два вопроса: активен ли процесс и может ли он получать трафик? Установите useHealth и Nexy отвечает оба, без файла-обработчика и без контроллера:
from nexy.core.models import NexyConfigModel class NexyConfig(NexyConfigModel): useHealth = True| Конечная точка | Ответы 200 | Ответы 503 |
|---|---|---|
GET /health/live |
пока процесс отвечает | никогда |
GET /health/ready |
как только приложение запустится | пока он запускается, и как только сервер попросит его остановиться |
Nexy гарантирует, что /health/ready следует за запуском и завершением работы сервера.
Nexy гарантирует, что обе конечные точки останутся вне журнала доступа и схемы OpenAPI.
Nexy гарантирует, что обе конечные точки ответят до useTrustedHost и useHTTPSRedirect, поэтому зонд, отправленный по HTTP на адрес модуля, не будет отклонен.
По соглашению вы держите свои собственные маршруты отключенными от /health/live и /health/ready, пока useHealth включен: конечные точки Nexy отвечают первыми. useHealth по умолчанию равен False, поэтому проект, в котором он не установлен, сохраняет оба пути.
Ваше приложение отвечает за проверку того, от чего оно зависит: /health/ready сообщает о жизненном цикле сервера, а не о состоянии базы данных.
Направьте на них зонды Kubernetes Deployment:
apiVersion: apps/v1kind: Deploymentmetadata: name: appspec: replicas: 2 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: registry.example.com/app:1.0 ports: - containerPort: 8000 livenessProbe: httpGet: path: /health/live port: 8000 periodSeconds: 10 readinessProbe: httpGet: path: /health/ready port: 8000 periodSeconds: 5Статический хостинг
Каждая страница представляет собой HTML, но Nexy предполагает наличие сервера для маршрутизации и обработчиков API.
Контрольный список
-
nx buildв CI нет предупреждений для маршрутов, которые вы планируете отображать на сервере. -
nx startзавершается с кодом 1 и ничего не запускает, если файл маршрута не может загрузиться -
NEXY_ACTION_SECRETустановлено или__nexy__/action.keyсохраняется вместе со сборкой -
useDocs = Falseв производстве, если схема API не должна быть общедоступной -
useTrustedHostиuseHTTPSRedirectустановлены для публичного развертывания. -
useHealth = Trueкогда балансировщик нагрузки или Kubernetes проверяет приложение -
__nexy__/не зафиксировано
Следующие шаги
- Конфигурация: HTTPS, доверенные хосты, сеансы.
- Фронтенд: что строит Vite
- Тестирование: команды для запуска в CI