在一台服务器上部署多个项目是常见且可行的做法,只要合理规划资源和配置。以下是实现这一目标的常见方法和最佳实践:
一、部署方式选择
1. 使用反向X_X(推荐)
通过 Nginx 或 Apache 作为反向X_X,将不同域名或子域名指向不同的项目。
示例:Nginx 配置多个站点
# /etc/nginx/sites-available/project1
server {
listen 80;
server_name project1.example.com;
location / {
proxy_pass http://127.0.0.1:3000; # Node.js 项目
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# /etc/nginx/sites-available/project2
server {
listen 80;
server_name project2.example.com;
location / {
proxy_pass http://127.0.0.1:8000; # Python/Django 项目
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
然后启用站点:
ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/project2 /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
2. 使用不同端口
每个项目运行在不同端口上,通过域名或IP+端口访问。
- 项目A:
http://server-ip:3000 - 项目B:
http://server-ip:8000
建议配合反向X_X,避免暴露端口。
3. 使用子路径(路径X_X)
同一域名下,不同路径指向不同项目。
location /app1/ {
proxy_pass http://127.0.0.1:3000/;
}
location /app2/ {
proxy_pass http://127.0.0.1:8000/;
}
注意:后端项目需支持子路径(如设置
baseURL或static_url)。
二、项目运行方式
1. 进程管理工具
-
Node.js:使用
pm2管理多个 Node 项目pm2 start app1.js --name "project1" pm2 start app2.js --name "project2" pm2 save pm2 startup -
Python:使用
gunicorn+supervisor或systemd
2. 容器化部署(推荐)
使用 Docker 部署每个项目,隔离环境。
# 每个项目一个容器
docker run -d -p 3000:3000 --name project1 myapp1
docker run -d -p 8000:8000 --name project2 myapp2
或使用 docker-compose.yml 统一管理:
version: '3'
services:
project1:
image: myproject1
ports:
- "3000:3000"
project2:
image: myproject2
ports:
- "8000:8000"
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- project1
- project2
三、资源管理与隔离
| 项目 | 端口 | 运行用户 | 资源限制 | 数据目录 |
|---|---|---|---|---|
| 项目A | 3000 | nodeuser | CPU/Mem 限制 | /var/www/project1 |
| 项目B | 8000 | pyuser | —— | /var/www/project2 |
- 使用
systemd限制资源(CPU、内存) - 为每个项目创建独立用户,提高安全性
四、数据库与存储
- 共享数据库:多个项目使用同一个 MySQL/PostgreSQL,但不同数据库或表前缀
- 独立数据库:每个项目使用独立数据库实例(推荐)
- 文件存储:使用独立目录,避免冲突
五、安全建议
- 使用防火墙(如
ufw)只开放必要端口(80, 443) - 配置 HTTPS(Let’s Encrypt + Certbot)
- 定期更新系统和软件
- 限制 SSH 访问,使用密钥登录
- 日志集中管理(如用
journalctl或 ELK)
六、监控与维护
- 使用
htop、netstat查看资源占用 - 配置日志轮转(logrotate)
- 使用监控工具(如 Prometheus + Grafana)
总结
✅ 推荐方案组合:
- Nginx 反向X_X + 多个项目不同端口
- Docker 容器化部署(最佳隔离)
- 每个项目独立运行、独立日志、独立配置
- 使用域名区分项目(如 app1.domain.com, app2.domain.com)
这样可以实现高可用、易维护、安全隔离的多项目共存。
如果你提供具体项目类型(如:Node.js、Django、React、Spring Boot等),我可以给出更详细的部署步骤。
CLOUD云