从开发到上线
作为前端,你平时开发时 npm run dev 就完事了,但上线部署到服务器需要理解全链路:
1 2 3 4 5 6 7 8 9 10 11
| 本地开发 ↓ git push 代码仓库(GitHub/GitLab) ↓ 触发 CI CI/CD 流水线(自动化) ↓ 构建、测试 构建产物(镜像 / 静态文件) ↓ 部署 服务器(云服务器 / 容器平台) ↓ 通过域名访问
|
Docker — 让应用”打包带走”
为什么需要 Docker?
1 2 3 4 5 6 7
| 没有 Docker 前: "在我电脑上能跑啊!" → 环境不同(系统、Node 版本、数据库版本...)
有了 Docker: "打包成一个镜像,到处都能跑" → 开发/测试/生产环境一致
|
Docker 核心概念
1
| Dockerfile(菜谱)→ 构建 → Image(打包好的镜像)→ 运行 → Container(实际运行的实例)
|
1 2 3 4 5 6 7 8
| FROM node:20-alpine WORKDIR /app COPY package.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "server.js"]
|
前端视角的 Docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build
FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80
|
前端同学只需要知道: 用 Docker 部署前端 = 先用 Node 镜像构建 → 把构建产物扔到 Nginx 镜像里。
CI/CD — 自动化流水线
| 阶段 | 做什么 | 前端示例 |
|---|
| CI(持续集成) | 每次 push 自动跑测试、lint、构建 | npm run lint → npm run test → npm run build |
| CD(持续部署) | CI 通过后自动部署到服务器 | 构建产物上传 CDN / 部署到服务器 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| name: Deploy on: push: branches: [main] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 - run: npm ci && npm run build - uses: peaceiris/actions-gh-pages@v3 with: publish_dir: ./dist
|
基础理解: CI/CD = 把”手动操作”变成”自动化”。不需要自己登录服务器、手动拖文件、手动重启——push 代码后一切自动完成。
Nginx 反向代理
Nginx 在前端部署和全栈开发中非常常见。反向代理是它的核心用途之一:
1 2 3 4 5 6 7
| 用户访问 example.com ↓ DNS → 指向服务器 ↓ Nginx(监听 80/443 端口) ├─ 静态文件 → /var/www/html(前端) ├─ /api/* → 转发到 Node.js 服务(后端) └─ WebSocket → 转发到应用服务器
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| server { listen 80; server_name example.com;
root /var/www/html; index index.html;
location / { try_files $uri $uri/ /index.html; }
location /api/ { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
|
Nginx 常见场景速查
| 场景 | 配置要点 |
|---|
| 部署 SPA | try_files $uri $uri/ /index.html 解决刷新 404 |
| 跨域 | add_header Access-Control-Allow-Origin * |
| HTTPS | listen 443 ssl; ssl_certificate + certbot 自动续期 |
| 负载均衡 | upstream backend { server 192.168.1.1; server 192.168.1.2; } |
| 限流 | limit_req_zone 防止恶意请求 |
| Gzip | gzip on; gzip_types text/css application/javascript |
后端运维入门清单