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

BaaS Functions Service

Node.js 运行时服务 - 为 BaaS Functions 和 Realtime 模块提供运行环境。

🎯 概述

baas-functions-service 是一个独立的 Node.js 服务,提供:

  • HTTP 函数执行(端口 3001)
  • WebSocket 实时通信(端口 4000)
  • 与 Drupal 后端的集成
  • PostgreSQL 和 Redis 连接

📦 服务信息

  • 容器名: baas-functions-service
  • 位置: docker/nodejs-services/baas-functions/
  • 技术栈: Node.js + Express + Socket.IO
  • 依赖: PostgreSQL, Redis

🔌 端口配置

端口协议用途
3001HTTPFunctions API 端点
4000WebSocketRealtime 实时通信

⚙️ 环境变量

基础配置

NODE_ENV: development # 运行环境 PORT: 3001 # HTTP 端口 LOG_LEVEL: info # 日志级别 REALTIME_PORT: 4000 # WebSocket 端口 ENABLE_REALTIME: true # 启用实时功能

数据库连接

DATABASE_URL: postgresql://postgres:password@172.20.1.10:5432/drubase REDIS_URL: redis://172.20.1.20:6379

Drupal 集成

DRUPAL_API_URL: http://local.drubase.com ALLOWED_ORIGINS: http://localhost,http://127.0.0.1 API_KEY_HEADER: X-API-Key JWT_SECRET: baas_functions_jwt_secret_change_in_production

函数限制

DEFAULT_TIMEOUT: 30000 # 默认超时(毫秒) MAX_TIMEOUT: 300000 # 最大超时(毫秒) DEFAULT_MEMORY_LIMIT: 128 # 默认内存限制(MB) MAX_MEMORY_LIMIT: 512 # 最大内存限制(MB)

🏗️ 服务架构

Docker Compose 配置

baas-functions: container_name: baas-functions-service ports: - "3001:3001" # HTTP Functions - "4000:4000" # WebSocket Realtime networks: baas_network: ipv4_address: 172.20.1.40 depends_on: - pg17 # PostgreSQL - redis # Redis deploy: resources: limits: memory: 512M cpus: "0.5"

目录结构

nodejs-services/baas-functions/ ├── server.js # 主入口文件 ├── src/ │ ├── functions/ # Functions 处理器 │ ├── realtime/ # WebSocket 处理器 │ └── middleware/ # 中间件 ├── logs/ # 日志目录 ├── package.json # 依赖配置 └── Dockerfile # 镜像构建

🚀 使用方式

启动服务

cd drubase-one/docker docker compose up -d baas-functions

查看日志

# 实时日志 docker compose logs -f baas-functions-service # 日志文件 tail -f docker/nodejs-services/baas-functions/logs/app.log

健康检查

# HTTP 端点 curl http://localhost:3001/health # WebSocket 连接测试 wscat -c ws://localhost:4000

📡 API 端点

Functions API

POST /functions/execute

执行自定义函数

curl -X POST http://localhost:3001/functions/execute \ -H "Content-Type: application/json" \ -d '{ "function_name": "my_function", "params": { "user_id": 123 } }'

Health Check

GET /health

服务健康状态

{ "status": "healthy", "services": { "http": "up", "websocket": "up", "database": "connected", "redis": "connected" } }

🔄 WebSocket 通信

连接建立

const ws = new WebSocket('ws://localhost:4000'); ws.onopen = () => { console.log('WebSocket 连接已建立'); };

订阅频道

ws.send(JSON.stringify({ action: 'subscribe', channel: 'project_updates', project_id: 'tenant_7375b0cd_project_6888d012be80c' }));

接收消息

ws.onmessage = (event) => { const data = JSON.parse(event.data); console.log('收到消息:', data); };

🔧 开发模式

热重载

服务在开发模式下支持热重载:

volumes: - ./nodejs-services/baas-functions/src:/app/src - ./nodejs-services/baas-functions/server.js:/app/server.js

修改代码后自动重启。

调试

# 设置调试级别 docker compose restart baas-functions-service docker compose exec baas-functions-service npm run debug

📊 监控和日志

日志配置

logging: driver: "json-file" options: max-size: "10m" # 单个日志文件最大 10MB max-file: "3" # 保留 3 个日志文件

资源限制

deploy: resources: limits: memory: 512M # 最大内存 512MB cpus: "0.5" # 最大 CPU 50%

🔗 相关文档

Last updated on