news 2026/6/10 15:12:18

FastAPI+VUE3创建一个项目的步骤模板(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastAPI+VUE3创建一个项目的步骤模板(三)

部署交付

FastAPI 和 Vue 3 的部署通常遵循前后端分离的原则,各自独立部署,通过域名和端口进行通信。

我们将把部署分为以下三个主要部分讲解:

  1. 🚀 部署策略概述(如何分离和通信)
  2. 🐍 FastAPI 后端部署(使用 Gunicorn/Uvicorn 和服务器)
  3. 🖼️ Vue 3 前端部署(静态文件托管)

1. 🚀 部署策略概述

在开发阶段,我们使用http://localhost:8000(FastAPI) 和http://localhost:5173(Vue) 进行本地调试。部署后,我们需要一个更稳定的方案。

部署目标架构

组件部署方式角色关键点
FastAPI(后端)部署到云服务器(如 DigitalOcean/AWS/阿里云)或 PaaS 平台(如 Render/Fly.io)。负责 API 逻辑和数据。必须使用Gunicorn或类似工具作为进程管理器,不能只用uvicorn main:app
Vue 3(前端)打包成静态文件(HTML/CSS/JS),托管到 CDN 或 Nginx/Apache 服务器。负责用户界面和 HTTP 请求。必须修改前端代码中的 API 地址。
Nginx (可选)作为反向代理,位于前端和后端之间。处理 HTTPS、负载均衡和静态文件服务。推荐在生产环境中使用。

2. 🐍 FastAPI 后端部署 (生产环境)

FastAPI 使用Uvicorn,但 Uvicorn 默认是单进程的,不适合生产环境。生产环境需要一个WSGI/ASGI 进程管理器来管理多个工作进程,实现稳定性和并发性。最常见的方式是结合Gunicorn来管理 Uvicorn。

A. 生产依赖安装

首先,在fastvue-todo目录下,记录所有依赖 (生产环境需要):

# 假设你还在虚拟环境中 (venv)pipinstallgunicorn pip freeze>requirements.txt

B. 生产运行命令

本地开发的命令是:

uvicorn main:app --reload

生产环境的推荐命令是(使用 Gunicorn 管理多个 Uvicorn Worker):

gunicorn main:app --workers4--worker-class uvicorn.workers.UvicornWorker --bind0.0.0.0:8000
  • --workers 4: 启动 4 个工作进程,通常是 CPU 核心数的2×N+12 \times N + 12×N+1NNN个。
  • --worker-class uvicorn.workers.UvicornWorker: 指定 Gunicorn 使用 Uvicorn 来处理 ASGI 请求。
  • --bind 0.0.0.0:8000: 绑定到所有网络接口和 8000 端口,以便外部访问。

C. 部署到服务器 (例如使用 Linux VM)

  1. 环境准备:安装 Python、Git、并克隆你的项目代码。
  2. 安装依赖:pip install -r requirements.txt
  3. 使用 Systemd/Supervisor:你应该使用 Linux 的服务管理器 (如 Systemd) 来确保你的 Gunicorn 进程在服务器重启时自动启动,并且如果崩溃可以自动重启。
    • Systemd 示例 (/etc/systemd/system/fastapi.service):
      [Unit] Description=Gunicorn instance to serve FastAPI After=network.target [Service] User=your_user_name WorkingDirectory=/path/to/your/fastvue-todo ExecStart=/path/to/venv/bin/gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 [Install] WantedBy=multi-user.target
    • 然后使用sudo systemctl start fastapisudo systemctl enable fastapi启动服务。

3. 🖼️ Vue 3 前端部署 (静态托管)

前端只需要构建一次,然后将生成的静态文件托管起来。

A. 构建 Vue 3 应用

vue-frontend目录下运行构建命令:

cdvue-frontendnpmrun build

这个命令会在项目根目录生成一个名为dist的文件夹。这个文件夹包含了所有优化后的 HTML, CSS 和 JavaScript 文件。

B. 修改 API 基础 URL (关键步骤)

在部署前,需要在 Vue 代码中将 API 地址从本地http://127.0.0.1:8000更改为实际生产环境域名

例如,如果 FastAPI 后端部署在api.mytodomain.com上,需要修改App.vue中的:

// vue-frontend/src/App.vueconstapiBaseUrl='http://127.0.0.1:8000';// 修改前// 生产环境应该修改为:constapiBaseUrl='https://api.mytodomain.com';// 修改后

提示:更优雅的做法是使用 Vite 的环境变量 (VITE_APP_API_URL) 来根据环境自动切换 API 地址。

C. 托管dist文件夹

你可以选择以下几种方式托管dist文件夹的内容:

  1. 静态主机 (最简单):使用 Netlify, Vercel, 或 GitHub Pages。这些服务专门用于托管静态文件,提供 CDN 加速和 SSL/TLS (HTTPS)。
  2. Web 服务器:dist文件夹的内容上传到你的 Web 服务器(如 Nginx 或 Apache)的根目录。
  3. 云存储:将文件上传到 AWS S3 或 Azure Blob Storage,并配合 CDN 服务。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 5:44:38

silvaco学习记录(九)GaNdiode的瞬态正弦波信号仿真

最近在看微波注入信号的方面文章,发现常用的就是阶跃信号和正弦波信号,在atlas中阶跃信号可以很方便的直接加在电极上,但当我学习到正弦波信号的时候,耗费了很长时间,我起初在手册里看到了sin相关的语句,在…

作者头像 李华
网站建设 2026/6/10 13:09:02

基于SpringBoot的超能驾校线上学习管理系统的设计与实现(毕业设计项目源码+文档)

课题摘要在驾培行业数字化转型加速、传统驾校学习管理存在 “理论学习碎片化、练车预约低效、考核进度不透明、教学数据难统计” 的痛点背景下,基于 SpringBoot 的超能驾校线上学习管理系统构建具有重要的行业与用户价值:从学员层面,系统整合…

作者头像 李华
网站建设 2026/6/10 13:45:58

基于大数据的电子产品销售数据分析系统源码设计与文档

前言在电子产品市场竞争加剧、销售数据呈爆炸式增长的背景下,传统销售分析存在 “数据维度割裂、实时性差、预测精度低、决策支撑弱” 的痛点,难以满足企业精准洞察市场、优化产销策略的需求。基于大数据的电子产品销售数据分析系统构建具有重要的商业与…

作者头像 李华
网站建设 2026/6/10 2:23:19

基于python的柳州市租房数据可视化分析源码设计与文档

前言在柳州租房市场信息碎片化、用户选房决策难、从业者缺乏数据支撑的背景下,基于 Python 的柳州市租房数据可视化分析系统,能精准挖掘租房市场规律,解决 “数据维度单一、趋势洞察难、区域差异不直观” 的痛点,兼具用户选房参考…

作者头像 李华
网站建设 2026/6/10 13:48:26

基于Python的旅游攻略分享平台系统网站源码设计与文档

前言在旅游攻略分享碎片化、信息真伪难辨、用户个性化需求未被满足的背景下,基于 Python 的旅游攻略分享平台系统,能解决 “内容管理混乱、推荐精准度低、互动性不足” 的痛点,兼具用户创作分享与个性化攻略获取的核心价值。从技术架构层面&a…

作者头像 李华
网站建设 2026/6/10 13:48:00

LobeChat能否编写Dockerfile?运维自动化助手

LobeChat 与 Docker:构建现代化 AI 运维自动化实践 在今天,AI 不再只是算法工程师手中的工具。越来越多的团队希望将大语言模型快速集成到业务流程中——无论是客服系统、内部知识库,还是个人助手应用。但问题也随之而来:如何让这…

作者头像 李华