在一台服务器上部署多个项目?

在一台服务器上部署多个项目是常见且可行的做法,只要合理规划资源和配置。以下是实现这一目标的常见方法和最佳实践:


一、部署方式选择

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/;
}

注意:后端项目需支持子路径(如设置 baseURLstatic_url)。


二、项目运行方式

1. 进程管理工具

  • Node.js:使用 pm2 管理多个 Node 项目

    pm2 start app1.js --name "project1"
    pm2 start app2.js --name "project2"
    pm2 save
    pm2 startup
  • Python:使用 gunicorn + supervisorsystemd

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,但不同数据库或表前缀
  • 独立数据库:每个项目使用独立数据库实例(推荐)
  • 文件存储:使用独立目录,避免冲突

五、安全建议

  1. 使用防火墙(如 ufw)只开放必要端口(80, 443)
  2. 配置 HTTPS(Let’s Encrypt + Certbot)
  3. 定期更新系统和软件
  4. 限制 SSH 访问,使用密钥登录
  5. 日志集中管理(如用 journalctl 或 ELK)

六、监控与维护

  • 使用 htopnetstat 查看资源占用
  • 配置日志轮转(logrotate)
  • 使用监控工具(如 Prometheus + Grafana)

总结

推荐方案组合:

  • Nginx 反向X_X + 多个项目不同端口
  • Docker 容器化部署(最佳隔离)
  • 每个项目独立运行、独立日志、独立配置
  • 使用域名区分项目(如 app1.domain.com, app2.domain.com)

这样可以实现高可用、易维护、安全隔离的多项目共存。


如果你提供具体项目类型(如:Node.js、Django、React、Spring Boot等),我可以给出更详细的部署步骤。