You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django+React项目从开发到部署的最佳方式咨询

Best Deployment Options for Django + React Separate Apps

Hey there! I’ve been in your exact spot before—crushing local development with Django running on one port and React on another, then hitting a brick wall when trying to get everything live. Let’s walk through the most reliable deployment approaches, based on what I’ve implemented and seen work for teams of all sizes.


Option 1: Integrate React Build Files into Django (Single Server Setup)

This is the most straightforward approach for small to mid-sized apps, eliminating cross-domain issues entirely since everything runs under the same domain.

Step-by-Step:

  • First, build your React app for production:
    npm run build
    
    This generates a build folder with minified static assets and your index.html.
  • Update your Django project's settings.py:
    • Set STATIC_ROOT = BASE_DIR / 'staticfiles' (where Django collects all static assets)
    • Add React's build static files to STATICFILES_DIRS:
      STATICFILES_DIRS = [
          BASE_DIR / 'path/to/react/app/build/static',
      ]
      
    • Update the TEMPLATES setting to include React's build directory in DIRS:
      TEMPLATES = [
          {
              # ... other settings
              'DIRS': [BASE_DIR / 'path/to/react/app/build'],
          },
      ]
      
  • Create a simple Django view to serve React's index.html (for handling client-side routing):
    # views.py
    from django.shortcuts import render
    
    def react_app(request):
        return render(request, 'index.html')
    
  • Map this view to your root URL in urls.py:
    path('', views.react_app),
    
  • Run Django's static collection command to gather all assets into STATIC_ROOT:
    python manage.py collectstatic
    
  • Deploy the combined app using:
    • A WSGI server like gunicorn to run Django: gunicorn your_project.wsgi
    • Nginx as a reverse proxy to handle static files and forward API requests to Gunicorn.

Pros:

  • No cross-domain configuration needed
  • Single server to manage, lower hosting cost
  • Quick to set up for small projects

Cons:

  • Frontend updates require rebuilding React and re-running collectstatic
  • Tighter coupling between frontend and backend, making independent deployments harder

Option 2: Separate Deployment (Frontend + Backend on Independent Services)

This is ideal if your team works on frontend and backend separately, or if you want to scale each part independently.

Step-by-Step:

Backend (Django) Deployment:

  • Deploy your Django API to a server or PaaS platform (e.g., DigitalOcean, Railway, Heroku)
  • Use gunicorn/uWSGI + Nginx to serve the API, or let the PaaS handle it
  • Install django-cors-headers and configure settings.py to allow your frontend domain:
    INSTALLED_APPS = [
        # ...
        'corsheaders',
    ]
    
    MIDDLEWARE = [
        # ...
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware',
    ]
    
    CORS_ALLOWED_ORIGINS = [
        "https://your-frontend-domain.com",
        "http://localhost:3000", # for local dev
    ]
    
  • Set your API's base URL (e.g., https://api.yourdomain.com)

Frontend (React) Deployment:

  • Build your React app with npm run build
  • Deploy the build folder to a static hosting service (e.g., Vercel, Netlify) or a separate Nginx server
  • Update your React app's axios base URL to point to your Django API:
    axios.defaults.baseURL = 'https://api.yourdomain.com';
    

Pros:

  • Frontend and backend can be deployed independently without affecting each other
  • Easy to scale each service separately (e.g., add more backend instances for API traffic)
  • Perfect for team workflows where frontend and backend teams work in parallel

Cons:

  • Requires managing two separate deployment environments
  • Cross-domain configuration adds a small layer of complexity

Option 3: Containerized Deployment with Docker

If you want consistent environments across development and production, or plan to scale to multiple servers, Docker is the way to go.

Step-by-Step:

  • Create a Dockerfile for your Django app (example):
    FROM python:3.11-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "your_project.wsgi"]
    
  • Create a Dockerfile for your React app (example):
    FROM node:18-alpine as build
    WORKDIR /app
    COPY package*.json ./
    RUN npm install
    COPY . .
    RUN npm run build
    
    FROM nginx:alpine
    COPY --from=build /app/build /usr/share/nginx/html
    COPY nginx.conf /etc/nginx/conf.d/default.conf
    
  • Write a docker-compose.yml to orchestrate both services and a reverse proxy Nginx:
    version: '3.8'
    services:
      django:
        build: ./django-app
        ports:
          - "8000:8000"
      react:
        build: ./react-app
        ports:
          - "3000:80"
      nginx:
        image: nginx:alpine
        ports:
          - "80:80"
        volumes:
          - ./nginx-proxy.conf:/etc/nginx/conf.d/default.conf
        depends_on:
          - django
          - react
    
  • Configure the Nginx proxy to forward /api requests to Django and all other requests to React.
  • Push your Docker images to a registry (Docker Hub, AWS ECR) and deploy to a server with Docker installed, or use a container orchestration tool like Kubernetes for larger setups.

Pros:

  • Consistent environment from local dev to production (no "it works on my machine" issues)
  • Easy to scale and replicate across multiple servers
  • Isolates dependencies between frontend and backend

Cons:

  • Requires learning Docker basics (worth it long-term, though)
  • Initial setup is more complex than the other options

Final Recommendations

  • Small app/side project: Go with Option 1 for quick, simple deployment.
  • Team with separate frontend/backend workflows: Option 2 is the best fit for independent deployments.
  • Scalable app or need consistent environments: Option 3 is the long-term solution that pays off as your app grows.

内容的提问来源于stack exchange,提问作者user1831541

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:36:20