生产环境如何部署next项目?

258 阅读2分钟

1. 准备服务器(ECS) 环境

首先,确保你的 CentOS 7.6 虚拟机已经安装了以下软件:

  • Node.js(建议使用 LTS 版本)
  • Nginx
  • PM2

如果没有安装,可以通过以下命令安装:

# 安装 Node.js
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs

# 安装 Nginx
sudo yum install epel-release
sudo yum install nginx

# 安装 PM2
sudo npm install -g pm2

2. 上传项目代码

将你的 Next.js 项目代码上传到 ECS 虚拟机。你可以使用 scprsync 等工具:

scp -r /path/to/your/project user@your-ecs-ip:/var/www/yourproject

3. 安装项目依赖

在项目目录中安装依赖:

cd /var/www/yourproject
npm install

4. 构建项目

运行以下命令构建项目:

npm run build

5. 使用 PM2 启动项目

使用 PM2 启动项目,确保项目在后台运行:

pm2 start npm --name "yourproject" -- start

6. 配置 Nginx

编辑 Nginx 配置文件,添加反向代理配置:

sudo nano /etc/nginx/conf.d/yourproject.conf

添加以下内容:

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;
    }

    location /_next/static {
        alias /var/www/yourproject/.next/static;
        expires 365d;
        access_log off;
    }

    location /static {
        alias /var/www/yourproject/public/static;
        expires 365d;
        access_log off;
    }
}

启用配置文件并重启 Nginx:

sudo nginx -t
sudo systemctl restart nginx

7. 配置防火墙

确保防火墙允许 HTTP 和 HTTPS 流量:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

8. 配置域名解析

在你的域名管理面板中,将域名解析到 ECS 虚拟机的公网 IP 地址。

9. 配置 HTTPS(可选)

使用 Let's Encrypt 配置 HTTPS:

sudo yum install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

10. 验证部署

访问你的域名,确保网站正常运行。

11. 设置 PM2 开机自启动

确保 PM2 在系统重启后自动启动:

pm2 startup
pm2 save

12. 监控和维护

你可以使用 PM2 监控应用状态:

pm2 monit

如果需要更新代码,可以重新上传代码并重启 PM2 进程:

pm2 restart yourproject

以上。