如何在一台云服务器上部署多个Web项目?

在一台云服务器上部署多个Web项目有多种方案,以下是常见的几种方法及其详细步骤:

一、基于域名的虚拟主机(推荐)

1. 使用Nginx反向XX

# 项目1:www.project1.com
server {
    listen 80;
    server_name www.project1.com project1.com;

    location / {
        proxy_pass http://localhost:3000;  # 项目1的端口
        proxy_set_header Host $host;
    }
}

# 项目2:www.project2.com
server {
    listen 80;
    server_name www.project2.com project2.com;

    location / {
        proxy_pass http://localhost:3001;  # 项目2的端口
        proxy_set_header Host $host;
    }
}

2. 使用Apache虚拟主机

<VirtualHost *:80>
    ServerName www.project1.com
    DocumentRoot /var/www/project1
    <Directory /var/www/project1>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName www.project2.com
    DocumentRoot /var/www/project2
    <Directory /var/www/project2>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

二、基于路径的反向XX

server {
    listen 80;
    server_name your-domain.com;

    # 项目1通过路径访问
    location /project1/ {
        proxy_pass http://localhost:3000/;
        proxy_set_header Host $host;
    }

    # 项目2通过路径访问
    location /project2/ {
        proxy_pass http://localhost:3001/;
        proxy_set_header Host $host;
    }
}

三、使用Docker容器化部署

1. 创建Docker Compose文件

version: '3'
services:
  project1:
    image: your-project1-image
    ports:
      - "3000:3000"
    networks:
      - webnet

  project2:
    image: your-project2-image
    ports:
      - "3001:3001"
    networks:
      - webnet

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    networks:
      - webnet

networks:
  webnet:

2. 配置Nginx反向XX

upstream project1 {
    server project1:3000;
}

upstream project2 {
    server project2:3001;
}

server {
    listen 80;
    server_name project1.com;
    location / {
        proxy_pass http://project1;
    }
}

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

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

# 安装PM2
npm install -g pm2

# 启动多个项目
pm2 start /path/to/project1/app.js --name "project1"
pm2 start /path/to/project2/app.js --name "project2"

# 设置开机自启
pm2 startup
pm2 save

五、详细部署步骤

步骤1:环境准备

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装必要软件
sudo apt install nginx -y
sudo apt install nodejs npm -y  # 如果是Node项目
sudo apt install python3-pip -y  # 如果是Python项目

步骤2:项目部署

# 创建项目目录
sudo mkdir -p /var/www/project1
sudo mkdir -p /var/www/project2

# 设置权限
sudo chown -R $USER:$USER /var/www/project1
sudo chown -R $USER:$USER /var/www/project2

步骤3:配置服务

# 创建系统服务(以Node.js为例)
sudo nano /etc/systemd/system/project1.service

# 内容示例:
[Unit]
Description=Project1 Service
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/project1
ExecStart=/usr/bin/node app.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

步骤4:配置SSL证书(可选)

# 使用Certbot获取免费SSL证书
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d project1.com -d www.project1.com

六、最佳实践建议

  1. 资源隔离:使用Docker或虚拟机实现环境隔离
  2. 监控管理:安装监控工具(如Prometheus + Grafana)
  3. 日志管理:集中管理日志文件
  4. 备份策略:定期备份项目数据和配置
  5. 安全加固
    • 配置防火墙(UFW)
    • 定期更新系统
    • 使用非root用户运行服务
    • 配置SSL证书

七、故障排查命令

# 检查Nginx配置
sudo nginx -t

# 重启服务
sudo systemctl restart nginx

# 查看服务状态
sudo systemctl status project1

# 查看日志
sudo journalctl -u project1 -f
sudo tail -f /var/log/nginx/error.log

选择哪种方案取决于:

  • 项目技术栈
  • 团队熟悉程度
  • 资源限制
  • 维护复杂度

对于初学者,推荐使用Nginx虚拟主机方案;对于需要环境隔离的项目,推荐使用Docker方案。

云服务器