ecs服务器上部署两个项目?

云计算

在阿里云 ECS 服务器上部署两个项目是完全可行的。以下是常见的几种部署方式,你可以根据项目类型(如 Web 应用、Node.js、Java、Python 等)和需求选择合适的方案。


✅ 一、部署方式概览

方式 说明 适用场景
1. 同端口不同路径(反向提速) 使用 Nginx 反向提速,根据路径分发请求 两个项目共享 80/443 端口
2. 不同端口直接访问 每个项目监听不同端口 简单项目,允许通过端口访问
3. 使用 Docker 隔离运行 每个项目一个容器,互不干扰 推荐,便于管理、扩展
4. 子域名 + Nginx 虚拟主机 不同域名或子域名指向不同项目 多站点、正式生产环境

✅ 二、具体部署方案示例

方案 1:Nginx 反向提速(推荐)

假设你有两个项目:

  • 项目 A:运行在 localhost:3000(如 Vue 前端或 Node.js 服务)
  • 项目 B:运行在 localhost:5000(如 Python Flask 或另一个 Node 服务)
步骤:
  1. 启动两个项目并监听不同端口
# 项目 A
cd /home/project-a
npm start  # 监听 3000 端口

# 项目 B
cd /home/project-b
python app.py  # 监听 5000 端口
  1. 安装 Nginx
sudo apt update
sudo apt install nginx -y
  1. 配置 Nginx 反向提速

编辑配置文件:

sudo nano /etc/nginx/sites-available/default

写入如下内容(根据需求修改):

server {
    listen 80;
    server_name your-domain.com;  # 或者你的公网 IP

    # 项目 A 路径:/app1
    location /app1/ {
        proxy_pass http://127.0.0.1:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 项目 B 路径:/app2
    location /app2/ {
        proxy_pass http://127.0.0.1:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 根路径可指向其中一个,或返回欢迎页
    location / {
        return 200 "Welcome to ECS Server with two apps!";
        add_header Content-Type text/plain;
    }
}
  1. 测试并重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
  1. 访问
  • 项目 A:http://your-ip/app1/
  • 项目 B:http://your-ip/app2/

⚠️ 注意:项目内部如果有前端路由(如 Vue Router 的 history 模式),需要额外配置。


方案 2:使用子域名(更优雅)

假设你有两个域名或子域名:

  • app1.yourdomain.com → 项目 A
  • app2.yourdomain.com → 项目 B

Nginx 配置两个 server 块:

server {
    listen 80;
    server_name app1.yourdomain.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 app2.yourdomain.com;

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

然后在域名解析中将两个子域名指向 ECS 公网 IP。


方案 3:Docker 部署(最推荐)

使用 Docker Compose 管理两个项目:

# docker-compose.yml
version: '3'
services:
  app1:
    image: your-app1-image
    ports:
      - "3000:3000"
    restart: unless-stopped

  app2:
    image: your-app2-image
    ports:
      - "5000:5000"
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app1
      - app2
    restart: unless-stopped

然后用 Nginx 做反向提速,结构更清晰、可维护性强。


✅ 三、注意事项

  1. 防火墙/安全组

    • 确保 ECS 安全组开放 80、443、22 等端口
    • 内部端口(如 3000、5000)无需对外暴露
  2. 进程守护

    • 使用 pm2(Node.js)、supervisor(Python)、systemd 守护进程,防止项目崩溃
  3. 日志管理

    • 将项目日志输出到文件,便于排查问题
  4. HTTPS

    • 使用 Let’s Encrypt + Certbot 为域名添加 HTTPS

✅ 四、总结

需求 推荐方案
快速测试 不同端口直接访问
同域名多项目 Nginx 路径提速
多域名网站点 Nginx 子域名虚拟主机
长期维护、生产环境 Docker + Nginx

如果你提供两个项目的类型(如:Vue + Spring Boot、Django + React 等),我可以给出更具体的部署脚本和配置。

需要我帮你写一个完整的部署示例吗?