网宝
新闻中心 / / 正文

Node.js / Python项目部署到香港服务器

2026-04-11 17:31
技术部
← 返回

 

前言

WordPress和宝塔面板解决了大多数建站需求,但越来越多的开发者和团队需要部署自定义的Node.js或Python应用——可能是REST API服务、爬虫程序、AI推理接口,或者用Next.js、FastAPI搭建的现代Web应用。

这类应用的部署方式与传统PHP建站完全不同,很多开发者在本地跑得好好的项目,部署到服务器后遇到各种问题:进程挂掉了、端口冲突、Nginx配置不对、日志找不到……

本文提供Node.js和Python两个技术栈的完整生产环境部署教程,覆盖从环境安装到稳定运行的每一个步骤。


一、部署前的服务器准备

安装基础工具

 
 
bash
# Ubuntu 22.04
apt update && apt upgrade -y
apt install -y git curl wget vim build-essential

# CentOS 7
yum update -y
yum groupinstall -y "Development Tools"
yum install -y git curl wget vim

确认防火墙配置

 
 
bash
# 开放必要端口(80、443、SSH端口)
# Ubuntu (ufw)
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 你的SSH端口/tcp

# CentOS (firewalld)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

二、Node.js项目部署

步骤一:安装Node.js

推荐使用nvm(Node Version Manager)管理Node.js版本:

 
 
bash
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 加载nvm配置
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# 安装Node.js LTS版本(推荐)
nvm install --lts
nvm use --lts

# 验证安装
node --version
npm --version

步骤二:上传项目代码

方法一:Git克隆(推荐)

 
 
bash
# 生成SSH密钥,添加到GitHub/GitLab
ssh-keygen -t ed25519 -C "server@yourcompany.com"
cat ~/.ssh/id_ed25519.pub  # 复制公钥添加到代码仓库

# 克隆项目
cd /www/wwwroot
git clone git@github.com:yourname/yourproject.git
cd yourproject

方法二:scp上传

 
 
bash
# 从本地上传项目(在本地执行)
scp -P SSH端口 -r ./yourproject root@服务器IP:/www/wwwroot/

步骤三:安装依赖并配置环境变量

 
 
bash
cd /www/wwwroot/yourproject

# 安装生产依赖(不包含devDependencies)
npm install --production

# 创建生产环境配置文件
cp .env.example .env
vi .env

# 填写生产环境的配置(数据库地址、API密钥等)
# NODE_ENV=production
# PORT=3000
# DATABASE_URL=mysql://user:pass@localhost:3306/dbname
# REDIS_URL=redis://localhost:6379

步骤四:测试项目能否正常运行

 
 
bash
# 临时启动项目测试
node app.js   # 或 npm start

# 用另一个终端测试接口
curl http://localhost:3000/

确认项目正常运行后,Ctrl+C停止,接下来用PM2管理进程。

步骤五:使用PM2进行进程管理

PM2是Node.js生产环境最流行的进程管理工具,提供:

  • 进程异常崩溃后自动重启
  • 服务器重启后自动启动应用
  • 多进程负载均衡(Cluster模式)
  • 日志管理和轮转
 
 
bash
# 全局安装PM2
npm install -g pm2

# 使用PM2启动应用
pm2 start app.js --name "myapp"

# 或者通过ecosystem配置文件启动(推荐)

创建PM2配置文件 ecosystem.config.js

 
 
javascript
module.exports = {
  apps: [{
    name: 'myapp',
    script: 'app.js',
    instances: 'max',        // 使用所有CPU核心
    exec_mode: 'cluster',    // 集群模式
    env: {
      NODE_ENV: 'development',
      PORT: 3000
    },
    env_production: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    // 日志配置
    out_file: '/www/wwwlogs/myapp-out.log',
    error_file: '/www/wwwlogs/myapp-error.log',
    log_date_format: 'YYYY-MM-DD HH:mm:ss',
    // 自动重启配置
    watch: false,            // 生产环境不开启文件监控
    max_memory_restart: '500M',  // 内存超过500M自动重启
    restart_delay: 3000,    // 重启前等待3秒
  }]
}
 
 
bash
# 使用配置文件启动
pm2 start ecosystem.config.js --env production

# 设置开机自启
pm2 startup systemd
pm2 save

# 常用PM2命令
pm2 status          # 查看所有进程状态
pm2 logs myapp      # 查看实时日志
pm2 restart myapp   # 重启应用
pm2 reload myapp    # 零停机热更新
pm2 stop myapp      # 停止应用
pm2 delete myapp    # 删除应用
pm2 monit           # 实时监控面板

步骤六:配置Nginx反向代理

Node.js应用监听在本地端口(如3000),通过Nginx反向代理对外提供80/443端口服务:

 
 
bash
vi /etc/nginx/sites-available/myapp   # Ubuntu
# 或
vi /etc/nginx/conf.d/myapp.conf       # CentOS
 
 
nginx
# HTTP重定向到HTTPS
server {
    listen 80;
    server_name api.yourcompany.com;
    return 301 https://$server_name$request_uri;
}

# HTTPS反向代理
server {
    listen 443 ssl http2;
    server_name api.yourcompany.com;

    # SSL证书(Let's Encrypt)
    ssl_certificate /etc/letsencrypt/live/api.yourcompany.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.yourcompany.com/privkey.pem;

    # SSL优化
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;

    # 反向代理到Node.js应用
    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_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;

        # 超时设置
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
    }

    # WebSocket支持(如果需要)
    location /ws {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connecti    
QQ客服 提交工单