在轻量服务器上部署 Python 或 Node.js 应用,核心步骤包括:准备环境、上传代码、配置运行服务、设置反向X_X(可选但推荐)以及确保安全性。下面分别给出两种语言的典型部署方案(以 Ubuntu 20.04/22.04 为例,适用于阿里云 ECS、腾讯云 CVM、DigitalOcean Droplet 等轻量服务器)。
🔹 一、通用前置准备
-
登录服务器
ssh user@your_server_ip -
更新系统 & 安装基础工具
sudo apt update && sudo apt upgrade -y sudo apt install -y curl git wget ufw fail2ban -
配置防火墙(UFW)
sudo ufw allow OpenSSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS(如启用 SSL) sudo ufw enable -
创建非 root 用户(安全最佳实践)
adduser appuser usermod -aG sudo appuser # 建议为 appuser 配置 SSH 密钥登录并禁用 root 远程登录
🔹 二、部署 Python 应用(以 Flask/Django + Gunicorn 为例)
1. 安装 Python 及虚拟环境
sudo apt install -y python3-pip python3-venv
cd /home/appuser/myapp
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
# 安装项目依赖(requirements.txt)
pip install -r requirements.txt
✅ 推荐:使用
gunicorn作为 WSGI 服务器(比 uwsgi 更轻量易配),搭配 Nginx 反向X_X。
2. 编写 systemd 服务文件
sudo nano /etc/systemd/system/myapp.service
内容示例:
[Unit]
Description=My Flask App
After=network.target
[Service]
User=appuser
Group=www-data
WorkingDirectory=/home/appuser/myapp
Environment="PATH=/home/appuser/myapp/venv/bin"
ExecStart=/home/appuser/myapp/venv/bin/gunicorn
--workers 3
--bind unix:/tmp/myapp.sock
myapp:app
Restart=always
[Install]
WantedBy=multi-user.target
💡 注意:将
myapp:app替换为你的实际模块名和实例名(如wsgi:applicationfor Django)
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp
3. 配置 Nginx 反向X_X
sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/myapp
配置示例:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/appuser/myapp/static/;
}
location / {
include proxy_params;
proxy_pass http://unix:/tmp/myapp.sock;
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;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
4. (可选)启用 HTTPS(Let’s Encrypt)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
🔹 三、部署 Node.js 应用(以 Express + PM2 为例)
1. 安装 Node.js(推荐 LTS 版本)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
node -v && npm -v
2. 上传/克隆项目
cd /home/appuser/myapp
git clone <your_repo_url> .
npm install
# 若需生产构建:
npm run build # 如有 TypeScript/Babel 等
3. 安装并配置 PM2(进程管理器)
sudo npm install -g pm2
pm2 startup
# 按提示执行生成的命令(通常为 sudo env ...)
pm2 start app.js --name "my-node-app"
pm2 save
pm2 list
✅
app.js是启动入口(如server.js或index.js),确保监听0.0.0.0:PORT
4. 配置 Nginx 反向X_X(同 Python 部分)
sudo nano /etc/nginx/sites-available/myapp
示例配置(假设 Node 监听 3000 端口):
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://localhost: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;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启用并重载:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
🔹 四、关键注意事项
| 项目 | 建议 |
|---|---|
| 日志管理 | PM2 自带日志;Python 可用 logging + journalctl -u myapp 查看 |
| 自动重启 | systemd / PM2 已支持;配合 fail2ban 防暴力破解 |
| 数据库连接 | 避免硬编码密码;用环境变量或 .env 文件(.env 加入 .gitignore) |
| 备份策略 | 定期备份代码(Git)、数据库(mysqldump/pg_dump)、静态资源 |
| 监控告警 | 可集成 Uptime Kuma、Prometheus+Grafana 或云厂商自带监控 |
🔹 五、快速验证清单 ✅
- [ ] 访问
http://your_ip能正常显示首页 - [ ]
systemctl status myapp/pm2 list显示运行中 - [ ] 日志无持续报错(
journalctl -u myapp或pm2 logs) - [ ] 防火墙仅开放必要端口(22, 80, 443)
- [ ] 已配置自动更新(如
unattended-upgrades)
需要我为你生成一个完整的部署脚本模板(含 Python/Node 双版本),或针对特定框架(如 Django、Next.js、FastAPI)做细化指导吗?
CLOUD技术博