docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker Compose部署项目

Docker Compose实现一键部署前后端分离项目的完整指南

作者:展菲

这篇文章主要为大家详细介绍了Docker Compose实现一键部署前后端分离项目的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

前言

前后端分离项目(如 React + Python FastAPI)在生产环境往往还依赖 Nginx、MySQL 等,若逐个起容器、配网络和卷,容易出错且难复现。用 Docker Compose 把前端、后端、Nginx、数据库写进一个 docker-compose.yml,一条命令即可拉起整套环境,便于本机联调与服务器部署。

本文只讲 Compose 的编排思路和关键配置,不贴完整可运行 Demo。

项目结构建议

app/
├── docker-compose.yml
├── nginx/
│   └── default.conf
├── frontend/
│   ├── Dockerfile
│   └── build/          # 或由 CI 构建后放入
├── backend/
│   ├── Dockerfile
│   └── main.py
└── mysql/
    └── .gitkeep        # 占位,数据卷挂载用

docker-compose.yml 核心示例

version: "3.9"

services:
  nginx:
    image: nginx:stable
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./frontend/build:/usr/share/nginx/html:ro
    depends_on:
      - backend

  backend:
    build: ./backend
    environment:
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_USER=app
      - DB_PASSWORD=${DB_PASSWORD}
      - DB_NAME=appdb
    depends_on:
      mysql:
        condition: service_healthy

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: appdb
      MYSQL_USER: app
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  mysql_data:

要点:

Nginx 配置要点

nginx/default.conf 中需包含:静态资源 root、SPA 的 try_files、以及 /api 反向代理到 backend 服务名:

server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html;
    location / {
        try_files $uri $uri/ /index.html;
    }
    location /api {
        proxy_pass http://backend:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

这里 proxy_pass http://backend:8000 中的 backend 是 Compose 里后端服务的名字,端口为容器内端口(如 8000)。若后端以 /api 为前缀,保持 location /api 与后端一致;若后端根路径是 /,可写 location /api/ { proxy_pass http://backend:8000/; } 做路径剥离。

环境变量与 .env

在项目根目录建 .env(不要提交到 Git),例如:

DB_PASSWORD=your_app_db_password
MYSQL_ROOT_PASSWORD=your_root_password

docker-compose.yml 里用 ${DB_PASSWORD} 引用,Compose 会自动读取 .env。生产环境也可在宿主机设置环境变量或使用 CI 注入。

一键启动与常用命令

# 构建并后台启动
docker compose up -d --build

# 查看日志
docker compose logs -f backend

# 停止并删除容器(卷保留)
docker compose down

# 停止并删除容器与命名卷
docker compose down -v

首次部署或依赖变更后建议 docker compose up -d --build,平时只改代码可只重建后端:docker compose up -d --build backend

前端构建方式选择

方式一:宿主机/CI 先构建,Compose 只挂载 build 目录

方式二:前端也做成镜像,在镜像内 npm build

按团队习惯选择即可:要「一条命令包含前端构建」就做前端镜像;要「前端单独 CI 构建、Compose 只负责运行」就挂载 build 目录。

总结

这样即可实现前后端分离项目的一站式 Docker 部署,便于迁移与复现环境。

到此这篇关于Docker Compose实现一键部署前后端分离项目的完整指南的文章就介绍到这了,更多相关Docker Compose部署项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文