在阿里云 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 服务)
步骤:
- 启动两个项目并监听不同端口
# 项目 A
cd /home/project-a
npm start # 监听 3000 端口
# 项目 B
cd /home/project-b
python app.py # 监听 5000 端口
- 安装 Nginx
sudo apt update
sudo apt install nginx -y
- 配置 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;
}
}
- 测试并重启 Nginx
sudo nginx -t
sudo systemctl restart nginx
- 访问
- 项目 A:
http://your-ip/app1/ - 项目 B:
http://your-ip/app2/
⚠️ 注意:项目内部如果有前端路由(如 Vue Router 的 history 模式),需要额外配置。
方案 2:使用子域名(更优雅)
假设你有两个域名或子域名:
app1.yourdomain.com→ 项目 Aapp2.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 做反向提速,结构更清晰、可维护性强。
✅ 三、注意事项
-
防火墙/安全组
- 确保 ECS 安全组开放 80、443、22 等端口
- 内部端口(如 3000、5000)无需对外暴露
-
进程守护
- 使用
pm2(Node.js)、supervisor(Python)、systemd守护进程,防止项目崩溃
- 使用
-
日志管理
- 将项目日志输出到文件,便于排查问题
-
HTTPS
- 使用 Let’s Encrypt + Certbot 为域名添加 HTTPS
✅ 四、总结
| 需求 | 推荐方案 |
|---|---|
| 快速测试 | 不同端口直接访问 |
| 同域名多项目 | Nginx 路径提速 |
| 多域名网站点 | Nginx 子域名虚拟主机 |
| 长期维护、生产环境 | Docker + Nginx |
如果你提供两个项目的类型(如:Vue + Spring Boot、Django + React 等),我可以给出更具体的部署脚本和配置。
需要我帮你写一个完整的部署示例吗?
CLOUD云知道