一次部署docker项目的踩坑和总结
部署前准备工作-fastapi解决跨域
后端添加 CORS 支持
遇到的问题:
- ❌ CORS 跨域错误
解决方案(main.py):
python
1 | from fastapi import FastAPI |
解决自动识别开发环境/生产环境
🎯 核心原理总结
最关键的三个部分:
1️⃣ 环境文件(项目根目录)
bash
1 | .env.development # 开发环境 |
env
1 | VUE_APP_API_BASE_URL=http://localhost:8000 |
2️⃣ Axios 实例(src/utils/request.js)
javascript
1 | const request = axios.create({ |
3️⃣ 运行命令
bash
1 | npm run serve → 自动用开发环境(localhost:8000) |
改造 HotVideosView 等vue组件 做了什么?
只做了 4 件事:
- 改导入:
axios→request - 删数据:删除
apiBaseUrl: 'http://...' - 改调用:
axios.get(完整URL)→request.get(相对路径) - 改数据:
response.data→ 直接用data
为什么这样改有效?
javascript
1 | // request 实例已经配置了 baseURL |
你以后开发新功能的标准模板:
javascript
1 | <script> |
主要改动:
- ✅ 导入
request实例替代axios - ✅ 移除了
apiBaseUrl数据项 - ✅ 使用
request.get('/api/hot-videos')替代完整 URL - ✅ 简化了错误处理
- ✅
data直接是响应数据(注意数据结构从response.data变成了data)
现在所有三个页面都统一使用 axios 实例:
- ✅ HomeView - 首页推荐
- ✅ HotVideosView - 热门排行榜
- ✅ NostalgiaVideosView - 怀旧视频收藏夹
统一的优势:
- 🚀 自动识别开发/生产环境
- 🔧 统一的错误处理
- 📝 统一的日志记录
- 🎯 只需维护一个配置文件-> request.js ↓
1 | import axios from 'axios' |
🎯 简单总结 request.js 的作用
把它想象成一个"请求助手":
1. 基础配置(创建实例)
javascript
1 | const request = axios.create({ |
2. 请求前处理(请求拦截器)
javascript
1 | request.interceptors.request.use(config => { |
3. 响应后处理(响应拦截器)
javascript
1 | request.interceptors.response.use(response => { |
4. 完整请求流程
1 | 组件调用 → 请求拦截器 → 发送请求 → 服务器响应 → 响应拦截器 → 组件接收 |
核心好处:写一次配置,所有地方自动生效! ✨
🚀 FastAPI + Vue 项目 Docker 部署完整总结
📋 项目概述
项目结构:
1 | animeV/ |
🎯 部署架构
1 | 浏览器 |
📝 完整部署过程
第一阶段:准备工作
1. 本地开发环境
bash
1 | # 项目目录 |
2. 安装 Docker 和必要工具
bash
1 | # 服务器端 |
第二阶段:创建 Docker 配置文件
1. 后端 Dockerfile
遇到的问题:
- ❌ pip 安装超时
- ❌ 缺少 bilibili-api-python 依赖
- ❌ 网络问题
最终配置:
dockerfile
1 | FROM python:3.9-slim |
2. 后端 requirements.txt
遇到的问题:
- ❌ 初始只有 fastapi 和 uvicorn
- ❌ 缺少 bilibili-api-python 导致 ModuleNotFoundError
最终配置:
txt
1 | fastapi |
3. 后端添加 CORS 支持
遇到的问题:
- ❌ CORS 跨域错误
解决方案(main.py):
python
1 | from fastapi import FastAPI |
4. 前端 Dockerfile
遇到的问题:
- ❌ npm 镜像源超时
- ❌ package-lock.json 锁定了错误的镜像源
- ❌ vue-cli-service 权限问题
- ❌ 构建超时
解决方案:本地构建 + 服务器部署
dockerfile
1 | FROM nginx:alpine |
5. 前端 nginx.conf
nginx
1 | server { |
6. docker-compose.yml
最终配置:
yaml
1 | services: |
第三阶段:前端配置
1. API 地址配置问题
遇到的问题:
- ❌ 硬编码 localhost:8000
- ❌ 多处配置不一致
最终方案:环境自动判断
main.js:
javascript
1 | import axios from 'axios' |
HomeView.vue:
javascript
1 | data() { |
2. 本地开发代理配置
vue.config.js:
javascript
1 | const { defineConfig } = require('@vue/cli-service') |
第四阶段:上传和部署
1. 本地构建前端
bash
1 | # Windows 本地 |
2. 上传文件到服务器
使用 WinSCP:
1 | 连接信息: |
3. 服务器构建和运行
bash
1 | ssh root@120.77.237.223 |
第五阶段:网络配置
1. 阿里云安全组配置
开放端口:
1 | 端口协议用途 |
2. 服务器防火墙
bash
1 | # 开放端口 |
指定地址路由部署->xxx.com/bili
解决方案 1: 修改 vue.config.js
把 assetsDir 去掉或改为空字符串
1 | // D:\PycharmProjects\animeV\animeshow\vue.config.js |
配置nginx
1 | server { |
完整部署流程
1 | # 1. 确保 vue.config.js 已修改(去掉 assetsDir) |
评论



