检查一下编译产物: Test-Path dist/main.js # 或者 dist/src/main.js看你的配置如果返回True说明编译成功了。 实在不行你也可以在本地编译好了把整个dist文件夹直接上传到服务器跳过服务器上编译这一步。四、用 PM2 启动后端1. 写 PM2 配置文件在项目的根目录比如C:\wwwroot\my-node-project下新建一个文件叫ecosystem.config.js内容如下module.exports { apps: [ { name: my-node-backend, // 给你的应用起个好认的名字 cwd: ./backend, // 入口文件在哪个目录按你实际的改 script: dist/main.js, // 编译后的入口文件 instances: 1, autorestart: true, watch: false, max_memory_restart: 500M, env: { NODE_ENV: production, PORT: 3000, }, error_file: ./logs/backend-error.log, out_file: ./logs/backend-out.log, log_date_format: YYYY-MM-DD HH:mm:ss, }, ], }; 别忘了先创建logs文件夹mkdir C:\wwwroot\my-node-project\backend\logs2. 启动应用cd C:\wwwroot\my-node-project pm2 start ecosystem.config.js pm2 save3. 看看到底跑起来没有pm2 status你应该会看到类似这样的输出只要status是online就说明成了。4. 本地测试一下接口curl http://localhost:3000/api/health # 换成你项目里真实存在的接口如果返回了数据哪怕是 401 未授权也没关系起码说明服务在跑就恭喜你Node 程序已经在后台欢快地工作了。五、配置 HTTPS 反向代理用 Caddy为啥要搞这个因为你的前端比如部署在 Vercel强制用了 HTTPS而浏览器有个安全策略HTTPS 页面不能去请求 HTTP 接口否则会报 Mixed Content 错误。所以你的后端也必须通过 HTTPS 对外暴露。但是你服务器上可能已经有 IIS 或者其他服务占用了 80 和 443 端口。所以我们换个思路用 Caddy 监听一个高位端口比如 8443手动挂上 SSL 证书这样就不会跟 IIS 打架了。1. 下载 Caddy在 PowerShell 里执行Invoke-WebRequest -Uri https://github.com/caddyserver/caddy/releases/download/v2.9.1/caddy_2.9.1_windows_amd64.zip -OutFile $env:TEMP\caddy.zip New-Item -Path C:\caddy -ItemType Directory -Force Expand-Archive $env:TEMP\caddy.zip -DestinationPath C:\caddy -Force2. 搞一张免费 SSL 证书以阿里云为例登录阿里云控制台搜索“SSL 证书”点“免费证书” → “立即购买”0 元选“DV 单域名证书”证书绑定的域名写你的 API 域名比如api.yourdomain.com验证方式选 DNS如果你的域名也在阿里云它会自动帮你添加 TXT 记录签发成功后下载证书格式选Nginx你会得到两个文件.pem证书和.key私钥把这两个文件放到C:\caddy\目录下像这样C:\caddy\api.yourdomain.com.pem C:\caddy\api.yourdomain.com.key3. 配置 DNS 解析去你的域名管理后台加一条A 记录主机记录记录类型记录值apiA你服务器的公网 IP等几分钟让解析生效可以用这条命令验证Resolve-DnsName api.yourdomain.com应该会返回你的公网 IP。4. 写 Caddyfile在C:\caddy\目录下新建一个文件就叫Caddyfile没有扩展名内容如下{ auto_https off } api.yourdomain.com:8443 { tls C:\caddy\api.yourdomain.com.pem C:\caddy\api.yourdomain.com.key reverse_proxy localhost:3000 }⚠️ 这一行的auto_https off千万不能少不然 Caddy 会试图去占 80 端口做自动重定向然后就报错了。5. 测试一下 Caddy 能不能跑cd C:\caddy .\caddy.exe run --config Caddyfile --resumefalse如果你看到了server running并且没有报错那就成功了。按CtrlC先停掉。6. 让 Caddy 开机自启用任务计划关掉刚才的 Caddy 窗口然后以管理员身份打开 PowerShell执行下面这一大坨命令$action New-ScheduledTaskAction -Execute C:\caddy\caddy.exe -Argument run --config C:\caddy\Caddyfile -WorkingDirectory C:\caddy $trigger New-ScheduledTaskTrigger -AtStartup $settings New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RestartCount 5 -RestartInterval (New-TimeSpan -Minutes 1) Register-ScheduledTask -TaskName Caddy-API-Proxy -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Force Start-ScheduledTask -TaskName Caddy-API-Proxy检查一下 8443 端口是不是已经在监听了netstat -ano | findstr :8443应该会显示LISTENING。7. 开放防火墙端口netsh advfirewall firewall add rule nameAllow HTTPS 8443 dirin actionallow protocolTCP localport8443另外如果你的云服务器还有安全组阿里云叫安全组规则也要去控制台添加入方向规则允许 TCP 8443。8. 测试 HTTPS 接口打开浏览器或者直接敲命令curl https://api.yourdomain.com:8443/api/health如果能返回数据哪怕是 401就说明 HTTPS 反向代理大功告成了。六、日常更新代码的流程以后每次改了代码在服务器上走这几步