阿里云服务器多项目共用时如何分配端口和资源?

在阿里云服务器上部署多个项目时,合理的端口和资源分配是关键。以下是一套完整的解决方案:

一、端口分配策略

1. 端口规划原则

  • 系统端口:0-1023(保留,避免使用)
  • 用户端口:1024-49151(推荐使用)
  • 动态端口:49152-65535(临时使用)

2. 推荐端口分配方案

前端项目:3000, 8080, 8888
后端API:8000, 8081, 9000
数据库:3306(MySQL), 5432(PostgreSQL), 6379(Redis)
管理界面:7000, 9001
特殊服务:9200(Elasticsearch), 5672(RabbitMQ)

3. 使用Nginx反向XX

# 多项目共用80/443端口
server {
    listen 80;
    server_name api.project1.com;
    location / {
        proxy_pass http://localhost:8000;
    }
}

server {
    listen 80;
    server_name admin.project2.com;
    location / {
        proxy_pass http://localhost:7000;
    }
}

二、资源分配方案

1. CPU和内存分配

# 使用Docker限制资源
docker run -d 
  --name project1 
  --cpus="1.0" 
  --memory="1g" 
  -p 8000:8000 
  your-image

# 使用systemd限制资源(非容器)
[Service]
CPUQuota=100%  # 限制CPU
MemoryLimit=1G  # 限制内存

2. 磁盘空间管理

/home/
├── project1/      # 项目1目录
│   ├── app/       # 应用代码
│   ├── logs/      # 日志文件
│   └── data/      # 项目数据
├── project2/      # 项目2目录
└── shared/        # 共享资源

三、部署架构建议

方案A:容器化部署(推荐)

# docker-compose.yml 示例
version: '3'
services:
  project1:
    image: project1:latest
    ports:
      - "8000:8000"
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

  project2:
    image: project2:latest
    ports:
      - "9000:9000"
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 1G

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"

方案B:传统进程管理

# 使用PM2管理Node.js应用
pm2 start app1.js --name "project1" --port 8000
pm2 start app2.js --name "project2" --port 9000

# 设置资源限制
pm2 startup
pm2 save

四、监控与优化

1. 资源监控

# 安装监控工具
sudo apt-get install htop iotop iftop

# 查看资源使用
htop              # CPU/内存
iotop             # 磁盘IO
iftop             # 网络流量

2. 日志管理

# 按项目分离日志
/var/log/
├── project1/
│   ├── access.log
│   └── error.log
├── project2/
└── nginx/

3. 自动化脚本示例

#!/bin/bash
# 项目部署脚本
deploy_project() {
    PROJECT_NAME=$1
    PORT=$2
    MEMORY_LIMIT=$3

    echo "部署项目: $PROJECT_NAME"
    echo "端口: $PORT"
    echo "内存限制: $MEMORY_LIMIT"

    # 具体部署逻辑
    docker run -d 
      --name $PROJECT_NAME 
      --memory=$MEMORY_LIMIT 
      -p $PORT:$PORT 
      -v /home/$PROJECT_NAME:/app 
      your-image
}

# 使用示例
deploy_project "project1" 8000 "512m"
deploy_project "project2" 9000 "1g"

五、安全建议

  1. 防火墙配置

    # 只开放必要端口
    sudo ufw allow 22/tcp    # SSH
    sudo ufw allow 80/tcp    # HTTP
    sudo ufw allow 443/tcp   # HTTPS
    sudo ufw enable
  2. 使用非root用户运行服务

    # 创建专用用户
    sudo useradd -m -s /bin/bash project1
    sudo chown -R project1:project1 /home/project1

六、最佳实践总结

  1. 端口管理:使用反向XX统一入口,内部服务使用不同端口
  2. 资源隔离:优先使用Docker容器进行资源限制
  3. 监控预警:设置资源使用阈值,及时报警
  4. 文档记录:维护端口和资源配置文档
  5. 备份策略:定期备份配置和数据

根据项目重要性和资源需求,可以灵活调整分配策略。对于生产环境,建议使用阿里云容器服务ACK或函数计算FC获得更好的隔离性和弹性伸缩能力。

云服务器