1. 安装Node.js和npm
Node.js是JavaScript应用的运行环境,npm是其包管理工具。推荐通过NodeSource仓库安装特定版本(如16.x/18.x),确保兼容性:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
安装完成后,通过node -v和npm -v验证版本。
2. 上传应用代码
使用scp(命令行)或FileZilla(图形化工具)将本地项目上传至服务器指定目录(如/var/www/yourapp):
scp -r /local/path/to/yourapp username@server_ip:/var/www/yourapp
或通过Git克隆代码(若项目托管在GitHub/GitLab):
git clone https://github.com/yourusername/yourapp.git /var/www/yourapp
3. 安装项目依赖
进入项目目录,运行npm install自动安装package.json中定义的依赖(如Express、React等):
cd /var/www/yourapp
npm install
若依赖较多,可添加--production标志跳过开发依赖:
npm install --production
4. 配置环境变量
若应用需要敏感信息(如数据库密码、API密钥),建议使用.env文件管理:
.env文件,添加变量:NODE_ENV=production
DATABASE_URL=mongodb://user:pass@localhost:27017/yourdb
API_KEY=your_api_key_here
.env不被提交至版本控制(在.gitignore中添加.env)。5. 启动应用(含进程管理)
直接使用node app.js启动应用会因终端关闭而终止,推荐使用PM2(进程管理器)实现后台运行、自动重启和负载均衡:
sudo npm install pm2 -g # 全局安装PM2
pm2 start app.js --name "your-app" # 启动应用(app.js为入口文件)
pm2 save # 保存当前进程列表
pm2 startup # 设置开机自启
通过pm2 list查看运行状态,pm2 logs查看日志。
6. 配置Nginx反向代理(可选但推荐)
Nginx可作为反向代理,处理HTTP请求转发、SSL加密和静态文件服务,提升应用性能和安全性:
sudo apt-get install nginx
/etc/nginx/sites-available/yourapp(若目录不存在则创建),添加以下内容(替换yourdomain.com为域名/IP,3000为Node.js应用端口):server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:3000; # 转发至Node.js应用
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;
}
}
sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
7. 设置防火墙
若服务器启用了ufw防火墙,需开放HTTP(80)和HTTPS(443)端口:
sudo ufw allow 'Nginx Full' # 允许HTTP和HTTPS
sudo ufw enable # 启用防火墙(若未启用)
8. 配置SSL证书(可选但强烈推荐)
使用Let’s Encrypt免费获取SSL证书,实现HTTPS加密:
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
9. 前端项目特殊处理(若为纯前端项目)
若部署的是React/Vue等前端项目,需先构建生产环境代码,再用Nginx服务静态文件:
npm run build # 生成dist/build目录
/etc/nginx/sites-available/yourapp,将root指向构建目录:server {
listen 80;
server_name yourdomain.com;
root /var/www/yourapp/dist; # 构建后的静态文件目录
index index.html;
location / {
try_files $uri $uri/ /index.html; # 支持前端路由
}
}
sudo systemctl restart nginx