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

在一台云服务器上部署多个项目是常见且高效的做法。以下是详细的部署方法和建议,适用于常见的 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:3000python-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

四、安全与性能建议

  1. 防火墙:只开放 80、443 端口,关闭其他端口(如 3000、5000)对外访问。
    sudo ufw allow 80
    sudo ufw allow 443
    sudo ufw enable
  2. 使用非 root 用户部署,避免权限过高。
  3. 日志监控:定期查看 Nginx、应用日志。
  4. 资源监控:使用 htopnetdata 监控 CPU、内存使用。

五、总结:推荐流程

  1. 每个项目独立运行在不同端口或容器中。
  2. 使用 Nginx 作为反向,统一入口。
  3. 配置域名解析 + HTTPS。
  4. 使用 PM2(Node)或 Docker 管理进程。
  5. 做好权限、防火墙、日志管理。

如果你提供具体项目类型(如 Vue + Django + Spring Boot),我可以给出更详细的部署方案。

未经允许不得转载:CLOUD技术博 » 一个云服务器怎么部署多个项目?