在单台服务器上隔离多个小程序的服务环境,是保障安全、避免服务冲突和提升可维护性的关键。以下是几种常用且有效的隔离方案:
一、使用容器化技术(推荐)
Docker + Docker Compose / Kubernetes(轻量级可用 K3s)
优势:
- 资源隔离好
- 环境独立,互不干扰
- 易于部署、扩展和迁移
实现方式:
- 为每个小程序创建独立的 Docker 容器。
- 每个容器包含其运行所需的服务(如 Node.js、Python、Nginx、数据库连接等)。
- 使用
docker-compose.yml或 Kubernetes 配置文件管理多个服务。
# 示例:docker-compose.yml
version: '3'
services:
miniapp-a:
image: myorg/miniapp-a:latest
ports:
- "8081:80"
environment:
- NODE_ENV=production
networks:
- app-network
miniapp-b:
image: myorg/miniapp-b:latest
ports:
- "8082:80"
environment:
- NODE_ENV=production
networks:
- app-network
networks:
app-network:
driver: bridge
注意:暴露不同端口或通过反向X_X统一入口。
二、使用反向X_X(Nginx)进行路由隔离
即使多个服务运行在同一台服务器,也可以通过 Nginx 根据域名或路径转发请求。
示例配置(基于子域名):
server {
listen 80;
server_name app1.example.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name app2.example.com;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
小程序中配置 request 域名时分别指向
app1.example.com和app2.example.com。
三、使用命名空间或虚拟环境隔离(适用于语言级)
Python 项目:使用 virtualenv
python -m venv miniapp_a_env
source miniapp_a_env/bin/activate
pip install -r requirements.txt
Node.js 项目:使用独立 node_modules 和 pm2 进程管理
# 每个项目独立安装依赖
cd /path/to/miniapp-a && npm install
cd /path/to/miniapp-b && npm install
# 使用 PM2 启动并命名进程
pm2 start app.js --name "miniapp-a"
pm2 start app.js --name "miniapp-b"
四、资源与权限隔离
1. 用户隔离
为每个小程序创建独立系统用户,限制文件访问权限:
useradd -m miniapp_a
chown -R miniapp_a:miniapp_a /var/www/miniapp_a
2. 资源限制(cgroups / systemd)
使用 systemd 限制 CPU、内存使用:
# /etc/systemd/system/miniapp-a.service
[Service]
User=miniapp_a
MemoryLimit=512M
CPUQuota=50%
ExecStart=/usr/bin/node app.js
五、数据库隔离策略
- 方案1:每个小程序使用独立数据库
如 MySQL 中创建不同的 database,或 MongoDB 中使用不同 collection/db。 - 方案2:使用不同账号权限控制访问
CREATE USER 'app_a_user'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT,INSERT,UPDATE ON app_a_db.* TO 'app_a_user'@'localhost';
六、日志隔离
- 每个小程序写入独立日志文件:
/var/log/miniapp-a/access.log /var/log/miniapp-b/access.log - 使用
journalctl或 ELK 收集分析。
七、安全建议
- 防火墙规则:只开放必要的端口(如 80、443),内部服务绑定 127.0.0.1。
- HTTPS 加密:使用 Let’s Encrypt 为每个域名配置 SSL。
- 定期更新依赖:防止漏洞传播。
- 监控与告警:使用 Prometheus + Grafana 监控各服务状态。
总结:推荐架构组合
| 技术 | 用途 |
|---|---|
| Docker | 服务环境隔离 |
| Nginx | 反向X_X + 域名路由 |
| Let’s Encrypt | HTTPS 支持 |
| PM2 / systemd | 进程管理 |
| 独立数据库 + 账号 | 数据隔离 |
| 独立日志目录 | 故障排查 |
✅ 最佳实践:
👉 “一个小程序 = 一个 Docker 容器 + 独立域名 + 独立数据存储”
这样即使某个小程序被攻击或崩溃,也不会影响其他服务。
如有更高要求,可进一步引入 Kubernetes 实现自动伸缩与高可用。
云小栈