在一台云服务器上部署多个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
六、最佳实践建议
- 资源隔离:使用Docker或虚拟机实现环境隔离
- 监控管理:安装监控工具(如Prometheus + Grafana)
- 日志管理:集中管理日志文件
- 备份策略:定期备份项目数据和配置
- 安全加固:
- 配置防火墙(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方案。
CLOUD技术笔记