Docker Compose 一键部署前后端分离项目 📅 发布时间:2026/7/8 21:45:43 👁️ 浏览次数: 网罗开发小红书、快手、视频号同名大家好我是展菲目前在上市企业从事人工智能项目研发管理工作平时热衷于分享各种编程领域的软硬技能知识以及前沿技术包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者《ESP32-C3 物联网工程开发实战》图书作者《SwiftUI 入门进阶与实战》超级个体COC上海社区主理人特约讲师大学讲师谷歌亚马逊分享嘉宾科技博主华为HDE/HDG我的博客内容涵盖广泛主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告同时也会提供产品优缺点分析、横向对比并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。展菲您的前沿技术领航员 大家好我是展菲 全网搜索“展菲”即可纵览我在各大平台的知识足迹。 公众号“Swift社区”每周定时推送干货满满的技术长文从新兴框架的剖析到运维实战的复盘助您技术进阶之路畅通无阻。 微信端添加好友“fzhanfei”与我直接交流不管是项目瓶颈的求助还是行业趋势的探讨随时畅所欲言。 最新动态2025 年 3 月 17 日快来加入技术社区一起挖掘技术的无限潜能携手迈向数字化新征程文章目录前言项目结构建议docker-compose.yml 核心示例Nginx 配置要点环境变量与 .env一键启动与常用命令前端构建方式选择总结前言前后端分离项目如 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 # 占位数据卷挂载用Nginx 只做反向代理和静态资源配置放在nginx/default.conf。前端可以「先本地/CI 构建再 COPY 进镜像」也可以「在镜像里 npm build」后者镜像更大、构建更慢适合快速验证。后端镜像内只放代码和依赖数据库等通过环境变量注入。MySQL 数据持久化到宿主机目录或命名卷避免容器删除后丢数据。docker-compose.yml 核心示例version:3.9services:nginx:image:nginx:stableports:-80:80volumes:-./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro-./frontend/build:/usr/share/nginx/html:rodepends_on:-backendbackend:build:./backendenvironment:-DB_HOSTmysql-DB_PORT3306-DB_USERapp-DB_PASSWORD${DB_PASSWORD}-DB_NAMEappdbdepends_on:mysql:condition:service_healthymysql:image:mysql:8environment:MYSQL_ROOT_PASSWORD:${MYSQL_ROOT_PASSWORD}MYSQL_DATABASE:appdbMYSQL_USER:appMYSQL_PASSWORD:${DB_PASSWORD}volumes:-mysql_data:/var/lib/mysqlhealthcheck:test:[CMD,mysqladmin,ping,-h,localhost]interval:10stimeout:5sretries:5volumes:mysql_data:要点nginx挂载自定义配置和前端静态目录depends_on: backend保证启动顺序但不保证后端已就绪若需要可给 backend 做 healthcheck 再依赖。backendbuild: ./backend使用 backend 目录下的 Dockerfile 构建环境变量里 DB_HOST 写服务名mysqlCompose 会解析为 MySQL 容器 IPdepends_on.mysql.condition: service_healthy表示等 MySQL 健康后再起 backend避免启动时连不上库。mysql用healthcheck让 Compose 判断「已就绪」敏感信息用${DB_PASSWORD}等从.env或环境传入不要写死在 yml 里。volumesmysql_data命名卷由 Docker 管理数据持久化也可改为./mysql:/var/lib/mysql绑定宿主机目录。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_PASSWORDyour_app_db_password MYSQL_ROOT_PASSWORDyour_root_password在docker-compose.yml里用${DB_PASSWORD}引用Compose 会自动读取.env。生产环境也可在宿主机设置环境变量或使用 CI 注入。一键启动与常用命令# 构建并后台启动dockercompose up -d --build# 查看日志dockercompose logs -f backend# 停止并删除容器卷保留dockercompose down# 停止并删除容器与命名卷dockercompose down -v首次部署或依赖变更后建议docker compose up -d --build平时只改代码可只重建后端docker compose up -d --build backend。前端构建方式选择方式一宿主机/CI 先构建Compose 只挂载 build 目录宿主机执行cd frontend npm run builddocker-compose.yml中 nginx 挂载./frontend/build。优点镜像小、构建快缺点需保证宿主机有 Node 环境且 build 目录存在。方式二前端也做成镜像在镜像内 npm buildfrontend/Dockerfile 多阶段先 node 镜像 npm install npm run build再 nginx 镜像只 COPY build 结果。Compose 中 nginx 改用该前端镜像或仍用 nginx 镜像但静态资源从「前端镜像」的某路径挂载需多一步 volume from。更常见的做法是前端镜像产出静态文件Compose 里 nginx 的 build 阶段 COPY 前端构建产物或使用多服务配合 volume。简单起见很多项目采用方式一 仅 backend 和 mysql 用 Compose 构建。按团队习惯选择即可要「一条命令包含前端构建」就做前端镜像要「前端单独 CI 构建、Compose 只负责运行」就挂载 build 目录。总结Compose 把 nginx、backend、mysql 放同一网络nginx 反向代理到 backend静态资源挂载或从前端镜像提供mysql 用健康检查 depends_on 保证启动顺序。敏感信息用.env或环境变量数据持久化用命名卷或绑定目录。一键启动用docker compose up -d --build日常排错用logs、down。这样即可实现前后端分离项目的一站式 Docker 部署便于迁移与复现环境。
Java中,方法/类的修饰符的书写位置 一.书写顺序(含类、方法、字段) 在Java中,方法的修饰符和返回类型的书写顺序是有规定的 如main方法中,正确且标准的写法是: public static void main(String[] args){... } 这是Java社区、官方文档、IDE࿰… 2026/7/6 12:52:55
【51单片机】串口通讯从入门到精通:原理拆解 + 参数详解 + 51 单片机实战指南 🔥小龙报:个人主页 🎬作者简介:C研发,嵌入式,机器人方向学习者 ❄️个人专栏:《工科必装软件安装教程》《嵌入式的开端 ---- 51单片机》 ✨ 永远相信美好的事情即将发生 文章目录前言一、什么是… 2026/7/8 3:46:59
填志愿/选方向必看!计算机18大专业的终极选择攻略 一次搞懂计算机类18个本科专业方向的区别,谁是“宝藏”谁是“天坑”? 随着科技进步的日新月异,互联网在日常生活中所扮演的角色越来越重要。数字化、信息化的时代里,计算机类专业无疑是当今高考最热门且最具发展前景的志愿填报方… 2026/5/17 1:57:10
Linux core dump 配置实战:3种方法开启与 ulimit -c unlimited 详解 Linux Core Dump 配置与调试实战指南1. 核心转储基础概念当Linux应用程序发生段错误(SIGSEGV)、总线错误(SIGBUS)或其他致命信号时,系统会生成一个包含进程内存映像的文件,这就是所谓的核心转储(core dump)。这个文件记录了程序崩溃时的完整状态… 2026/7/8 21:45:33
STM32F446RE与NAU8224音频系统设计与优化 1. 项目背景与硬件选型解析在嵌入式音频系统设计中,选择合适的放大器与微控制器组合往往决定了最终产品的音质表现和能效水平。NAU8224作为Nuvoton公司推出的立体声Class-D音频放大器,搭配STMicroelectronics的STM32F446RE微控制器,形成了一个… 2026/7/8 21:43:32
Linux cp/rsync 3种排除文件方案对比:10万文件场景下的性能与适用性分析 Linux大规模文件复制排除方案深度评测:10万文件场景下的性能与选型指南在Linux系统管理中,文件复制是最基础却最频繁的操作之一。当面对包含10万级文件的目录时,如何高效地排除特定文件或目录进行复制,成为系统管理员和开发者必须… 2026/7/8 21:41:31
水文数据预处理 3 步法:以 2016-2021 年黄河水沙监测数据为例 水文数据预处理实战:从黄河水沙监测数据到高质量分析模型1. 数据清洗与预处理的重要性水文数据分析的第一步往往决定了整个项目的成败。原始监测数据中普遍存在的缺失值、异常记录和时间戳不规范等问题,就像隐藏在河流底部的暗礁,稍不注意就会… 2026/7/8 21:37:29
Windows 10 环境变量深度解析:从 Path 到 16 个核心变量作用详解 Windows 10 环境变量深度解析:从 Path 到 16 个核心变量作用详解 1. 环境变量:Windows 系统的神经脉络 想象一下,当你打开命令提示符输入 python 时,系统如何知道去哪里寻找这个可执行文件?这就是环境变量的魔力所在… 2026/7/8 21:35:28
2026最新AI培训推荐榜单:AI企业内训与智能体培训机构排名解析 随着AI大模型技术进入商业落地的“深水区”,企业对员工的AI能力要求已从“了解概念”升级为“能开发智能体、能解决业务问题”。面对市面上众多的服务商,HR和企业决策者常常面临选型难题。基于“场景结合度、实战落地性、资产沉淀能力、师资交付力”四大… 2026/7/8 21:33:27
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08