一个云服务器怎么部署多个项目?

在一台云服务器上部署多个项目是常见的需求,比如同时运行多个网站、API 服务或应用。以下是几种主流的实现方式和最佳实践:


一、常见部署方式

1. 使用 Nginx 反向X_X(推荐)

通过 Nginx 配置多个虚拟主机,将不同域名或端口的请求转发到不同的后端服务。

适用场景:多个 Web 项目(如多个网站、API)

示例配置:

# 项目1:example1.com
server {
    listen 80;
    server_name example1.com www.example1.com;

    location / {
        proxy_pass http://127.0.0.1:3000;  # Node.js 项目1
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 项目2:example2.com
server {
    listen 80;
    server_name example2.com www.example2.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # Java/Spring Boot 项目2
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 项目3:静态网站
server {
    listen 80;
    server_name static.example.com;

    root /var/www/project3;
    index index.html;
}

优点:统一入口,支持 HTTPS、负载均衡、缓存等。


2. 使用不同端口直接访问

每个项目监听不同的端口,通过 IP:端口 访问。

示例:

  • 项目1:http://your-server-ip:3000
  • 项目2:http://your-server-ip:8080
  • 项目3:http://your-server-ip:5000

优点:简单快捷
缺点:暴露端口不安全,不易管理,不适合生产环境。


3. 使用 Docker 容器化部署

为每个项目创建独立的 Docker 容器,通过 Docker Compose 管理。

目录结构示例:

/projects
  /project1
    Dockerfile
    app.js
  /project2
    Dockerfile
    main.py
  docker-compose.yml

docker-compose.yml 示例:

version: '3'
services:
  project1:
    build: ./project1
    ports:
      - "3000:3000"
    restart: unless-stopped

  project2:
    build: ./project2
    ports:
      - "8080:8080"
    restart: unless-stopped

  nginx:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - project1
      - project2

优点:环境隔离、易于扩展、便于迁移。


4. 使用 PM2 管理多个 Node.js 项目

如果你部署的是多个 Node.js 应用,可以用 PM2 进程管理器。

# 启动项目1
pm2 start app1.js --name "project1"

# 启动项目2
pm2 start app2.js --name "project2"

# 查看所有进程
pm2 list

配合 Nginx 做反向X_X,实现域名分流。


5. 使用子目录部署(较少用)

将多个项目打包后,通过 Nginx 的路径匹配部署在同一个域名下不同路径。

location /app1/ {
    proxy_pass http://127.0.0.1:3000/;
}

location /app2/ {
    proxy_pass http://127.0.0.1:8080/;
}

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


二、域名与 SSL 配置

  • 使用不同的域名或子域名(如 api.example.com, admin.example.com
  • 使用 Let’s Encrypt 免费证书(配合 Certbot)为每个站点启用 HTTPS
sudo certbot --nginx -d example1.com -d www.example1.com

三、最佳实践建议

建议 说明
✅ 使用 Nginx 反向X_X 统一管理入口,提升安全性和性能
✅ 使用 Docker 隔离环境,避免依赖冲突
✅ 每个项目独立运行 不同端口或容器,避免相互影响
✅ 使用进程管理器(PM2、systemd) 保证服务常驻后台
✅ 配置防火墙 只开放 80、443 端口,关闭其他不必要的端口
✅ 日志分离 每个项目独立日志文件,便于排查问题

四、总结

方法 适合场景 推荐度
Nginx 反向X_X 多个 Web 项目共用 80/443 端口 ⭐⭐⭐⭐⭐
Docker 容器化 多语言、多环境项目 ⭐⭐⭐⭐⭐
多端口直接访问 测试/开发环境 ⭐⭐
PM2 管理 Node 项目 多个 Node.js 服务 ⭐⭐⭐⭐
子目录部署 单域名多应用 ⭐⭐⭐

如果你提供具体的技术栈(如:Node.js + Python + Vue),我可以给出更详细的部署方案。欢迎补充!