723 lines
14 KiB
Markdown
723 lines
14 KiB
Markdown
|
|
# 部署与上线
|
|||
|
|
|
|||
|
|
> 💡 **学习指南**:开发完成只是第一步,让应用真正服务于用户还需要部署和上线。本章节将带你了解域名、服务器、CDN 等核心概念,并掌握现代 Web 应用的部署流程。
|
|||
|
|
|
|||
|
|
## 0. 部署架构概览
|
|||
|
|
|
|||
|
|
让我们先通过可视化演示,了解现代 Web 应用的部署架构:
|
|||
|
|
|
|||
|
|
<DeploymentArchitecture />
|
|||
|
|
|
|||
|
|
## 1. 域名 (Domain Name)
|
|||
|
|
|
|||
|
|
### 1.1 什么是域名?
|
|||
|
|
|
|||
|
|
**域名** 是互联网上识别和定位计算机的层次结构式字符标识。
|
|||
|
|
|
|||
|
|
**域名组成**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
www.example.com
|
|||
|
|
│ │ │
|
|||
|
|
│ │ └─ 顶级域名 (TLD)
|
|||
|
|
│ └─────── 二级域名
|
|||
|
|
└─────────── 三级域名 (子域名)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**常见顶级域名**:
|
|||
|
|
|
|||
|
|
| 类型 | 域名 | 用途 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| 通用 | `.com` | 商业机构 |
|
|||
|
|
| 通用 | `.org` | 非营利组织 |
|
|||
|
|
| 通用 | `.net` | 网络服务 |
|
|||
|
|
| 国家 | `.cn` | 中国 |
|
|||
|
|
| 国家 | `.us` | 美国 |
|
|||
|
|
| 国家 | `.jp` | 日本 |
|
|||
|
|
| 新通用 | `.io` | 科技初创 |
|
|||
|
|
| 新通用 | `.ai` | 人工智能 |
|
|||
|
|
|
|||
|
|
### 1.2 域名注册
|
|||
|
|
|
|||
|
|
**注册流程**:
|
|||
|
|
|
|||
|
|
1. **选择域名**
|
|||
|
|
- 简短易记
|
|||
|
|
- 避免特殊字符
|
|||
|
|
- 选择合适的后缀
|
|||
|
|
|
|||
|
|
2. **选择注册商**
|
|||
|
|
- **国外**:GoDaddy、Namecheap、Google Domains
|
|||
|
|
- **国内**:阿里云、腾讯云、Cloudflare
|
|||
|
|
|
|||
|
|
3. **注册域名**
|
|||
|
|
- 查询可用性
|
|||
|
|
- 添加到购物车
|
|||
|
|
- 填写信息并支付
|
|||
|
|
|
|||
|
|
4. **配置 DNS**
|
|||
|
|
- 设置域名服务器
|
|||
|
|
- 添加 DNS 记录
|
|||
|
|
|
|||
|
|
**价格参考**:
|
|||
|
|
- `.com`:$10-15/年
|
|||
|
|
- `.cn`:¥30-50/年
|
|||
|
|
- `.io`:$30-50/年
|
|||
|
|
|
|||
|
|
### 1.3 DNS 解析
|
|||
|
|
|
|||
|
|
**DNS 记录类型**:
|
|||
|
|
|
|||
|
|
**A 记录**(地址记录):
|
|||
|
|
```
|
|||
|
|
example.com A 1.2.3.4
|
|||
|
|
www.example.com A 1.2.3.4
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**CNAME 记录**(别名记录):
|
|||
|
|
```
|
|||
|
|
www.example.com CNAME example.com
|
|||
|
|
blog.example.com CNAME example.wordpress.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**MX 记录**(邮件服务器):
|
|||
|
|
```
|
|||
|
|
example.com MX 10 mail.example.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**TXT 记录**(文本记录):
|
|||
|
|
```
|
|||
|
|
example.com TXT "v=spf1 include:_spf.google.com ~all"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**配置示例**(阿里云 DNS):
|
|||
|
|
|
|||
|
|
| 主机记录 | 记录类型 | 记录值 | TTL |
|
|||
|
|
|----------|----------|--------|-----|
|
|||
|
|
| @ | A | 1.2.3.4 | 600 |
|
|||
|
|
| www | A | 1.2.3.4 | 600 |
|
|||
|
|
| @ | CNAME | example.com | 600 |
|
|||
|
|
|
|||
|
|
### 1.4 域名生效时间
|
|||
|
|
|
|||
|
|
- **全球生效**:24-48 小时
|
|||
|
|
- **本地生效**:修改后几分钟
|
|||
|
|
- **加速生效**:清除本地 DNS 缓存
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 清除 DNS 缓存
|
|||
|
|
# Windows
|
|||
|
|
ipconfig /flushdns
|
|||
|
|
|
|||
|
|
# macOS
|
|||
|
|
sudo dscacheutil -flushcache
|
|||
|
|
|
|||
|
|
# Linux
|
|||
|
|
sudo systemd-resolve --flush-caches
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2. 服务器 (Server)
|
|||
|
|
|
|||
|
|
### 2.1 什么是服务器?
|
|||
|
|
|
|||
|
|
**服务器** 是提供计算服务的设备,响应客户端的请求。
|
|||
|
|
|
|||
|
|
**服务器类型**:
|
|||
|
|
|
|||
|
|
**物理服务器**:
|
|||
|
|
- 整机独享
|
|||
|
|
- 性能强大
|
|||
|
|
- 价格昂贵
|
|||
|
|
- 需要运维
|
|||
|
|
|
|||
|
|
**虚拟专用服务器 (VPS)**:
|
|||
|
|
- 虚拟化技术
|
|||
|
|
- 独立环境
|
|||
|
|
- 价格适中
|
|||
|
|
- 常见选择
|
|||
|
|
|
|||
|
|
**云服务器**:
|
|||
|
|
- 弹性扩展
|
|||
|
|
- 按需付费
|
|||
|
|
- 高可用性
|
|||
|
|
- 易于管理
|
|||
|
|
|
|||
|
|
**容器服务器**:
|
|||
|
|
- 轻量级
|
|||
|
|
- 快速部署
|
|||
|
|
- 易于迁移
|
|||
|
|
- 现代化
|
|||
|
|
|
|||
|
|
### 2.2 主流云服务商
|
|||
|
|
|
|||
|
|
**国际**:
|
|||
|
|
|
|||
|
|
| 服务商 | 产品 | 优势 | 价格 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| AWS | EC2 | 功能全面、稳定 | $5-100/月 |
|
|||
|
|
| Google Cloud | Compute Engine | 技术先进 | $6-100/月 |
|
|||
|
|
| DigitalOcean | Droplet | 简单易用 | $4-48/月 |
|
|||
|
|
| Linode | Linode | 性价比高 | $5-80/月 |
|
|||
|
|
| Vultr | Vultr | 全球节点 | $2.5-40/月 |
|
|||
|
|
|
|||
|
|
**国内**:
|
|||
|
|
|
|||
|
|
| 服务商 | 产品 | 优势 | 价格 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| 阿里云 | ECS | 功能完善 | ¥60-500/月 |
|
|||
|
|
| 腾讯云 | CVM | 稳定可靠 | ¥50-400/月 |
|
|||
|
|
| 华为云 | ECS | 企业级 | ¥50-300/月 |
|
|||
|
|
|
|||
|
|
### 2.3 服务器选择
|
|||
|
|
|
|||
|
|
**根据流量选择**:
|
|||
|
|
|
|||
|
|
- **个人博客**:1核1G,$5/月
|
|||
|
|
- **小型应用**:1核2G,$10/月
|
|||
|
|
- **中型应用**:2核4G,$20/月
|
|||
|
|
- **大型应用**:4核8G,$40/月
|
|||
|
|
|
|||
|
|
**根据地区选择**:
|
|||
|
|
|
|||
|
|
- **目标用户在国内**:阿里云、腾讯云
|
|||
|
|
- **目标用户在国外**:AWS、DigitalOcean
|
|||
|
|
- **全球用户**:Cloudflare + 多节点
|
|||
|
|
|
|||
|
|
### 2.4 服务器配置
|
|||
|
|
|
|||
|
|
**基础配置**(Ubuntu):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 更新系统
|
|||
|
|
sudo apt update
|
|||
|
|
sudo apt upgrade -y
|
|||
|
|
|
|||
|
|
# 2. 安装必要软件
|
|||
|
|
sudo apt install -y nginx git curl
|
|||
|
|
|
|||
|
|
# 3. 安装 Node.js
|
|||
|
|
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
|||
|
|
sudo apt install -y nodejs
|
|||
|
|
|
|||
|
|
# 4. 安装 PM2(进程管理器)
|
|||
|
|
sudo npm install -g pm2
|
|||
|
|
|
|||
|
|
# 5. 配置防火墙
|
|||
|
|
sudo ufw allow OpenSSH
|
|||
|
|
sudo ufw allow 'Nginx Full'
|
|||
|
|
sudo ufw enable
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Nginx 配置**:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
# /etc/nginx/sites-available/example.com
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name example.com www.example.com;
|
|||
|
|
|
|||
|
|
root /var/www/html;
|
|||
|
|
index index.html;
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
try_files $uri $uri/ =404;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# API 代理
|
|||
|
|
location /api {
|
|||
|
|
proxy_pass http://localhost:3000;
|
|||
|
|
proxy_http_version 1.1;
|
|||
|
|
proxy_set_header Upgrade $http_upgrade;
|
|||
|
|
proxy_set_header Connection 'upgrade';
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_cache_bypass $http_upgrade;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**启用配置**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 创建软链接
|
|||
|
|
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
|
|||
|
|
|
|||
|
|
# 测试配置
|
|||
|
|
sudo nginx -t
|
|||
|
|
|
|||
|
|
# 重启 Nginx
|
|||
|
|
sudo systemctl restart nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.5 SSL 证书
|
|||
|
|
|
|||
|
|
**使用 Let's Encrypt 免费证书**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装 Certbot
|
|||
|
|
sudo apt install certbot python3-certbot-nginx
|
|||
|
|
|
|||
|
|
# 获取证书
|
|||
|
|
sudo certbot --nginx -d example.com -d www.example.com
|
|||
|
|
|
|||
|
|
# 自动续期
|
|||
|
|
sudo certbot renew --dry-run
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**配置示例**:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
server {
|
|||
|
|
listen 443 ssl;
|
|||
|
|
server_name example.com www.example.com;
|
|||
|
|
|
|||
|
|
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
|
|||
|
|
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
|
|||
|
|
|
|||
|
|
# SSL 配置
|
|||
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
|||
|
|
ssl_ciphers HIGH:!aNULL:!MD5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# HTTP 重定向到 HTTPS
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name example.com www.example.com;
|
|||
|
|
return 301 https://$host$request_uri;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3. CDN (内容分发网络)
|
|||
|
|
|
|||
|
|
### 3.1 什么是 CDN?
|
|||
|
|
|
|||
|
|
**CDN (Content Delivery Network)** 内容分发网络,通过将内容缓存到全球各地的边缘节点,让用户就近访问。
|
|||
|
|
|
|||
|
|
**CDN 工作原理**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
用户请求 → DNS 解析 → 就近 CDN 节点
|
|||
|
|
↓
|
|||
|
|
缓存命中?返回内容
|
|||
|
|
↓ 否
|
|||
|
|
回源获取 → 缓存并返回
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.2 CDN 的优势
|
|||
|
|
|
|||
|
|
**加速访问**:
|
|||
|
|
- 就近节点响应快
|
|||
|
|
- 减少网络延迟
|
|||
|
|
- 提升用户体验
|
|||
|
|
|
|||
|
|
**减轻源站压力**:
|
|||
|
|
- 静态资源由 CDN 承载
|
|||
|
|
- 减少源站带宽
|
|||
|
|
- 降低服务器负载
|
|||
|
|
|
|||
|
|
**提高可用性**:
|
|||
|
|
- 节点故障自动切换
|
|||
|
|
- 防御 DDoS 攻击
|
|||
|
|
- 提高容灾能力
|
|||
|
|
|
|||
|
|
**节省成本**:
|
|||
|
|
- CDN 流量费用低
|
|||
|
|
- 减少源站带宽成本
|
|||
|
|
|
|||
|
|
### 3.3 主流 CDN 服务商
|
|||
|
|
|
|||
|
|
**国际**:
|
|||
|
|
|
|||
|
|
| 服务商 | 免费额度 | 付费价格 | 特点 |
|
|||
|
|
|--------|----------|----------|------|
|
|||
|
|
| Cloudflare | 无限制 | $0-20/月 | 全球节点、免费 SSL |
|
|||
|
|
| AWS CloudFront | 1TB/年 | $0.085/GB | 功能强大 |
|
|||
|
|
| Google Cloud CDN | 无 | $0.08/GB | 全球网络 |
|
|||
|
|
| BunnyCDN | 1TB/月 | $1/TB | 性价比高 |
|
|||
|
|
|
|||
|
|
**国内**:
|
|||
|
|
|
|||
|
|
| 服务商 | 价格 | 特点 |
|
|||
|
|
|--------|------|------|
|
|||
|
|
| 阿里云 CDN | ¥0.24/GB | 节点多、稳定 |
|
|||
|
|
| 腾讯云 CDN | ¥0.21/GB | 价格优惠 |
|
|||
|
|
| 七牛云 | ¥0.29/GB | 存储集成 |
|
|||
|
|
|
|||
|
|
### 3.4 CDN 配置
|
|||
|
|
|
|||
|
|
**Cloudflare 配置步骤**:
|
|||
|
|
|
|||
|
|
1. **添加站点**
|
|||
|
|
- 输入域名
|
|||
|
|
- 选择免费计划
|
|||
|
|
- 扫描 DNS 记录
|
|||
|
|
|
|||
|
|
2. **切换域名服务器**
|
|||
|
|
- Cloudflare 提供两个 NS 记录
|
|||
|
|
- 在域名注册商处修改
|
|||
|
|
- 等待生效(2-24 小时)
|
|||
|
|
|
|||
|
|
3. **配置缓存规则**
|
|||
|
|
- 缓存静态资源(CSS、JS、图片)
|
|||
|
|
- 不缓存 HTML 和 API
|
|||
|
|
- 设置缓存时间
|
|||
|
|
|
|||
|
|
4. **开启 HTTPS**
|
|||
|
|
- Full 模式(推荐)
|
|||
|
|
- 自动 SSL 证书
|
|||
|
|
- 强制 HTTPS
|
|||
|
|
|
|||
|
|
**Nginx 缓存配置**:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
# 设置缓存头部
|
|||
|
|
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
|
|||
|
|
expires 1y;
|
|||
|
|
add_header Cache-Control "public, immutable";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
add_header Cache-Control "no-cache";
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.5 CDN 最佳实践
|
|||
|
|
|
|||
|
|
**缓存策略**:
|
|||
|
|
|
|||
|
|
- **静态资源**:图片、CSS、JS → 长期缓存(1 年)
|
|||
|
|
- **HTML 文件**:短期缓存或不缓存
|
|||
|
|
- **API 响应**:根据业务设置缓存时间
|
|||
|
|
- **用户特定内容**:不缓存
|
|||
|
|
|
|||
|
|
**缓存清除**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Cloudflare API
|
|||
|
|
curl -X POST "https://api.cloudflare.com/client/v4/zones/zone_id/purge_cache" \
|
|||
|
|
-H "Authorization: Bearer token" \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
--data '{"files":["https://example.com/style.css"]}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4. 部署流程
|
|||
|
|
|
|||
|
|
### 4.1 部署方式
|
|||
|
|
|
|||
|
|
**传统部署**:
|
|||
|
|
- 手动上传代码
|
|||
|
|
- SSH 登录服务器
|
|||
|
|
- 执行部署脚本
|
|||
|
|
- 重启服务
|
|||
|
|
|
|||
|
|
**CI/CD 部署**:
|
|||
|
|
- 代码推送到 Git
|
|||
|
|
- 自动触发构建
|
|||
|
|
- 自动运行测试
|
|||
|
|
- 自动部署到服务器
|
|||
|
|
|
|||
|
|
**容器化部署**:
|
|||
|
|
- Docker 打包应用
|
|||
|
|
- 推送到镜像仓库
|
|||
|
|
- 服务器拉取镜像
|
|||
|
|
- 运行容器
|
|||
|
|
|
|||
|
|
### 4.2 Docker 部署
|
|||
|
|
|
|||
|
|
**Dockerfile**:
|
|||
|
|
|
|||
|
|
```dockerfile
|
|||
|
|
FROM node:18-alpine
|
|||
|
|
|
|||
|
|
WORKDIR /app
|
|||
|
|
|
|||
|
|
COPY package*.json ./
|
|||
|
|
RUN npm ci --only=production
|
|||
|
|
|
|||
|
|
COPY . .
|
|||
|
|
RUN npm run build
|
|||
|
|
|
|||
|
|
EXPOSE 3000
|
|||
|
|
|
|||
|
|
CMD ["npm", "start"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**构建和运行**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 构建镜像
|
|||
|
|
docker build -t myapp:1.0 .
|
|||
|
|
|
|||
|
|
# 运行容器
|
|||
|
|
docker run -d -p 3000:3000 --name myapp myapp:1.0
|
|||
|
|
|
|||
|
|
# 查看日志
|
|||
|
|
docker logs -f myapp
|
|||
|
|
|
|||
|
|
# 停止容器
|
|||
|
|
docker stop myapp
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Docker Compose**:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
version: '3.8'
|
|||
|
|
|
|||
|
|
services:
|
|||
|
|
web:
|
|||
|
|
build: .
|
|||
|
|
ports:
|
|||
|
|
- "3000:3000"
|
|||
|
|
environment:
|
|||
|
|
- NODE_ENV=production
|
|||
|
|
restart: always
|
|||
|
|
|
|||
|
|
nginx:
|
|||
|
|
image: nginx:alpine
|
|||
|
|
ports:
|
|||
|
|
- "80:80"
|
|||
|
|
- "443:443"
|
|||
|
|
volumes:
|
|||
|
|
- ./nginx.conf:/etc/nginx/nginx.conf
|
|||
|
|
- ./ssl:/etc/nginx/ssl
|
|||
|
|
depends_on:
|
|||
|
|
- web
|
|||
|
|
restart: always
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.3 CI/CD 配置
|
|||
|
|
|
|||
|
|
**GitHub Actions 示例**:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
name: Deploy
|
|||
|
|
|
|||
|
|
on:
|
|||
|
|
push:
|
|||
|
|
branches: [main]
|
|||
|
|
|
|||
|
|
jobs:
|
|||
|
|
deploy:
|
|||
|
|
runs-on: ubuntu-latest
|
|||
|
|
|
|||
|
|
steps:
|
|||
|
|
- uses: actions/checkout@v2
|
|||
|
|
|
|||
|
|
- name: Setup Node.js
|
|||
|
|
uses: actions/setup-node@v2
|
|||
|
|
with:
|
|||
|
|
node-version: '18'
|
|||
|
|
|
|||
|
|
- name: Install dependencies
|
|||
|
|
run: npm ci
|
|||
|
|
|
|||
|
|
- name: Run tests
|
|||
|
|
run: npm test
|
|||
|
|
|
|||
|
|
- name: Build
|
|||
|
|
run: npm run build
|
|||
|
|
|
|||
|
|
- name: Deploy to server
|
|||
|
|
uses: appleboy/ssh-action@master
|
|||
|
|
with:
|
|||
|
|
host: ${{ secrets.HOST }}
|
|||
|
|
username: ${{ secrets.USERNAME }}
|
|||
|
|
key: ${{ secrets.SSH_KEY }}
|
|||
|
|
script: |
|
|||
|
|
cd /var/www/myapp
|
|||
|
|
git pull
|
|||
|
|
npm ci --production
|
|||
|
|
npm run build
|
|||
|
|
pm2 restart myapp
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5. 监控和运维
|
|||
|
|
|
|||
|
|
### 5.1 日志管理
|
|||
|
|
|
|||
|
|
**应用日志**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# PM2 日志
|
|||
|
|
pm2 logs myapp
|
|||
|
|
|
|||
|
|
# Nginx 日志
|
|||
|
|
tail -f /var/log/nginx/access.log
|
|||
|
|
tail -f /var/log/nginx/error.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**日志分析**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 统计访问量
|
|||
|
|
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
|
|||
|
|
|
|||
|
|
# 统计状态码
|
|||
|
|
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.2 性能监控
|
|||
|
|
|
|||
|
|
**系统监控**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# CPU 使用率
|
|||
|
|
top
|
|||
|
|
|
|||
|
|
# 内存使用
|
|||
|
|
free -h
|
|||
|
|
|
|||
|
|
# 磁盘使用
|
|||
|
|
df -h
|
|||
|
|
|
|||
|
|
# 网络流量
|
|||
|
|
iftop
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**应用监控工具**:
|
|||
|
|
|
|||
|
|
- **PM2**:进程管理和监控
|
|||
|
|
- **New Relic**:应用性能监控
|
|||
|
|
- **Datadog**:基础设施监控
|
|||
|
|
- **Prometheus + Grafana**:开源监控方案
|
|||
|
|
|
|||
|
|
### 5.3 自动备份
|
|||
|
|
|
|||
|
|
**数据库备份脚本**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# backup.sh
|
|||
|
|
|
|||
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|||
|
|
BACKUP_DIR="/var/backups"
|
|||
|
|
DB_NAME="myapp"
|
|||
|
|
DB_USER="root"
|
|||
|
|
DB_PASS="password"
|
|||
|
|
|
|||
|
|
# 备份数据库
|
|||
|
|
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_$DATE.sql
|
|||
|
|
|
|||
|
|
# 压缩备份
|
|||
|
|
gzip $BACKUP_DIR/db_$DATE.sql
|
|||
|
|
|
|||
|
|
# 删除 7 天前的备份
|
|||
|
|
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +7 -delete
|
|||
|
|
|
|||
|
|
echo "Backup completed: db_$DATE.sql.gz"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**定时任务**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 添加到 crontab
|
|||
|
|
crontab -e
|
|||
|
|
|
|||
|
|
# 每天凌晨 2 点执行备份
|
|||
|
|
0 2 * * * /path/to/backup.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 6. 常见问题
|
|||
|
|
|
|||
|
|
### 6.1 网站无法访问
|
|||
|
|
|
|||
|
|
**排查步骤**:
|
|||
|
|
|
|||
|
|
1. **检查域名**
|
|||
|
|
```bash
|
|||
|
|
nslookup example.com
|
|||
|
|
ping example.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **检查服务器**
|
|||
|
|
```bash
|
|||
|
|
ping 1.2.3.4
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **检查 Web 服务**
|
|||
|
|
```bash
|
|||
|
|
systemctl status nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **检查防火墙**
|
|||
|
|
```bash
|
|||
|
|
sudo ufw status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.2 HTTPS 不生效
|
|||
|
|
|
|||
|
|
**常见原因**:
|
|||
|
|
|
|||
|
|
- 证书过期:续期证书
|
|||
|
|
- 配置错误:检查 Nginx 配置
|
|||
|
|
- 端口未开放:开放 443 端口
|
|||
|
|
- DNS 未生效:等待 DNS 传播
|
|||
|
|
|
|||
|
|
### 6.3 CDN 缓存问题
|
|||
|
|
|
|||
|
|
**解决方法**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 清除 Cloudflare 缓存
|
|||
|
|
# Dashboard → Caching → Purge Everything
|
|||
|
|
|
|||
|
|
# 或使用 API
|
|||
|
|
curl -X POST "https://api.cloudflare.com/client/v4/zones/zone_id/purge_cache" \
|
|||
|
|
-H "Authorization: Bearer token" \
|
|||
|
|
--data '{"purge_everything":true}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 7. 成本优化
|
|||
|
|
|
|||
|
|
### 7.1 服务器成本
|
|||
|
|
|
|||
|
|
**优化策略**:
|
|||
|
|
|
|||
|
|
- 按需选择配置,避免浪费
|
|||
|
|
- 使用预留实例(长期项目)
|
|||
|
|
- 选择合适的计费方式
|
|||
|
|
- 定期清理不用的资源
|
|||
|
|
|
|||
|
|
### 7.2 带宽成本
|
|||
|
|
|
|||
|
|
**优化策略**:
|
|||
|
|
|
|||
|
|
- 使用 CDN 减少源站带宽
|
|||
|
|
- 启用压缩(Gzip、Brotli)
|
|||
|
|
- 优化图片大小和格式
|
|||
|
|
- 使用懒加载
|
|||
|
|
|
|||
|
|
### 7.3 存储成本
|
|||
|
|
|
|||
|
|
**优化策略**:
|
|||
|
|
|
|||
|
|
- 定期清理日志文件
|
|||
|
|
- 使用对象存储(OSS、S3)
|
|||
|
|
- 压缩静态资源
|
|||
|
|
- 删除不必要的备份
|
|||
|
|
|
|||
|
|
## 8. 总结
|
|||
|
|
|
|||
|
|
部署与上线核心要点:
|
|||
|
|
|
|||
|
|
- 🌐 **域名**:网站的入口,选择好记的域名
|
|||
|
|
- 🖥️ **服务器**:应用运行的基础,选择合适的配置
|
|||
|
|
- 📡 **CDN**:加速访问,减轻源站压力
|
|||
|
|
- 🔐 **HTTPS**:安全传输,必备配置
|
|||
|
|
- 🚀 **CI/CD**:自动化部署,提高效率
|
|||
|
|
- 📊 **监控**:及时发现问题,保证稳定
|
|||
|
|
|
|||
|
|
**部署清单**:
|
|||
|
|
|
|||
|
|
- [ ] 注册域名
|
|||
|
|
- [ ] 购买服务器
|
|||
|
|
- [ ] 配置 DNS 解析
|
|||
|
|
- [ ] 安装 Web 服务器
|
|||
|
|
- [ ] 部署应用代码
|
|||
|
|
- [ ] 配置 SSL 证书
|
|||
|
|
- [ ] 启用 CDN
|
|||
|
|
- [ ] 设置监控
|
|||
|
|
- [ ] 配置备份
|
|||
|
|
- [ ] 性能优化
|
|||
|
|
|
|||
|
|
掌握部署与上线,你的应用就能真正服务于用户。现在就开始部署你的第一个项目吧!
|