Skip to Content
🚀 Drubase One v1.1 - 基于 Drupal 11 的多租户后端即服务平台

部署指南

本指南将帮助您部署 Groups 应用到生产环境。

📋 前置要求

服务器要求

最低配置:

  • CPU: 2 核
  • 内存: 4 GB RAM
  • 磁盘: 20 GB SSD
  • 操作系统: Ubuntu 20.04+ / Debian 11+ / CentOS 8+

推荐配置:

  • CPU: 4 核或更多
  • 内存: 8 GB RAM 或更多
  • 磁盘: 50 GB SSD
  • 操作系统: Ubuntu 22.04 LTS

软件要求

Groups 依赖 Drubase One BaaS 平台,需要先部署 Drubase One:

  • Docker Engine 20.10+
  • Docker Compose v2+
  • 域名和 SSL 证书 (生产环境推荐)

🚀 部署步骤

步骤 1: 部署 Drubase One 后端

参考 Drubase One 安装文档完成后端部署。

# 克隆 Drubase One git clone https://github.com/cloudiowoo/drubase-one.git cd drubase-one # 启动服务 cd docker docker compose up -d # 访问安装向导完成安装 # http://YOUR_HOST

步骤 2: 导入 Groups 演示数据

Drubase One 安装时,如果启用了 baas_platform_demo_data 模块,Groups 演示数据会自动导入。

手动导入演示数据:

docker exec -it php8-4-fpm sh cd /var/www/html # 启用演示数据模块 vendor/bin/drush en baas_platform_demo_data -y # 清除缓存 vendor/bin/drush cr

验证数据导入:

# 检查租户 docker exec pg17 psql -U postgres -d drubase -c " SELECT tenant_id, name FROM baas_tenant_config; " # 检查项目 docker exec pg17 psql -U postgres -d drubase -c " SELECT project_id, name FROM baas_project_config; " # 检查实体表 docker exec pg17 psql -U postgres -d drubase -c " SELECT COUNT(*) FROM baas_856064_users; "

步骤 3: 部署 Groups 前端应用

Groups 应用已集成在 Drubase One 中,执行 docker compose up -d 会自动启动。

访问地址:

  • Groups 应用: http://YOUR_HOST:3000
  • 后端 API: http://YOUR_HOST/api
  • Functions 服务: http://YOUR_HOST:3001 (HTTP) / ws://YOUR_HOST:4000 (WebSocket)

服务端口说明:

服务容器名端口映射说明
Groups 应用react-native-apps3000:80前端应用
Nginxnginx80:80Web 服务器 + API 网关
Functionsbaas-functions-service3001:3001, 4000:4000HTTP 函数 + WebSocket 实时服务
PostgreSQLpg175430:5432数据库
Redisredis6379:6379缓存

配置运行时参数:

Groups 运行时配置文件已通过 Volume 挂载,可直接修改:

# 编辑配置文件 vim drubase-one/apps/groups/config/runtime-config.js # 重启 Groups 容器 cd drubase-one/docker docker compose restart react-native-apps

配置文件示例 (apps/groups/config/runtime-config.js):

