在自己的服务器上部署多个项目是一个常见的需求,尤其是在你希望用一台服务器托管多个网站、应用或服务时。以下是一些常用的方案和步骤,帮助你在同一台服务器上安全高效地部署多个项目。
一、准备工作
1. 确保服务器环境
- 操作系统:推荐使用 Linux(如 Ubuntu、CentOS)
- 基础工具安装:
nginx或Apache(用于反向)Docker(可选,便于多项目隔离)PM2(Node.js 应用管理器)MySQL / PostgreSQL / MongoDB(数据库,根据需要)
2. 域名与端口规划
- 每个项目可以绑定一个子域名或不同端口。
- 示例:
web1.example.com→ 项目 Aweb2.example.com→ 项目 B- 或者都走 80/443,由 Nginx 路由到不同后端端口(如 3000, 5000)
二、部署方式选择
方案一:使用 Nginx 反向(推荐)
步骤如下:
1. 启动多个服务监听不同端口
例如:
- Node.js 项目A →
localhost:3000 - Python Flask 项目B →
localhost:5000
2. 配置 Nginx 虚拟主机(Virtual Host)
编辑配置文件 /etc/nginx/sites-available/project1.conf:
server {
listen 80;
server_name web1.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
创建另一个配置文件 /etc/nginx/sites-available/project2.conf:
server {
listen 80;
server_name web2.example.com;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启用站点并重启 Nginx:
ln -s /etc/nginx/sites-available/project1.conf /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/project2.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
方案二:使用 Docker 容器化部署
优点:
- 项目之间完全隔离
- 易于维护和扩展
- 支持多种语言/框架混合部署
示例目录结构:
docker-compose.yml
project1/
project2/
docker-compose.yml 示例:
version: '3'
services:
project1:
build: ./project1
ports:
- "3000:3000"
project2:
build: ./project2
ports:
- "5000:5000"
然后通过 Nginx 分发流量到不同的容器端口即可。
方案三:使用 PM2 部署多个 Node.js 项目
如果你运行的都是 Node.js 项目,可以使用 PM2 来管理多个进程。
pm2 start project1/index.js --name project1
pm2 start project2/app.js --name project2
每个项目监听不同端口,再配合 Nginx 进行路由。
三、补充建议
1. 使用 HTTPS(Let’s Encrypt)
- 安装 Certbot:
sudo apt install certbot python3-certbot-nginx certbot --nginx -d web1.example.com -d web2.example.com
2. 防火墙设置
确保只开放必要的端口(如 80、443),其余端口禁止外部访问。
3. 日志监控
- Nginx 访问日志:
/var/log/nginx/access.log - 项目日志:视具体项目而定,可集中记录到统一路径
4. 自动化部署(可选)
使用 GitHub Actions、Jenkins、Ansible 等工具实现自动化部署流程。
四、总结
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Nginx 反向 | 多个 Web 项目共存 | 简单易用,性能好 | 不适合复杂依赖 |
| Docker 容器化 | 多语言/复杂依赖项目 | 高度隔离,易于部署 | 学习成本略高 |
| PM2 管理 Node 项目 | 多个 Node.js 项目 | 快速启动,资源占用小 | 仅适用于 Node.js |
如果你告诉我你的具体项目类型(比如:Node.js、Python、Java、PHP 等)和服务器环境(Ubuntu?CentOS?云服务器?),我可以给出更具体的部署建议!
云计算HECS