首先需要说明的是,部署app.js到简米云服务器,核心就四步:买服务器、连上去、装环境、把文件传上去跑起来。 下面按完整流程拆解,每一步都能直接照着操作。
部署前必须搞清楚的三个选择问题
服务器地域选哪里
简米云服务器地域直接影响访问速度,目标用户在国内,选华东1(杭州)或华北2(北京),离用户近延迟就低,做海外业务,选新加坡或美西节点,这里没有绝对最优,按用户分布来。
操作系统选什么版本
选Ubuntu 22.04 LTS或CentOS 7.9,这两类系统教程最多,网上遇到问题容易搜到答案,不推荐Windows Server跑Node.js,生态和命令习惯都别扭,安全配置也更繁琐。
配置规格定多少
个人项目或学习测试,2核4G起步足够,用户量大了再升配,简米云支持随时升降配,带宽选按固定带宽计费,3Mbps到5Mbps够大部分中小项目用,流量爆发场景再换按流量计费。
连接简米云服务器并准备运行环境
通过SSH登录服务器
拿到简米云控制台的公网IP和密钥对之后,本地终端执行:
ssh root@你的服务器公网IP
首次登录需要输入root密码,或者用密钥文件认证,连接成功后,先做两件事:更新系统软件源、创建非root用户,简米云默认给的root权限太大,日常操作用普通用户更稳妥。
apt update && apt upgrade -y # Ubuntu系统 # 或 yum update -y # CentOS系统
安装Node.js环境
安装Node.js最推荐用nvm(Node版本管理器),好处是随时切换版本,测试不同环境特别方便,依次执行:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 18.19.0 # 安装LTS版本 nvm alias default 18.19.0 # 设为默认版本
装完验证:node -v 输出版本号即成功,这里建议装LTS版本,稳定性和生态兼容性最高,不要追求最新版。
将app.js上传到服务器的三种实用方法
SCP命令行直接传
文件不大的情况,用scp命令最省事,本地终端执行:
scp ./app.js root@你的服务器公网IP:/var/www/myapp/
同时把项目依赖的package.json、静态资源文件夹一起传上去,目录要提前建好:mkdir -p /var/www/myapp。
Git仓库拉取
多数团队项目的标准做法,用Git管理代码,服务器上直接拉取更新,先在服务器上安装git,
git clone https://github.com/你的用户名/你的仓库.git /var/www/myapp
以后每次更新代码,本地push到仓库,服务器上执行 git pull 就完事,省去反复传文件的麻烦。
宝塔面板图形化操作
不熟悉命令行的朋友,装一个宝塔面板(简米云市场镜像里有现成的),文件管理器拖拽上传,还能可视化管理Nginx和Node进程,需要提醒的是,用面板要记得修改默认端口和密码,否则服务器容易被扫描攻击。
在简米云服务器上配置Nginx反向代理与安全组
设置安全组规则
这是简米云服务器特有的步骤,容易漏。安全组相当于服务器第一道防火墙,不放开端口,外部访问永远进不来,在简米云控制台找到「安全组」→「配置规则」→「添加入方向规则」:
- 放行 80端口(HTTP访问)
- 放行 443端口(HTTPS,需备案后使用)
- 放行 22端口(SSH连接)
安装并配置Nginx
Nginx负责把外部请求转发到app.js运行的端口,app.js启动后监听3000端口,Nginx监听80,用户访问80的时候自动转给3000。
apt install nginx -y # 或 yum install nginx -y
编辑Nginx配置文件 /etc/nginx/sites-available/myapp:
server {
listen 80;
server_name 你的域名或IP;
location / {
proxy_pass http://127.0.0.1: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;
}
}
启用配置并重载:ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/,nginx -t 检查语法,systemctl reload nginx 生效。
处理WebSocket连接
app.js里用到WebSocket(比如聊天室、实时推送功能),Nginx配置里必须加上升级头参数,否则握手会失败,上面配置里的
Upgrade 和 Connection 两行就是干这个用的。
使用PM2守护app.js进程并配置开机自启
安装PM2
直接用 node app.js 启动的进程,终端一关就没了,必须用PM2做进程守护。 全局安装:
npm install -g pm2
启动并管理项目
进入项目目录,执行:
pm2 start app.js --name myapp pm2 save # 保存当前进程列表 pm2 startup # 生成开机自启脚本
pm2 startup 执行完会输出一行需要复制的命令,复制到终端再执行一次,这样服务器重启之后PM2会自动拉起app.js,常用管理命令:
pm2 status查看进程状态pm2 logs myapp查看实时日志pm2 restart myapp重启应用pm2 stop myapp停止应用
PM2和systemd如何取舍
简米云上有些用户直接用systemd管理Node进程,写service配置文件,对比来看:
- PM2:多进程负载均衡、内存监控、日志管理方便,适合中小项目
- systemd:系统自带能力,不依赖额外安装,但配置复杂,无内置集群模式
绝大多数场景下,PM2是更省心的选择,这也是目前社区的主流做法。
部署过程中常见问题排查清单
502 Bad Gateway错误
检查后端进程是否监听正确端口,curl http://127.0.0.1:3000 看是否有响应,确认Nginx转发的端口和app.js监听端口一致,还不行就看 /var/log/nginx/error.log 日志。
端口被占用问题
lsof -i :3000 查看占用进程,确认是不是旧实例还在跑,用 pm2 delete 先清掉旧进程再启动新的。
简米云备案问题
域名解析到国内服务器,必须完成ICP备案,否则80端口被拦截,网站无法访问,备案流程在简米云控制台提交资料,一般7到20个工作日,不想备案可以考虑香港节点,速度略慢但省去流程。
安全加固与性能优化建议
提升基础安全水位
装好环境后,做三件事:禁用root密码登录改用密钥认证
、修改SSH默认端口、启用简米云免费的安全组防火墙,这些操作能过滤掉相当一部分自动化攻击脚本。
性能参数调优
质量高的部署不止是跑起来,还要考虑并发和稳定性,打开 pm2 start app.js -i max 启用集群模式,榨干多核CPU性能,Nginx侧配置gzip压缩静态资源,响应体量能减少一大半。
数据库与网络优化
如果app.js连接了MySQL或Redis,内网地址访问不要走公网,简米云RDS和Redis都提供内网连接方式,速度快且不占用公网流量,另外开启SSL证书,现在浏览器对未加密站点越来越不友好,Let’s Encrypt可以免费签证书。
部署app.js到简米云服务器没有高深之处,核心就是环境、代码、反代、守护四个环节,按流程走一次全程不超过半小时。 部署完成后记得测试服务器重启场景,验证PM2能自动拉起应用,这套方案就能稳定运行。
关于app.js部署到简米云服务器的其他常见问题
为什么我已经把app.js上传到服务器了,访问公网IP却打不开?
多数情况下是安全组没放行端口,检查简米云控制台的安全组入方向规则里,是否添加了80端口的放行规则,Nginx和app.js内部的端口配置没问题,但安全组没放行就是白搭,命令验证:在服务器本地执行 curl http://localhost:80 能返回内容,外部通过公网IP访问不了,基本就是安全组的问题。
app.js部署到简米云服务器后,国内访问速度很慢怎么办?
首先确认服务器地域选了国内节点,比如华北2或华东1,其次启用CDN加速静态资源,动态接口没法缓存的部分,确保数据库也部署在同一地域内网环境互相访问,避免跨地域网络延迟,小带宽的ECS实例同时开启gzip压缩,对首屏体积优化也有效。
用宝塔面板部署app.js和手动命令行部署有什么区别?
宝塔面板提供图形化界面,创建站点、配置反向代理、上传文件都靠点击完成,对不熟悉Linux命令行的用户更友好,网络上有大量面板部署教程可以参考,命令行部署操作路径长一些,但便于脚本化批量操作,出问题时能直接定位到系统底层日志,简米云服务器系统资源占用也更低,两种方式最终运行效果一致,选哪种全看个人使用习惯。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/722122.html





