Deploying React + FastAPI на Cloudflare Containers: опыт и подводные камни

#react#fastapi#cloudflare#deployment

Когда в проекте есть React, FastAPI, MongoDB и ещё AI от Anthropic — deployment превращается в квест. Особенно если пытаешься использовать относительно новые Cloudflare Containers. Разберём, когда это имеет смысл, а когда лучше выбрать Railway или другие варианты.

Контейнеры в Cloudflare: год спустя

Cloudflare Containers появились в 2023 как ответ на растущий спрос на edge-вычисления. На практике это обычные Docker-контейнеры, но:

Главный плюс для нашего случая — если у тебя много статики (React) и API (FastAPI), можно задеплоить всё в одном месте. Но есть нюансы:

# Пример Dockerfile для React + FastAPI
FROM python:3.10-slim as api
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .

FROM node:18 as frontend
WORKDIR /app
COPY frontend/package*.json .
RUN npm ci
COPY frontend .
RUN npm run build

FROM api
COPY --from=frontend /app/build /app/frontend/build
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]

Проблема в том, что Cloudflare Containers не любят «тяжёлые» процессы — наш 3-4 минутный отчет и вызовы AI могут упираться в лимит CPU (до 50 ms CPU time per request на базовом тарифе). Проверял на аналогичном проекте — запросы просто обрывались по таймауту.

Когда выбирать Railway

Railway подходит лучше, если:

  1. Есть долгие процессы (как генерация отчётов)
  2. Нужен простой managed MongoDB (Cloudflare его не предоставляет)
  3. Хочется меньше возни с конфигурацией

Но теряешь edge-развертывание и часть перфоманса для статики. Разница в цене незначительная — оба сервиса достаточно дёшевы для старта.

Особенности работы с AI-компонентами

Anthropic API требует стабильного интернета и нормального CPU. В моих тестах:

Вывод: если AI — критичная часть, возможно, стоит разделить deployment:

Что проверить перед выбором

  1. Замерь реальное время ответа API в продакшн-подобных условиях (у себя локально с --production флагами)
  2. Попробуй деплой на обоих сервисах с минимальным тестовым проектом
  3. Сравни cold start и поведение при нагрузке (Cloudflare иногда «засыпает» контейнеры)

Лично я сейчас предпочитаю гибридную схему: статика на Cloudflare Pages или даже Vercel, API — на Railway. Но если проект совсем маленький и без долгих операций — Containers вполне ок.

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


Попробуй сам: DigitalOcean — $200 кредитов для новых пользователей.


Источник: https://www.reddit.com/r/reactjs/comments/1uwwkq9/how_can_i_deploy_my_react_application_on/