本指南面向所有前端开发者,从零基础到进阶,系统讲解如何将本地前端项目部署上线。涵盖准备、构建、托管平台选择、服务器配置、自动化部署、常见问题排查等内容,附带实操示例与最佳实践。
目录
-
- 4.1 使用静态网站托管平台(推荐新手)
-
-
- Vercel
- Netlify
- GitHub Pages
- Cloudflare Pages
-
-
- 4.2 使用云服务器(Nginx + ECS)
- 4.3 使用对象存储 + CDN(OSS/S3/COS)
- 4.4 使用 Docker 部署(进阶)
一、什么是前端部署?
前端部署是指将你在本地开发完成的网页或 Web 应用(HTML、CSS、JS 等静态资源),通过某种方式发布到互联网上,让其他人可以通过浏览器访问。
✅ 部署的本质:
- 把你的
dist或build文件夹上传到一个“可被公网访问的地方”。 - 这个地方可以是:
-
- 第三方托管服务(如 Vercel)
- 自建服务器(如阿里云 ECS)
- 对象存储(如腾讯云 COS)
⚠️ 注意:传统前端不涉及后端逻辑,所以通常只需部署静态文件即可。
二、部署前的准备工作
在开始部署之前,请确保以下事项已完成:
1. 项目结构清晰
my-project/
├── public/
│ └── index.html
├── src/
│ ├── components/
│ └── App.js
├── package.json
├── vite.config.js (或其他构建工具配置)
└── README.md
2. 构建脚本已定义
检查 package.json 中是否有构建命令:
"scripts": {
"dev": "vite",
"build": "vite build", // 或 webpack, vue-cli-service build 等
"preview": "vite preview"
}
常用框架默认构建命令:
| 框架 | 构建命令 |
|---|---|
| React (Create React App) | npm run build |
| Vue CLI | npm run build |
| Vite | npm run build |
| Next.js | next build |
3. 构建输出目录确认
不同工具生成的目录可能不同:
| 工具 | 默认输出目录 |
|---|---|
| Create React App | build/ |
| Vue CLI | dist/ |
| Vite | dist/ |
| Next.js | .next/ + out/(导出静态时) |
🔔 提示:你可以修改 vite.config.js 改变输出目录:
export default defineConfig({
build: {
outDir: 'my-dist'
}
})
三、前端项目的构建流程
步骤 1:安装依赖
npm install
# 或 yarn install
步骤 2:执行构建
npm run build
构建过程会做以下事情:
- 编译 JSX / TypeScript
- 压缩 JS/CSS
- 图片转 Base64 或雪碧图
- 生成带哈希名的文件(防缓存)
- 输出到指定目录(如
dist)
步骤 3:预览构建结果(可选)
npx serve -s dist
# 或使用 vite preview
npm run preview
打开 http://localhost:5000 查看是否正常显示。
四、常见的部署方式详解
4.1 使用静态网站托管平台(推荐给初学者和中小型项目)
这些平台提供免费套餐、自动 CI/CD、全球 CDN 加速,非常适合个人作品集、博客、文档站等。
✅ 方式一:Vercel(推荐 Next.js 和现代前端项目)
官网:vercel.com
特点:
- 免费计划足够个人使用
- 支持自动从 GitHub/GitLab 部署
- 内置 Serverless Functions
- 自动分配域名:
your-site.vercel.app - 支持自定义域名 + HTTPS
部署步骤:
- 将代码推送到 GitHub 仓库
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/yourname/my-project.git
git push -u origin main
- 登录 Vercel 官网 → Import Project → Connect Git
- 选择你的仓库
- 自动检测为 Next.js/Vue/React 项目,设置构建命令和输出目录:
-
- Build Command:
npm run build - Output Directory:
dist或build
- Build Command:
- 点击 Deploy → 几分钟后生成 URL
✅ 成功!你现在可以通过 https://my-project.vercel.app 访问。
💡 小技巧:每次 git push 都会自动重新部署。
✅ 方式二:Netlify
特点:
- 支持表单收集、身份验证、Edge Functions
- 拖拽上传功能(无需 Git)
- 免费域名:
your-site.netlify.app
部署步骤:
- 登录 Netlify → “Add new site” → “Import an existing project”
- 连接 GitHub,选择仓库
- 设置构建命令和发布目录:
-
- Build command:
npm run build - Publish directory:
dist
- Build command:
- 点击 Deploy site
🎉 完成!
你也可以直接拖拽 dist 文件夹到 Netlify 主页进行快速部署。
✅ 方式三:GitHub Pages(适合开源项目文档)
特点:
- 完全免费
- 绑定仓库分支(通常是
gh-pages或main/docs) - 域名格式:
username.github.io/repository-name
部署方法(两种):
方法 A:使用 gh-pages 分支(推荐)
- 安装 gh-pages 包:
npm install --save-dev gh-pages
- 修改
package.json:
"homepage": "https://yourname.github.io/my-project",
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d dist"
}
- 部署:
npm run deploy
该命令会:
- 执行 build
- 创建或更新
gh-pages分支 - 推送到 GitHub
- 在 GitHub 仓库 Settings → Pages → 启用
gh-pages分支
🌐 访问地址:https://yourname.github.io/my-project
❗注意:如果你是组织或用户主页(如 yourname.github.io),必须使用 main 分支且项目名为 yourname.github.io
✅ 方式四:Cloudflare Pages
特点:
- 极快的全球网络
- 免费计划强大
- 支持 Preview Deployments(类似 PR 预览)
- 与 Cloudflare DNS/CDN 无缝集成
部署步骤:
- 登录 Cloudflare → Pages → Create a new Project
- 连接 GitHub 仓库
- 配置:
-
- Framework preset: 自动识别(React/Vue/Vite 等)
- Build command:
npm run build - Build output directory:
dist
- 点击 Save and Deploy
几分钟后生成 xxxx.pages.dev 地址。
4.2 使用云服务器部署(适合需要完全控制权的场景)
适用于企业级项目、团队协作、需要私有化部署的情况。
示例环境:
- 服务商:阿里云 / 腾讯云 / AWS EC2
- 操作系统:Ubuntu 20.04 LTS
- Web 服务器:Nginx
步骤 1:购买并登录服务器
- 购买一台云服务器(ECS),最低配即可(1核2G)
- 获取公网 IP 和 SSH 登录信息(用户名 root,密码或密钥)
步骤 2:连接服务器(Linux/Mac 使用 Terminal,Windows 使用 PowerShell 或 Xshell)
ssh root@your-server-ip
# 输入密码或使用私钥登录
步骤 3:安装 Nginx
sudo apt update
sudo apt install nginx -y
启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
查看状态:
sudo systemctl status nginx
此时访问 http://your-server-ip 应能看到 Nginx 欢迎页。
步骤 4:上传前端构建文件
在本地终端运行:
scp -r dist/* root@your-server-ip:/var/www/html/
如果提示权限拒绝,先确保目标目录可写:
sudo chown -R $USER:$USER /var/www/html
或者使用 rsync 更高效同步:
rsync -avz dist/ root@your-server-ip:/var/www/html/
步骤 5:配置 Nginx(关键!)
编辑默认站点配置:
sudo nano /etc/nginx/sites-available/default
修改内容如下(适用于 SPA 单页应用):
server {
listen 80;
server_name your-domain.com; # 可暂时留空
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# 可选:禁止访问敏感文件
location ~ /.(git|env) {
deny all;
}
}
🔥 try_files $uri $uri/ /index.html; 是解决刷新 404 的关键!
保存并退出(Ctrl+O → Enter → Ctrl+X)
测试配置语法:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
步骤 6:开放防火墙端口
确保云服务器控制台的安全组允许 HTTP(80) 和 HTTPS(443) 流量。
4.3 使用对象存储 + CDN(低成本高可用方案)
适用于纯静态网站、图片站、H5 活动页等。
示例:阿里云 OSS
- 登录 阿里云 OSS 控制台
- 创建 Bucket(例如
my-website-2025) - 开启“静态网站托管”模式
- 上传
dist文件夹中所有文件 - 设置首页:
index.html,错误页:也可设为index.html(用于 SPA) - 获取访问地址:
http://my-website-2025.oss-cn-beijing.aliyuncs.com
💡 建议搭配 CDN 加速,并绑定自定义域名。
其他类似服务:
- 腾讯云:COS + 静态网站
- AWS:S3 + CloudFront
- 华为云:OBS
4.4 使用 Docker 部署(容器化进阶)
适合微服务架构、DevOps 团队。
步骤 1:编写 Dockerfile
# 使用轻量级 Nginx 镜像
FROM nginx:alpine
# 复制构建文件到 Nginx 默认路径
COPY dist /usr/share/nginx/html
# 删除默认 Nginx 配置
RUN rm /etc/nginx/conf.d/default.conf
# 添加自定义配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露 80 端口
EXPOSE 80
# 启动 Nginx(前台运行)
CMD ["nginx", "-g", "daemon off;"]
步骤 2:编写 nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
}
步骤 3:构建并运行
# 构建镜像
docker build -t my-frontend-app .
# 运行容器
docker run -d -p 80:80 --name frontend-container my-frontend-app
访问 http://localhost 即可看到页面。
可结合 docker-compose.yml 管理多个服务。
五、自动化部署(CI/CD)
实现“提交代码 → 自动部署”的流水线。
示例:GitHub Actions 自动部署到服务器
步骤 1:生成 SSH 密钥对(本地)
ssh-keygen -t rsa -b 4096 -C "ci@github.com" -f ./deploy_key
得到两个文件:
deploy_key(私钥)deploy_key.pub(公钥)
步骤 2:将公钥添加到服务器
在服务器上:
echo "内容来自 deploy_key.pub" >> ~/.ssh/authorized_keys
步骤 3:将私钥保存为 GitHub Secrets
在 GitHub 仓库 → Settings → Secrets and variables → Actions → New repository secret
名称:SSH_PRIVATE_KEY
值:粘贴 deploy_key 文件内容(包括 -----BEGIN RSA PRIVATE KEY-----)
步骤 4:创建 .github/workflows/deploy.yml
name: Deploy Frontend
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install dependencies
run: npm install
- name: Build project
run: npm run build
- name: Deploy via SCP
uses: appleboy/scp-action@v0.1.5
with:
host: ${{ secrets.SERVER_IP }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
source: "dist/*"
target: "/var/www/html"
- name: Reload Nginx
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SERVER_IP }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
systemctl reload nginx
✅ 效果:每次 git push main,都会自动构建并部署到服务器!
六、域名绑定与 HTTPS 配置
1. 购买域名
- 平台:阿里云、腾讯云、Namecheap、Google Domains
- 示例:
mywebsite.com
2. 解析域名到服务器 IP
在域名管理后台添加 A 记录:
- 主机记录:
@或www - 记录类型:A
- 记录值:你的服务器公网 IP
等待生效(通常 5~30 分钟)
3. 配置 HTTPS(使用 Let's Encrypt 免费证书)
使用 Certbot(以 Nginx 为例)
sudo apt install certbot python3-certbot-nginx -y
申请并安装证书:
sudo certbot --nginx -d mywebsite.com -d www.mywebsite.com
Certbot 会自动修改 Nginx 配置,启用 HTTPS 并设置自动续期。
✅ 每 90 天自动续签,可通过 sudo certbot renew --dry-run 测试。
最终访问:https://mywebsite.com
七、SPA 单页应用特殊处理
对于 React Router、Vue Router 等前端路由,在刷新页面时容易出现 404 Not Found。
根本原因:
/about路由是由 JavaScript 控制的,但服务器找不到这个路径的文件。
解决方案:路由回退(Fallback)
无论请求什么路径,都返回 index.html,交由前端路由处理。
Nginx 配置:
location / {
try_files $uri $uri/ /index.html;
}
Apache (.htaccess):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html [QSA,L]
Vercel / Netlify 自动支持,无需额外配置。
八、常见问题及解决方案
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 页面空白 | JS 报错或路径错误 | 打开 DevTools 查看 Console 和 Network |
| 资源加载失败(404) | publicPath 设置错误 | 修改 vite.config.js: base: './' 或 '/' |
| 刷新报 404 | 未配置路由回退 | 添加 try_files 或启用 SPA 模式 |
| 样式丢失 | CSS 未正确引入 | 检查构建后 <link> 路径是否正确 |
| 部署后仍看到旧版本 | 浏览器缓存 | 强制刷新(Ctrl+F5)或开启版本哈希 |
| 无法连接服务器 | SSH 失败 | 检查密钥、安全组、防火墙 |
九、安全与性能优化建议
🔐 安全建议
- 不要在前端暴露 API 密钥
- 使用环境变量区分 dev/prod
- 启用 HTTPS
- 限制敏感文件访问(
.env,.git)
⚡ 性能优化
- 使用 Gzip/Brotli 压缩(Nginx 配置)
- 启用浏览器缓存(Cache-Control)
- 使用 CDN 加速静态资源
- 图片懒加载、WebP 格式
- 减少第三方库体积
十、学习路径推荐
| 阶段 | 推荐路径 |
|---|---|
| 新手入门 | GitHub Pages → Netlify → Vercel |
| 初级进阶 | 学习 Linux + Nginx + 域名解析 |
| 中级提升 | 掌握 CI/CD + Docker + HTTPS |
| 高级实战 | 搭建完整 DevOps 流水线,监控 + 日志分析 |
附录:一键部署脚本模板(Shell)
#!/bin/bash
# deploy.sh
echo "🚀 开始构建..."
npm run build
echo "📤 正在上传到服务器..."
scp -r dist/* root@your-server-ip:/var/www/html/
echo "🔄 重载 Nginx..."
ssh root@your-server-ip "systemctl reload nginx"
echo "✅ 部署完成!访问 http://your-domain.com"
赋予执行权限:
chmod +x deploy.sh
./deploy.sh
结语
前端部署不再是“神秘操作”,而是每个开发者都应掌握的核心技能。选择合适的部署方式,不仅能让你的作品被世界看见,也为后续学习全栈打下坚实基础。
🎯 记住一句话:
“Build once, deploy anywhere.”
如有具体项目类型(如 Vue + Element Plus 后台管理系统),欢迎留言,我可以为你定制专属部署方案!