VPS 部署指南

本指南将帮助您在 VPS (Virtual Private Server) 上部署 Ship Vibany 应用。相比 Vercel 部署,VPS 部署可以提供更灵活的配置选项和更低的长期运营成本,但需要更多的技术知识和服务器维护工作。

系统要求

在开始部署前,请确保您的 VPS 满足以下基本要求:

  • 操作系统:Ubuntu 20.04 LTS 或更高版本(推荐),CentOS 8+ 也可以
  • CPU:至少 2 核心(推荐 4 核心或更多用于生产环境)
  • 内存:至少 2GB RAM(推荐 4GB 或更多用于生产环境)
  • 存储:至少 20GB 可用空间
  • 网络:稳定的网络连接和公网 IP 地址
  • 软件环境
    • Node.js 18.x 或更高版本
    • npm 9.x 或更高版本
    • Git
    • Nginx
    • PM2(用于进程管理)

部署步骤

1. 服务器准备

首先,准备您的 VPS 服务器环境:

# 更新系统
sudo apt update
sudo apt upgrade -y

# 安装必要的软件包
sudo apt install -y curl git build-essential nginx

# 安装 Node.js 18.x
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

# 验证安装
node -v  # 应显示 v18.x.x
npm -v   # 应显示 9.x.x

# 安装 PM2 进程管理器
sudo npm install -g pm2

2. 获取代码

接下来,克隆项目代码到服务器:

# 创建应用目录
mkdir -p /var/www
cd /var/www

# 克隆代码库
git clone https://github.com/your-username/your-vibany-repo.git vibany-next
cd vibany-next

# 如果是私有仓库,需要先配置 GitHub 认证

3. 配置环境变量

创建并配置环境变量文件:

# 创建环境变量文件
cp .env.example .env.local
nano .env.local

按照 环境配置 章节的指导,填写所有必要的环境变量。特别注意以下几点:

  • 确保 NEXT_PUBLIC_APP_URL 设置为您的域名
  • 配置正确的数据库连接信息
  • 设置所有 API 密钥和服务凭证

4. 使用 prod.sh 脚本部署

Ship Vibany 提供了一个便捷的部署脚本 prod.sh,可以自动完成构建和启动过程:

# 赋予脚本执行权限
chmod +x prod.sh

# 执行部署脚本
./prod.sh

该脚本会自动执行以下操作:

  • 加载 .env.local 中的环境变量
  • 安装依赖项 (npm i)
  • 构建项目 (npm run build)
  • 启动应用 (npm run start)

5. 使用 PM2 进行进程管理

为了确保应用持续运行并能够自动重启,我们推荐使用 PM2 进程管理器:

# 停止 prod.sh 启动的进程(如果正在运行)
# 通常可以按 Ctrl+C 停止

# 使用 PM2 启动应用
pm2 start npm --name "vibany-next" -- start

# 配置开机自启
pm2 startup
pm2 save

创建 PM2 配置文件以更好地管理应用:

# 创建 PM2 配置文件
cat > ecosystem.config.js << EOL
module.exports = {
  apps: [
    {
      name: "vibany-next",
      script: "npm",
      args: "start",
      env: {
        NODE_ENV: "production",
        PORT: 3000
      },
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: "1G"
    }
  ]
};
EOL

# 使用配置文件启动
pm2 delete vibany-next  # 先删除之前的实例
pm2 start ecosystem.config.js
pm2 save

6. 配置 Nginx 反向代理

默认情况下,Next.js 应用会在 3000 端口运行。我们需要配置 Nginx 将域名请求转发到该端口:

# 创建 Nginx 配置文件
sudo nano /etc/nginx/sites-available/vibany-next

添加以下配置内容:

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_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 增加上传文件大小限制(如需要)
    client_max_body_size 10M;
}

启用配置并重启 Nginx:

# 创建符号链接
sudo ln -s /etc/nginx/sites-available/vibany-next /etc/nginx/sites-enabled/

# 测试 Nginx 配置
sudo nginx -t

# 重启 Nginx
sudo systemctl restart nginx

7. 配置 SSL 证书(推荐)

为了确保网站安全,强烈建议配置 SSL 证书:

# 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx

# 获取并配置 SSL 证书
sudo certbot --nginx -d your-domain.com

# 按照提示完成配置
# Certbot 会自动修改 Nginx 配置以启用 HTTPS

Certbot 会自动设置证书续期任务,无需手动操作。

自定义端口配置

如果需要更改 Next.js 应用的默认端口(3000),有以下几种方法:

方法 1:通过命令行参数

# 在 PM2 配置中修改
pm2 start npm --name "vibany-next" -- start -- -p 4000

