在一台云服务器上部署多个项目是常见且高效的做法。以下是详细的部署方法和建议,适用于常见的 Web 项目(如 Node.js、Python、Java、PHP 等)。
一、常见部署方式
1. 使用 Nginx 反向(推荐)
通过 Nginx 作为反向,将不同域名或子域名指向服务器上的不同项目端口。
示例:
- 项目 A:
example.com→ 本地端口3000 - 项目 B:
api.example.com→ 本地端口5000 - 项目 C:
blog.example.com→ 本地端口8080
Nginx 配置示例:
# /etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name blog.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启用站点后重启 Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
2. 使用不同的端口直接访问
每个项目运行在不同端口,通过 IP:端口 或域名+端口访问。
- 项目 A:
http://your-server-ip:3000 - 项目 B:
http://your-server-ip:5000
缺点:不够美观,端口暴露,不适用于生产环境。
3. 使用 Docker 隔离部署(推荐)
每个项目打包为一个 Docker 容器,通过 Docker + Nginx 实现统一入口。
优点:
- 环境隔离,避免依赖冲突
- 易于管理、备份、迁移
- 可配合 Docker Compose 快速部署
示例 docker-compose.yml:
version: '3'
services:
frontend:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- node-app
- python-app
node-app:
build: ./node-project
expose:
- "3000"
python-app:
build: ./flask-project
expose:
- "5000"
Nginx 再反向到 node-app:3000 和 python-app:5000。
4. 使用 PM2 管理多个 Node.js 项目
如果你部署多个 Node.js 项目,可以用 PM2 启动并守护进程。
pm2 start app1.js --name "project-a"
pm2 start app2.js --name "project-b"
pm2 save
pm2 startup # 开机自启
然后通过 Nginx 反向到 localhost:3000, localhost:4000 等。
二、项目目录结构建议
/home/deploy/
├── project-a/ # Node.js 项目
├── project-b/ # Python Flask 项目
├── project-c/ # React 打包静态文件
├── docker/ # Docker 配置
└── nginx/sites/ # Nginx 配置文件
三、域名与 HTTPS 配置
- 使用 Let’s Encrypt + Certbot 为每个域名配置 HTTPS:
sudo certbot --nginx -d example.com -d www.example.com - 自动续期:
sudo certbot renew --dry-run
四、安全与性能建议
- 防火墙:只开放 80、443 端口,关闭其他端口(如 3000、5000)对外访问。
sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable - 使用非 root 用户部署,避免权限过高。
- 日志监控:定期查看 Nginx、应用日志。
- 资源监控:使用
htop、netdata监控 CPU、内存使用。
五、总结:推荐流程
- 每个项目独立运行在不同端口或容器中。
- 使用 Nginx 作为反向,统一入口。
- 配置域名解析 + HTTPS。
- 使用 PM2(Node)或 Docker 管理进程。
- 做好权限、防火墙、日志管理。
如果你提供具体项目类型(如 Vue + Django + Spring Boot),我可以给出更详细的部署方案。
CLOUD技术博