window.__RUNTIME_CONFIG__ = { BAAS_BASE_URL: 'http://YOUR_HOST', BAAS_TENANT_ID: '7375b0cd', BAAS_PROJECT_ID: '7375b0cd_6888d012be80c', BAAS_API_KEY: 'YOUR_BAAS_API_KEY', // 从后台 API Settings 获取 BAAS_SERVICE_TOKEN: 'YOUR_JWT_TOKEN', // 用户登录后的 JWT Token ENDPOINTS: { API: '/api/v1', FUNCTIONS: 'http://YOUR_HOST:3001', REALTIME: 'ws://YOUR_HOST:4000', FILES: '/files' }, APP_ENV: 'production', DEBUG_MODE: false, APP_VERSION: '1.0.0' };

获取密钥:

📹 视频演示:在 Drubase 后台获取 API Key 和 Service Token

  1. API Key: 登录后台 → Configuration → BaaS → API Settings → API Keys → 生成

    • 格式: drubase_ 开头的长字符串
    • 用途: 客户端请求签名
  2. Service Token: 通过登录 API 获取 JWT Token

    curl -X POST http://YOUR_HOST/api/user/login \ -H "Content-Type: application/json" \ -d '{"name": "user1", "pass": "password"}'
    • 格式: JWT 格式 (eyJ… 开头)
    • 用途: 用户身份认证
    • 有效期: 1 小时

将密钥填入配置文件:

获取密钥后,需要将它们填入 runtime-config.js 配置文件中。

步骤 1: 找到配置文件

找到 runtime-config.js 配置文件

配置文件位置: drubase-one/apps/groups/config/runtime-config.js

步骤 2: 填入密钥参数

修改 runtime-config.js 中的配置参数

将获取的密钥填入对应字段:

  • BAAS_API_KEY: 填入从后台生成的 API Key
  • BAAS_SERVICE_TOKEN: 填入登录后获取的 JWT Token

💡 提示:

  • 配置文件通过 Volume 挂载,修改后刷新浏览器即可生效
  • Service Token 会过期(1小时),建议应用实现自动刷新机制
  • 生产环境请使用 HTTPS (https://wss://)

步骤 3.1: 验证部署

# 检查所有容器状态 cd drubase-one/docker docker compose ps # 访问 Groups 应用 # 浏览器打开: http://YOUR_HOST:3000 # 查看 Groups 应用日志 docker compose logs -f react-native-apps

步骤 4: 配置 SSL (生产环境)

# 安装 Certbot sudo apt install certbot python3-certbot-nginx # 获取 SSL 证书 sudo certbot --nginx -d groups.example.com # 自动续期 sudo certbot renew --dry-run

步骤 5: 配置域名

在 DNS 服务商添加 A 记录:

Type: A Name: groups (或 @) Value: YOUR_SERVER_IP TTL: 3600

🔧 配置优化

数据库优化

-- 创建索引优化查询性能 CREATE INDEX idx_activities_status ON baas_856064_activities(status); CREATE INDEX idx_activities_start_time ON baas_856064_activities(start_time); CREATE INDEX idx_user_activities_user ON baas_856064_user_activities(user_id); CREATE INDEX idx_user_activities_activity ON baas_856064_user_activities(activity_id);

Redis 缓存配置

编辑 docker/.env:

# Redis 配置 REDIS_PASSWORD=YOUR_REDIS_PASSWORD REDIS_MAX_MEMORY=1gb REDIS_MAX_MEMORY_POLICY=allkeys-lru

PHP-FPM 优化

编辑 docker/fpm/www.conf:

pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500

📊 监控和日志

日志收集

# 查看应用日志 docker compose logs -f php8-4-fpm docker compose logs -f node-functions # 查看 Nginx 日志 docker compose logs -f nginx # 查看数据库日志 docker compose logs -f pg17

性能监控

使用 Prometheus + Grafana:

# docker-compose.monitoring.yml version: '3.8' services: prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana:latest ports: - "3001:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin

🔒 安全配置

防火墙设置

# 允许 HTTP/HTTPS sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 允许 SSH sudo ufw allow 22/tcp # 启用防火墙 sudo ufw enable

速率限制

编辑 Nginx 配置:

# 限制请求频率 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; location /api { limit_req zone=api burst=20 nodelay; proxy_pass http://localhost:80; }

备份策略

数据库备份脚本:

#!/bin/bash # backup-database.sh DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR=/backups/database BACKUP_FILE="drubase_$DATE.sql" # 创建备份 docker exec pg17 pg_dump -U postgres drubase > $BACKUP_DIR/$BACKUP_FILE # 压缩备份 gzip $BACKUP_DIR/$BACKUP_FILE # 删除 7 天前的备份 find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete echo "Backup completed: $BACKUP_FILE.gz"

设置定时任务:

# 编辑 crontab crontab -e # 每天凌晨 2 点执行备份 0 2 * * * /path/to/backup-database.sh

🔄 更新和维护

更新后端

# 进入 Drubase One 目录 cd drubase-one # 拉取最新代码 git pull origin main # 重启服务 cd docker docker compose down docker compose pull docker compose up -d # 更新数据库 docker exec php8-4-fpm sh -c "cd /var/www/html && vendor/bin/drush updb -y" # 清除缓存 docker exec php8-4-fpm sh -c "cd /var/www/html && vendor/bin/drush cr"

更新前端

# 进入 Groups 前端目录 cd groups-frontend # 拉取最新代码 git pull origin main # 重新构建 docker build -t groups-frontend:latest . # 停止旧容器 docker stop groups-frontend docker rm groups-frontend # 启动新容器 docker run -d \ --name groups-frontend \ -p 3000:3000 \ --env-file .env \ --restart unless-stopped \ groups-frontend:latest

🚨 故障排查

问题 1: API 无法连接

症状: 前端无法访问后端 API

检查步骤:

# 1. 检查服务状态 docker compose ps # 2. 检查端口监听 netstat -tlnp | grep 80 # 3. 测试 API 连接 curl http://YOUR_HOST/api/health # 4. 检查防火墙 sudo ufw status

问题 2: WebSocket 连接失败

症状: 实时功能不工作

检查步骤:

# 1. 检查 Node 服务 docker compose logs node-functions # 2. 检查端口 netstat -tlnp | grep 3001 # 3. 测试 WebSocket wscat -c ws://YOUR_HOST:3001

问题 3: 数据库连接错误

症状: 应用报数据库连接失败

检查步骤:

# 1. 检查数据库容器 docker compose ps pg17 # 2. 测试连接 docker exec pg17 psql -U postgres -d drubase -c "SELECT 1;" # 3. 检查连接配置 docker exec php8-4-fpm cat /var/www/html/web/sites/default/settings.php | grep database

📖 相关文档

Last updated on