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

服务器

在一个服务器上部署多个项目是常见的需求,尤其是在资源有限或需要集中管理的情况下。以下是几种常见的方式和最佳实践:


一、使用不同的端口运行多个项目

每个项目监听不同的端口,通过反向X_X(如 Nginx)对外提供服务。

示例:

  • 项目A:Node.js 应用 → 监听 3000 端口
  • 项目B:Python Flask 应用 → 监听 5000 端口
  • 项目C:Java Spring Boot 应用 → 监听 8080 端口

然后使用 Nginx 做反向X_X:

# /etc/nginx/sites-available/project-a
server {
    listen 80;
    server_name project-a.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# /etc/nginx/sites-available/project-b
server {
    listen 80;
    server_name project-b.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

✅ 优点:简单直接
❌ 缺点:需管理多个端口,容易冲突


二、使用域名区分项目(推荐)

通过不同域名访问不同项目,Nginx 根据 server_name 转发请求。

例如:

  • blog.example.com → 指向博客项目
  • api.example.com → 指向 API 项目
  • admin.example.com → 指向后台管理系统

配置方式同上,使用 server_name 区分即可。

✅ 优点:用户无感知,URL 友好,易于扩展


三、使用 Docker 隔离项目(强烈推荐)

为每个项目创建独立的 Docker 容器,实现环境隔离、依赖独立、便于部署。

步骤:

  1. 为每个项目编写 Dockerfile
  2. 使用 docker-compose.yml 统一管理多个服务
# docker-compose.yml
version: '3'
services:
  web-blog:
    build: ./blog
    ports:
      - "3000:80"
    restart: unless-stopped

  web-api:
    build: ./api
    ports:
      - "5000:3000"
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - web-blog
      - web-api

再配合 Nginx 做反向X_X,实现域名路由。

✅ 优点:环境隔离、易于维护、可移植性强
❌ 缺点:学习成本略高


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

如果你部署的是多个 Node.js 项目,可以使用 PM2 进程管理器:

pm2 start app1.js --name "blog"
pm2 start app2.js --name "api"
pm2 start app3.js --name "admin"

pm2 save
pm2 startup  # 开机自启

然后用 Nginx 反向X_X到对应的本地端口。


五、目录结构建议

合理组织文件结构,便于管理:

/srv
├── blog/
│   ├── app.js
│   └── package.json
├── api/
│   ├── server.py
│   └── requirements.txt
├── admin/
│   └── dist/ (静态文件)
└── docker-compose.yml

六、安全与维护建议

  1. 使用非 root 用户运行应用
  2. 配置防火墙(ufw / firewall-cmd),只开放必要端口(如 80, 443)
  3. 启用 HTTPS(Let’s Encrypt + Certbot)
  4. 日志集中管理(如使用 journalctl 或 ELK)
  5. 定期备份数据和代码

总结:推荐方案

方案 适用场景
Nginx 反向X_X + 不同端口 小型项目,快速上线
Nginx + 多域名 多个正式对外服务
Docker + Nginx 中大型项目,追求可维护性
PM2(Node.js) 多个 Node 项目

? 推荐组合:Docker + Nginx + 域名 + HTTPS


如果你告诉我你项目的类型(如:Node.js、Python、Java、静态网站等),我可以给出更具体的部署示例。

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