部署说明
Docker 部署(推荐)
准备工作
- 安装 Docker 和 Docker Compose
- 准备外部 MySQL 服务
- 克隆项目代码
部署步骤
bash
# 1. 进入项目目录
cd kevi_blog-v2
# 2. 配置环境变量
cp .env.example .env
# 3. 编辑 .env 文件,配置数据库连接
# 注意:Redis URL 使用容器内地址
REDIS_URL=redis://redis:6379
# 4. 启动服务
docker-compose up --build -d
# 5. 查看日志
docker-compose logs -f
# 6. 停止服务
docker-compose down配置说明
docker-compose.yml 包含以下服务:
- web: Nuxt 应用
- redis: Redis 缓存服务
需要外部 MySQL 服务。
数据持久化
数据卷映射:
./uploads:/app/uploads- 上传文件持久化
传统部署
1. 构建应用
bash
# 安装依赖
pnpm install
# 类型检查
pnpm run type-check
# 代码检查
pnpm run lint
# 构建生产版本
pnpm run build2. 启动服务
bash
# 使用 PM2 管理进程
pm2 start ecosystem.config.js
# 或直接使用 Node
pnpm run preview3. Nginx 反向代理配置
nginx
server {
listen 80;
server_name your-domain.com;
# 前端应用
location / {
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;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# API 接口
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
proxy_pass http://localhost:3000;
expires 30d;
add_header Cache-Control "public, immutable";
}
}4. SSL 配置(HTTPS)
bash
# 安装 Certbot
sudo apt-get install certbot python3-certbot-nginx
# 获取 SSL 证书
sudo certbot --nginx -d your-domain.com
# 自动续期
sudo certbot renew --dry-run服务器环境准备
安装 Node.js
bash
# 使用 NodeSource 仓库安装 Node.js 18.x
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# 验证安装
node --version
npm --version安装 MySQL
bash
# 安装 MySQL 8.0
sudo apt-get update
sudo apt-get install mysql-server
# 安全配置
sudo mysql_secure_installation
# 创建数据库
mysql -u root -psql
CREATE DATABASE nuxt_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'blog_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON nuxt_blog.* TO 'blog_user'@'localhost';
FLUSH PRIVILEGES;安装 Redis
bash
# 安装 Redis
sudo apt-get install redis-server
# 启动 Redis
sudo systemctl start redis
sudo systemctl enable redis
# 设置密码
sudo nano /etc/redis/redis.conf修改配置文件:
conf
requirepass your_redis_password重启 Redis:
bash
sudo systemctl restart redisPM2 配置
创建 ecosystem.config.js 文件:
javascript
module.exports = {
apps: [{
name: 'kevi-blog',
script: 'node',
args: '.output/server/index.mjs',
cwd: '/projects/kevi_blog-v2',
instances: 'max',
exec_mode: 'cluster',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
PORT: 3000
},
env_production: {
NODE_ENV: 'production'
}
}]
}PM2 命令:
bash
# 启动应用
pm2 start ecosystem.config.js
# 查看状态
pm2 status
# 查看日志
pm2 logs kevi-blog
# 重启应用
pm2 restart kevi-blog
# 停止应用
pm2 stop kevi-blog
# 设置开机自启
pm2 startup
pm2 save性能优化
1. 开启 Gzip 压缩
在 nuxt.config.ts 中配置:
typescript
export default defineNuxtConfig({
nitro: {
compressPublicAssets: true
}
})2. 配置 CDN
使用 CDN 加速静态资源:
typescript
export default defineNuxtConfig({
app: {
cdnURL: 'https://cdn.yourdomain.com'
}
})3. 数据库优化
- 创建索引
- 优化查询语句
- 使用 Redis 缓存热点数据
4. 启用缓存
env
CACHE_STORAGE=redis监控和日志
应用日志
bash
# PM2 日志
pm2 logs kevi-blog --lines 100
# Docker 日志
docker-compose logs -f web系统监控
安装监控工具:
bash
# 安装 htop
sudo apt-get install htop
# 安装 glances
sudo pip3 install glances
# 运行监控
htop
glances备份策略
数据库备份
bash
# 创建备份脚本
nano backup-db.shbash
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups"
DB_NAME="nuxt_blog"
DB_USER="blog_user"
DB_PASS="your_password"
mkdir -p $BACKUP_DIR
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# 保留最近 7 天的备份
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +7 -delete设置定时任务:
bash
crontab -ecron
# 每天凌晨 2 点备份数据库
0 2 * * * /path/to/backup-db.sh文件备份
bash
# 备份上传目录
tar -czf /backups/uploads_$(date +%Y%m%d).tar.gz ./uploads故障排除
1. 应用无法启动
bash
# 检查端口占用
netstat -tlnp | grep 3000
# 检查日志
pm2 logs kevi-blog2. 数据库连接失败
- 检查数据库服务状态
- 验证连接配置
- 检查防火墙规则
3. 文件上传失败
- 检查上传目录权限
- 验证存储配置
- 检查磁盘空间
4. 内存不足
bash
# 检查内存使用
free -h
# 增加交换空间
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile安全建议
定期更新系统
bashsudo apt-get update && sudo apt-get upgrade配置防火墙
bashsudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw enable修改默认密码
- 数据库密码
- Redis 密码
- 管理员账号密码
启用 HTTPS
- 使用 Let's Encrypt 免费证书
- 强制 HTTPS 重定向
定期备份
- 数据库备份
- 文件备份
- 配置备份
监控日志
- 定期查看应用日志
- 设置异常告警
生产环境检查清单
- [ ] 修改所有默认密码
- [ ] 配置强密码策略
- [ ] 启用 HTTPS
- [ ] 配置防火墙
- [ ] 设置定期备份
- [ ] 配置日志监控
- [ ] 性能优化完成
- [ ] 压力测试通过
- [ ] SSL 证书自动续期
- [ ] 数据库备份脚本就绪
- [ ] 监控系统配置完成
- [ ] 域名 DNS 解析正确
- [ ] CDN 配置完成(可选)