阿里云一个ECS上如何部署多个应用?

在阿里云ECS(Elastic Compute Service)上部署多个应用是完全可行的,以下是几种常见且高效的部署方式,适用于不同规模和需求的场景:


✅ 一、部署方式概览

方法 适用场景 优点 缺点
1. 多端口运行 小型项目、测试环境 简单直接 端口管理复杂
2. Nginx 反向 多个Web应用共用80/443 统一入口、支持HTTPS 需配置Nginx
3. Docker 容器化 多应用隔离、便于管理 资源隔离、易于扩展 学习成本略高
4. 使用虚拟主机(基于域名) 多个网站共存 域名区分、用户无感知 需域名和DNS配置

✅ 二、具体部署方案

方案1:多个应用监听不同端口(最简单)

每个应用绑定不同端口,例如:

  • 应用A:http://your-ip:3000
  • 应用B:http://your-ip:8080
  • 应用C:http://your-ip:5000

步骤:

  1. 启动应用时指定不同端口:
    node app1.js --port 3000
    python app2.py --port 8080
    java -jar app3.jar --server.port=5000
  2. 在阿里云 安全组 中放行这些端口(如3000、8080、5000)。

✅ 适合开发或测试环境。


方案2:使用 Nginx 反向(推荐生产环境)

通过 Nginx 将不同域名或路径转发到本地不同端口的应用。

示例:

  • app1.yourdomain.com → 转发到 localhost:3000
  • app2.yourdomain.com → 转发到 localhost:8080

Nginx 配置示例:

# /etc/nginx/conf.d/app1.conf
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;
    }
}

# /etc/nginx/conf.d/app2.conf
server {
    listen 80;
    server_name app2.yourdomain.com;

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

操作步骤:

  1. 安装 Nginx:
    sudo yum install nginx -y  # CentOS
    # 或
    sudo apt install nginx -y  # Ubuntu
  2. 配置多个 server 块(如上)。
  3. 重启 Nginx:
    sudo systemctl restart nginx
  4. 在域名解析中将 app1.yourdomain.comapp2.yourdomain.com 指向ECS公网IP。
  5. 安全组放行 80(HTTP)443(HTTPS) 端口。

✅ 支持 HTTPS(可配合 Let’s Encrypt 免费证书)。


方案3:Docker + Docker Compose(推荐现代化部署)

使用 Docker 容器隔离多个应用,互不干扰。

目录结构示例:

/myapps
  ├── app1/
  │   ├── Dockerfile
  │   └── app.js
  ├── app2/
  │   ├── Dockerfile
  │   └── main.py
  └── docker-compose.yml

docker-compose.yml 示例:

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

  app2:
    build: ./app2
    ports:
      - "8080:8080"
    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 实现域名路由

方案4:使用 PM2 管理多个 Node.js 应用

如果你部署多个 Node.js 服务,可以使用 PM2 进程管理器:

npm install -g pm2

pm2 start app1.js --name "web-app"
pm2 start app2.js --name "api-service" -- --port 4000

pm2 save
pm2 startup  # 开机自启

PM2 会自动管理日志、崩溃重启等。


✅ 三、安全与优化建议

  1. 安全组设置

    • 只开放必要的端口(如 80、443、22)
    • 避免暴露应用端口(如3000、8080)给公网,用 Nginx
  2. 域名与SSL

    • 使用阿里云 云解析 DNS 配置域名
    • 使用 Let’s Encrypt 免费证书(通过 Certbot)实现 HTTPS
  3. 资源监控

    • 使用阿里云 云监控 查看 CPU、内存使用
    • 避免多个应用占用过多资源导致宕机
  4. 备份与快照

    • 定期为ECS创建 系统盘快照

✅ 总结

需求 推荐方案
快速测试多个应用 多端口直接访问
多个网站上线 Nginx 反向 + 域名
复杂应用、微服务 Docker + Docker Compose
Node.js 多项目 PM2 管理

如你能提供具体应用类型(如:Vue + Spring Boot + Django),我可以给出更详细的部署配置示例。欢迎继续提问!

未经允许不得转载:ECLOUD博客 » 阿里云一个ECS上如何部署多个应用?