奋斗
努力

如何在轻量服务器上部署Python或Node.js应用?

云计算

在轻量服务器(如阿里云 ECS、腾讯云 CVM、DigitalOcean Droplet 等)上部署 Python 或 Node.js 应用,核心流程相似:准备环境 → 上传代码 → 配置运行环境 → 启动服务 → 反向X_X与域名解析。以下是详细步骤指南:


✅ 通用前置准备

  1. 购买并登录轻量服务器
    • 选择操作系统:推荐 Ubuntu 20.04/22.04 LTS 或 CentOS 7+(Python/Node 生态支持好)。
    • 开放必要端口:22(SSH)、80(HTTP)、443(HTTPS),若用非标准端口需额外放行。
  2. 安装基础工具
    sudo apt update && sudo apt upgrade -y          # Ubuntu/Debian
    # 或
    sudo yum update -y                              # CentOS/RHEL
    sudo apt install curl git vim net-tools -y      # 常用工具

🐍 Python 应用部署(以 Flask/Django 为例)

1. 安装 Python 环境

# 安装 Python 3.10+ 和 pip
sudo apt install python3-pip python3-venv -y

# 创建虚拟环境(推荐)
cd /var/www/myapp
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip

2. 上传项目代码

# 方式一:Git 拉取
git clone https://github.com/yourname/my-flask-app.git .

# 方式二:SCP 上传本地文件
scp -r ./myapp/* user@your-server-ip:/var/www/myapp/

3. 安装依赖

pip install -r requirements.txt
# Django 示例:
# pip install django gunicorn psycopg2-binary

4. 配置 Gunicorn(生产级 WSGI 服务器)

创建 gunicorn.conf.py:

bind = "127.0.0.1:8000"  # 仅监听本地,Nginx 反向X_X
workers = 4              # 根据 CPU 核数调整
timeout = 120
accesslog = "-"
errorlog = "-"

启动测试:

gunicorn -c gunicorn.conf.py myapp.wsgi:application

5. 使用 systemd 管理进程(开机自启)

创建 /etc/systemd/system/myapp.service:

[Unit]
Description=My Flask App
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/myapp
Environment="PATH=/var/www/myapp/venv/bin"
ExecStart=/var/www/myapp/venv/bin/gunicorn -c gunicorn.conf.py myapp.wsgi:application
Restart=always

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp

6. Nginx 反向X_X + HTTPS(可选但强烈推荐)

安装 Nginx:

sudo apt install nginx certbot python3-certbot-nginx -y

配置 /etc/nginx/sites-available/myapp:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}

启用站点并申请 SSL:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d your-domain.com

🟢 Node.js 应用部署(以 Express 为例)

1. 安装 Node.js(推荐 nvm 管理版本)

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install --lts
node -v  # 验证
npm -v

2. 上传项目 & 安装依赖

mkdir -p /var/www/my-node-app && cd $_
git clone https://github.com/yourname/my-express-app.git .
npm install
# 生产模式:
NODE_ENV=production npm run build  # 若有构建步骤

3. 使用 PM2 管理进程(推荐,替代 systemd)

npm install -g pm2
pm2 start app.js --name "my-app"
pm2 startup
pm2 save

💡 app.js 需确保监听 localhost(如 app.listen(3000, '127.0.0.1')),避免直接暴露公网。

4. Nginx 反向X_X(同上)

配置同 Python 部分,将 proxy_pass 改为 http://127.0.0.1:3000(或你的端口)。


🔒 安全加固建议

  • ✅ 禁用 root SSH 登录,改用密钥认证:
    sudo nano /etc/ssh/sshd_config
    # PermitRootLogin no
    # PubkeyAuthentication yes
  • ✅ 配置防火墙(UFW):
    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
  • ✅ 定期更新系统:sudo apt update && sudo apt upgrade -y
  • ✅ 监控日志:journalctl -u myapp -f 或 pm2 logs

📊 对比总结

项目 Python (Gunicorn) Node.js (PM2)
启动命令 gunicorn ... pm2 start app.js
进程管理 systemd PM2(更灵活)
多进程支持 内置 workers PM2 自动 cluster
热重载 需手动/脚本 pm2 restart 轻松实现
社区生态 成熟稳定 快速迭代,适合实时应用

需要我为你生成:

  • 完整的 Dockerfile + docker-compose.yml 部署方案?
  • 自动化部署脚本(CI/CD via GitHub Actions)?
  • 针对特定框架(如 FastAPI、Next.js、Vue SSR)的优化配置?

欢迎告诉我你的具体技术栈,我可提供定制化教程! 🚀

未经允许不得转载:云服务器 » 如何在轻量服务器上部署Python或Node.js应用?