logoPay4SaaS
部署

把 Next.js 部署到阿里云

01

阿里云服务器,如何从 0 部署 Next.js 项目呢?

我以pay4saas.cn来举例,一起看看。

这套流程适用于任何 Linux VPS(Hetzner、Vultr、DigitalOcean 等),这里以阿里云为例。

有一点要注意:部署之前,先 ICP 备案!否则上线了,还是会被要求下线。海外服务器不需要备案,可跳过这步。

02

第一阶段:服务器准备

1. 连接服务器

两种方式都可以:

  • 方式1:推荐新手用,省事,直接在阿里云控制台,远程连接。

    立即登录。

    免密连接,登录。

  • 方式2:本地终端 ssh root@your.server.ip

2. 安装基础环境

# 更新系统
apt update && apt upgrade -y
# 安装 Node.js 20.x
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
# 验证安装
node -v  
npm -v

版本如下。

# 安装 PM2 进程管理器
npm install -g pm2
# 安装 Git
apt install git -y

03

第二阶段:部署项目

3. 克隆项目

注意:GitHub 不再支持密码登录,直接 clone 会报 Password authentication not supported。需要先在 GitHub Settings → Developer settings → Personal access tokens 创建一个 Token,用 Token 替代密码,步骤如下。

cd
 /home
git 
clone
 -b main https://github.com/your-username/project.git
cd
 项目名

4. 配置环境变量

nano .env.local

把你的环境变量粘贴进去(Supabase、支付宝等配置),保存方式不是 ctrl+ S ,而是这么做。

  • Ctrl + X 退出
  • 按 Y 确认保存
  • 按 Enter 确认文件名

以后,如何修改环境变量呢?

# 先看看现有的
cat /home/pay4SaaS/.env.local
# 统一操作流程
cd
 /home/pay4SaaS  
echo ""
 > .env.local   
# 清空
nano .env.local         
# 粘贴新配置

然后再往下步走。

5. 安装依赖和构建

在这个目录下/home/pay4SaaS,执行。

npm install      
# 安装依赖
npm run build    
# 构建生产版本

6. 使用 PM2 启动应用

先创建 PM2 配置文件。

nano ecosystem.config.js

粘贴以下内容:

module
.exports = {  
apps: [{    
name: 
'pay4saas',    
script: 
'node_modules/next/dist/bin/next',    
args: 
'start -H 0.0.0.0',    
cwd: 
'/home/pay4SaaS',    
instances: 
1,    
exec_mode: 
'fork',    
env: {      
NODE_ENV: 
'production',      
PORT: 
3000
    }

  }]

}

然后启动:

pm2 start ecosystem.config.js
pm2 save        
# 保存配置
pm2 startup     
# 设置开机自启

两个常见坑。

  • 不要直接用 pm2 start npm -- start,工作目录容易出问题
  • 一定要加 -H 0.0.0.0,不然只监听 localhost,外网访问不了。

04

第三阶段:网络配置

7. 配置阿里云安全组

安全组是阿里云、AWS、腾讯云等云厂商特有的。如果你用的是纯 VPS(如 Hetzner),没有安全组,只需配下一步的 UFW 防火墙即可。

位置:云服务器 ECS → 网 安全组 → 管理规则 → 入方向

默认这个应该都配了,来看一下,确认一下,没配的配一下。

需要开放的端口:

端口用途
22SSH 连接
80HTTP 访问
443HTTPS 访问
3000Next.js 应用(临时测试用)

每条规则这样配:授权策略选"允许",优先级 100,协议类型选"自定义 TCP",授权对象填 0.0.0.0/0

配完记得点提交保存。

8. 配置 UFW 防火墙

阿里云安全组配完还不够,服务器自己也有一层 UFW 防火墙,也要配:

# 查看当前状态
sudo ufw status
# 开放必要端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3000/tcp
# 重载生效
sudo ufw reload

注意,这是个很容易漏掉的点——只配阿里云安全组,忘了 UFW,会导致 502 错误。两层都要配。

05

第四阶段:域名和 HTTPS

9. 配置域名解析

在你的域名管理平台(比如,我的是阿里云域名控制台)添加两条 A 记录。

主机记录记录值
@你的服务器公网 IP
www你的服务器公网 IP

添完等 5-30 分钟 DNS 生效,用下面的命令在 cmd 终端验证。

ping pay4saas.cn
nslookup pay4saas.cn 8.8.8.8

10. 安装配置 Nginx

# 安装
sudo apt install nginx -y
# 创建网站配置
sudo nano /etc/nginx/sites-available/pay4saas

粘贴以下配置:

server {
    listen 80;
    server_name pay4saas.cn www.pay4saas.cn;
    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_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;
        proxy_cache_bypass $http_upgrade;
    }

}

然后启用配置:

sudo ln -s /etc/nginx/sites-available/pay4saas /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

11. 配置免费 HTTPS 证书

# 安装 Certbot
sudo apt install certbot python3-certbot-nginx -y
# 自动获取并配置 SSL 证书
sudo certbot --nginx -d pay4saas.cn -d www.pay4saas.cn

按提示输入邮箱、同意条款就好。

Certbot 会自动帮你改好 Nginx 配置。

注意,这里有 2 个坑,DNS 还没生效就跑 certbot 会验证失败。

80 和 443 端口没开也会失败。先确认域名能 ping 通再来做这步。

06

下次改了代码要上线,怎么做?

日常更新部署,做这些

每次改了代码,ssh 进服务器执行这几条就行,1-2 分钟搞定。

ssh root@your.server.ip
cd
 /home/pay4SaaS
# 一键更新
pm2 stop pay4saas && rm -rf .next && git pull origin main && npm install && npm run build && pm2 start pay4saas
# 看日志确认是否正常
pm2 logs pay4saas 
# 如果线上有严重问题,停止应用(网站会返回 502)
pm2 stop pay4saas

On this page