基于Nginx反向代理的Remix.js SSR应用部署疑问
Remix.js 部署到 Digital Ocean Droplet(Remix App Server + Nginx)
问题核心
只传build/和public/build/无法运行remix-serve,是因为缺少生产依赖包和启动所需配置文件——remix-serve本身是需要安装的依赖,同时构建产物可能依赖你项目里的第三方包。
两种可行部署方式
方式一:本地构建后传必要文件到服务器(推荐,减少服务器资源消耗)
- 本地准备部署文件
- 执行
remix build生成build/和public/build/目录 - 复制项目根目录的
package.json和package-lock.json(或yarn.lock),注意:- 确保
remix-serve在package.json的dependencies里(如果之前装在devDependencies,执行npm install remix-serve --save移到生产依赖)
- 确保
- 执行
- 服务器端操作
- 把上述文件传到服务器的部署目录(比如
/var/www/remix-app) - 安装生产依赖:
npm install --production(只装运行必需的包,速度更快)
- 把上述文件传到服务器的部署目录(比如
- 启动服务
- 直接运行:
npx remix-serve build - 更规范的方式是在
package.json里加启动脚本:
然后执行"scripts": { "start": "remix-serve build" }npm start - 用PM2管理进程(防止终端关闭后服务停止):
- 安装PM2:
npm install -g pm2 - 启动服务:
pm2 start npm --name "remix-app" -- start - 查看状态:
pm2 status - 设置开机自启:执行
pm2 startup,按照提示完成配置
- 安装PM2:
- 直接运行:
方式二:服务器上克隆项目直接构建(适合频繁迭代场景)
- 服务器环境准备:安装Git、Node.js(版本和本地开发环境一致)
- 克隆并构建
- 克隆项目:
git clone <你的仓库地址> - 进入项目目录:
cd <项目名称> - 安装所有依赖:
npm install - 构建项目:
remix build
- 克隆项目:
- 启动服务:同样用PM2管理,执行
pm2 start npm --name "remix-app" -- start
Nginx反向代理补充配置
确保Nginx正确转发动态请求到Remix App Server,同时直接处理静态资源:
编辑Nginx站点配置文件(比如/etc/nginx/sites-available/your-domain.conf):
server { listen 443 ssl; server_name your-domain.com; # Let's Encrypt 证书配置 ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 静态资源由Nginx直接处理,提升性能 location /public/build/ { root /var/www/remix-app; expires 1y; add_header Cache-Control "public, immutable"; } # 动态请求转发到Remix App Server(默认端口3000) location / { proxy_pass http://localhost:3000; 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; } } # HTTP自动重定向到HTTPS server { listen 80; server_name your-domain.com; return 301 https://$host$request_uri; }
- 测试配置有效性:
nginx -t - 重启Nginx生效:
systemctl restart nginx
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