方法 2:修改 package.json

编辑 package.json 文件:

"scripts": {
  "start": "next start -p 4000"
}

方法 3:使用环境变量

.env.local 中添加:

PORT=4000

或在 PM2 配置文件中设置:

module.exports = {
  apps: [
    {
      name: "vibany-next",
      script: "npm",
      args: "start",
      env: {
        NODE_ENV: "production",
        PORT: 4000
      },
      // 其他配置...
    }
  ]
};

记得同时更新 Nginx 配置中的端口号:

location / {
    proxy_pass http://localhost:4000;
    # 其他配置...
}

常用维护命令

PM2 常用命令

# 查看所有应用
pm2 list

# 查看应用日志
pm2 logs vibany-next

# 重启应用
pm2 restart vibany-next

# 停止应用
pm2 stop vibany-next

# 删除应用
pm2 delete vibany-next

# 监控应用
pm2 monit

代码更新

当有新版本发布时,更新代码的步骤:

# 进入应用目录
cd /var/www/vibany-next

# 拉取最新代码
git pull

# 安装依赖
npm install

# 构建应用
npm run build

# 重启应用
pm2 restart vibany-next

数据库备份

定期备份数据库是良好的维护习惯:

# 创建备份脚本
cat > /var/www/backup-db.sh << EOL
#!/bin/bash
DATE=\$(date +%Y%m%d-%H%M%S)
BACKUP_DIR=/var/backups/vibany
mkdir -p \$BACKUP_DIR

# 从环境变量文件中获取数据库连接信息
source /var/www/vibany-next/.env.local

# 使用 pg_dump 备份数据库
pg_dump \$DATABASE_URL > \$BACKUP_DIR/vibany-\$DATE.sql
EOL

# 赋予执行权限
chmod +x /var/backups/backup-db.sh

# 添加到 crontab 定时执行
(crontab -l 2>/dev/null; echo "0 2 * * * /var/backups/backup-db.sh") | crontab -

安全注意事项

  1. 防火墙配置

    # 安装 UFW
    sudo apt install -y ufw
    
    # 配置基本规则
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    
    # 允许 SSH、HTTP 和 HTTPS
    sudo ufw allow ssh
    sudo ufw allow http
    sudo ufw allow https
    
    # 启用防火墙
    sudo ufw enable
    
  2. 定期更新系统

    # 创建自动更新脚本
    cat > /root/update-system.sh << EOL
    #!/bin/bash
    apt update
    apt upgrade -y
    apt autoremove -y
    EOL
    
    chmod +x /root/update-system.sh
    
    # 添加到 crontab 每周执行
    (crontab -l 2>/dev/null; echo "0 3 * * 0 /root/update-system.sh") | crontab -
    
  3. 监控服务器状态

    # 安装监控工具
    sudo apt install -y htop iotop
    

故障排除

应用无法启动

  1. 检查日志

    pm2 logs vibany-next
    
  2. 检查环境变量

    # 确认环境变量文件存在且格式正确
    cat .env.local
    
  3. 检查端口占用

    sudo lsof -i :3000
    

Nginx 配置问题

  1. 检查 Nginx 配置

    sudo nginx -t
    
  2. 检查 Nginx 日志

    sudo tail -f /var/log/nginx/error.log
    

数据库连接问题

  1. 检查数据库连接字符串

    # 确认 DATABASE_URL 格式正确
    grep DATABASE_URL .env.local
    
  2. 测试数据库连接

    # 安装 PostgreSQL 客户端
    sudo apt install -y postgresql-client
    
    # 测试连接
    psql "$DATABASE_URL" -c "SELECT 1"
    

性能优化

  1. 启用多实例

    // 在 ecosystem.config.js 中设置
    module.exports = {
      apps: [
        {
          name: "vibany-next",
          script: "npm",
          args: "start",
          instances: "max", // 使用所有可用 CPU
          exec_mode: "cluster",
          // 其他配置...
        }
      ]
    };
    
  2. 配置 Nginx 缓存

    # 在 Nginx 配置中添加
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
    
  3. 使用 CDN:考虑使用 Cloudflare 或其他 CDN 服务来加速静态资源的分发。

总结

通过 VPS 部署 Ship Vibany 应用可以提供更灵活的配置选项和更低的长期运营成本,但需要更多的技术知识和服务器维护工作。按照本指南的步骤,您可以在自己的 VPS 上成功部署和运行 Ship Vibany 应用。

如果您在部署过程中遇到任何问题,请参考常见问题与故障排除章节,或联系我们的技术支持团队获取帮助。

© copyright Justin 2025. All rights reserved.