基于React+FastAPI的全栈Web应用如何部署到DigitalOcean生产环境?
现有配置生产可用性评估
现有配置是开发环境配置,绝对不能直接用于生产部署,存在以下核心问题:
- 前端使用
npm start启动React开发服务器,仅适用于本地调试,性能极低、存在调试接口泄露风险,生产环境必须将React项目build为静态文件后托管。 - API服务的uvicorn启动参数带
--reload,属于开发调试功能,会监听文件变更自动重启服务,稳定性和性能都不符合生产要求,需移除该参数,高并发场景建议额外搭配Gunicorn做进程管理。 - Nginx配置存在语法错误:
server_name domain.com www.domain.com末尾缺少分号,会导致Nginx启动失败;另外location /api/的转发规则默认会将/api/前缀一同转发给后端API,若你的FastAPI接口没有统一加/api前缀,会统一返回404,可修改为proxy_pass http://api/;(末尾加斜杠自动去掉前缀),或者给FastAPI全局配置prefix="/api"。 - 所有代码目录都通过volume挂载到宿主机,生产环境需将代码直接构建到镜像内,避免宿主机文件意外变更影响服务运行,也方便镜像版本管理。
- PostgreSQL没有配置持久化volume,容器销毁后所有数据会直接丢失,需给db服务新增volume映射到宿主机持久化目录,例如添加
- ./pgdata:/var/lib/postgresql/data到volumes配置中。 - 依赖顺序配置错误:Splash是API服务的依赖项,当前配置写的是Splash依赖API/前端,可能出现API启动完成但Splash未就绪,爬虫调用失败的问题,需调整为API依赖Splash。
数据库与pgadmin部署建议
- PostgreSQL完全可以放在Docker中运行,只要做好持久化配置、定期备份,小体量项目使用Docker部署比直接安装在宿主机更易迁移、维护成本更低。
- pgadmin不要在生产环境暴露到公网:要么移除pgadmin的端口映射,仅允许容器内网访问,需要用的时候临时开启;要么增加Nginx基础身份验证+IP白名单限制,仅允许你自己的IP访问,避免被暴力破解导致数据泄露。
DigitalOcean上线操作步骤
- 选购Droplet:建议选择至少2核4G配置的Droplet,系统选择最新版Ubuntu LTS,提前在Droplet内安装好docker和docker-compose。
- 上传项目代码:通过git或者scp将项目代码上传到Droplet,注意不要上传
node_modules、__pycache__等无关文件。 - 修改生产配置:
- 调整前端Dockerfile为多阶段构建,先完成React项目的build,再将生成的静态文件拷贝到Nginx镜像内托管,移除开发服务器相关配置。
- 移除API服务的
--reload启动参数,取消代码目录的volume挂载,将代码直接构建到API镜像中。 - 给PostgreSQL添加持久化volume,调整Splash和API的依赖顺序。
- 修复Nginx配置的语法错误,添加HTTPS配置,可使用Let's Encrypt申请免费SSL证书,将所有80端口的HTTP请求重定向到443端口。
- 配置安全规则:在DigitalOcean后台的防火墙配置中,仅开放80、443端口和SSH需要的22端口,其余端口全部禁止公网访问,避免PostgreSQL、Splash等内部服务被攻击。
- 启动服务:执行
docker-compose up -d启动所有服务,通过docker logs 容器名检查各服务运行日志无报错后,访问你的域名测试前端、API接口、爬虫功能是否正常运行。 - 后续运维配置:配置Docker日志轮转避免日志占满磁盘,定期备份PostgreSQL数据,添加服务器资源、服务运行状态监控,及时处理异常。
内容的提问来源于stack exchange,提问作者LifeChaser97
相关产品推荐
相关产品推荐

