在一台云主机上运行两个(或多个)应用或服务,可以通过以下几种常见方式实现:
一、基础解决方案
应用1运行在8080端口 python app1.py --port=8080 应用2运行在8081端口 python app2.py --port=8081
访问:http://your-server-ip:8080 和http://your-server-ip:8081
Nginx配置示例
server {
listen 80;
server_name app1.yourdomain.com;
location / {
proxy_pass http://localhost:8080;
}
}
server {
listen 80;
server_name app2.yourdomain.com;
location / {
proxy_pass http://localhost:8081;
}
}- Apache的VirtualHost
- Nginx的server块
- 不同域名或子域名指向同一服务器
二、容器化方案
version: '3'
services:
app1:
image: your-app1-image
ports:
- "8080:80"
restart: always
app2:
image: your-app2-image
ports:
- "8081:80"
restart: always运行:docker-compose up -d
创建网络 docker network create my-network 运行容器 docker run -d --name app1 --network my-network -p 8080:80 app1 docker run -d --name app2 --network my-network -p 8081:80 app2
三、进程管理方案
/etc/systemd/system/app1.service [Unit] Description=App1 Service After=network.target [Service] ExecStart=/usr/bin/python3 /path/to/app1.py Restart=always [Install] WantedBy=multi-user.target
2.使用 PM2(Node.js应用)
启动多个应用 pm2 start app1.js --name "app1" pm2 start app2.js --name "app2" pm2 save pm2 startup
[program:app1] command=python /path/to/app1.py autostart=true autorestart=true [program:app2] command=python /path/to/app2.py autostart=true autorestart=true
四、安全隔离方案
为不同应用创建不同用户 sudo useradd -m -s /bin/bash app1user sudo useradd -m -s /bin/bash app2user 以不同用户运行 sudo -u app1user python app1.py sudo -u app2user python app2.py
使用unshare创建隔离环境 sudo unshare --fork --pid --mount-proc python app1.py
五、实际部署示例
1. 安装必要软件 sudo apt update sudo apt install nginx 2. 配置应用 应用1:Flask应用在5000端口 应用2:Node.js应用在3000端口 3. Nginx配置 sudo nano /etc/nginx/sites-available/app1 sudo nano /etc/nginx/sites-available/app2 4. 创建软链接 sudo ln -s /etc/nginx/sites-available/app1 /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/app2 /etc/nginx/sites-enabled/ 5. 重启Nginx sudo systemctl restart nginx
六、最佳实践建议
1、资源分配:使用cgroups限制每个应用的CPU/内存使用
2、日志管理:为每个应用配置独立的日志文件
3、监控:分别监控每个应用的运行状态
4、备份:分别备份应用数据和配置
5、防火墙:正确配置云主机的安全组和防火墙规则
七、常见问题解决
端口冲突:确保每个应用使用不同端口
资源竞争:使用资源限制和控制组
依赖冲突:使用虚拟环境或容器隔离
启动顺序:使用systemd的依赖关系控制
根据你的具体需求,选择最适合的方案,对于生产环境,推荐使用容器化方案(Docker)配合反向代理,这样可以获得更好的隔离性和可维护性。
文章摘自:https://idc.huochengrm.cn/zj/21744.html
评论
柔紫
回复在一台云主机上运行多个应用,可以通过端口分离、反向代理、容器化、进程管理、安全隔离等多种方式实现,推荐使用容器化方案配合反向代理,以获得更好的隔离性和可维护性。
简逸云
回复在云主机上运行多个应用或服务,可以通过不同端口、反向代理、虚拟主机、容器化、进程管理、安全隔离等方式实现,推荐使用容器化方案配合反向代理,以获得更好的隔离性和可维护性。
无高飞
回复在一台云主机上运行多个应用或服务,可以通过端口分配、反向代理、容器化、进程管理、安全隔离等多种方式实现,根据实际需求选择合适的方案,如生产环境推荐使用Docker容器化配合反向代理。