在轻量服务器(如阿里云 ECS、腾讯云 CVM、DigitalOcean Droplet 等)上部署 Python 或 Node.js 应用,核心流程相似:准备环境 → 上传代码 → 配置运行环境 → 启动服务 → 反向X_X与域名解析。以下是详细步骤指南:
✅ 通用前置准备
- 购买并登录轻量服务器
- 选择操作系统:推荐 Ubuntu 20.04/22.04 LTS 或 CentOS 7+(Python/Node 生态支持好)。
- 开放必要端口:
22(SSH)、80(HTTP)、443(HTTPS),若用非标准端口需额外放行。
- 安装基础工具
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)的优化配置?
欢迎告诉我你的具体技术栈,我可提供定制化教程! 🚀
云服务器