Files
compose-anything/src/temporal/README.zh.md
Sun-ZhenXing 0f54723be1 feat: Add Temporal and Windmill services with configuration files
- Implemented Temporal service with Docker Compose, including PostgreSQL setup and environment variables for configuration.
- Added Temporal README and Chinese translation for documentation.
- Introduced Windmill service with Docker Compose, including PostgreSQL setup and environment variables for configuration.
- Added Windmill README and Chinese translation for documentation.
- Updated MongoDB configurations to use host.docker.internal for better compatibility.
2025-11-01 19:40:54 +08:00

5.6 KiB
Raw Blame History

Temporal

Temporal 是一个可扩展且可靠的持久化执行运行时,用于运行称为 Temporal 工作流执行的可重入流程。它使开发人员能够编写简单、有弹性的代码,而无需担心故障、重试或状态管理。

功能特点

  • 持久化执行:工作流可以在故障、重启甚至代码部署后继续运行
  • 内置可靠性:自动重试、超时和错误处理
  • 长期运行的工作流:支持运行数天、数月或数年的工作流
  • 多语言 SDK:官方支持 Go、Java、TypeScript、Python、PHP、.NET
  • 高级可见性:搜索和过滤工作流执行
  • 事件驱动:通过信号、查询和更新与工作流交互

快速开始

  1. 复制 .env.example.env

    copy .env.example .env
    
  2. (可选)编辑 .env 自定义数据库密码和设置

  3. 启动 Temporal

    docker compose up -d
    
  4. 等待服务就绪(使用 docker compose logs -f temporal 检查)

  5. 访问 Temporal Web UIhttp://localhost:8233

  6. Frontend 服务地址:localhost:7233gRPC

默认配置

服务 端口 说明
Temporal Frontend 7233 SDK 的 gRPC 端点
Temporal Web UI 8233 Web 界面
PostgreSQL 5432 数据库(内部)

身份验证:默认无身份验证。生产环境中请配置 mTLS 和授权。

环境变量

主要环境变量(完整列表请参阅 .env.example

变量 说明 默认值
TEMPORAL_VERSION Temporal 服务器版本 1.24.2
TEMPORAL_UI_VERSION Temporal UI 版本 2.28.0
TEMPORAL_FRONTEND_PORT_OVERRIDE Frontend gRPC 端口 7233
TEMPORAL_UI_PORT_OVERRIDE Web UI 端口 8233
POSTGRES_DB 数据库名称 temporal
POSTGRES_USER 数据库用户 temporal
POSTGRES_PASSWORD 数据库密码 temporal
TEMPORAL_LOG_LEVEL 日志级别 info
TZ 时区 UTC

资源需求

最低要求

  • CPU1 核心
  • 内存1GB
  • 磁盘5GB

推荐配置

  • CPU2+ 核心
  • 内存2GB+
  • 磁盘20GB+

数据卷

  • postgres_dataPostgreSQL 数据库数据
  • temporal_dataTemporal 配置和状态

使用 Temporal

安装 SDK

选择您的语言:

Go

go get go.temporal.io/sdk

TypeScript

npm install @temporalio/client @temporalio/worker

Python

pip install temporalio

编写工作流Python 示例)

from temporalio import workflow, activity
from datetime import timedelta

@activity.defn
async def say_hello(name: str) -> str:
    return f"Hello, {name}!"

@workflow.defn
class HelloWorkflow:
    @workflow.run
    async def run(self, name: str) -> str:
        return await workflow.execute_activity(
            say_hello,
            name,
            start_to_close_timeout=timedelta(seconds=10),
        )

运行 Worker

from temporalio.client import Client
from temporalio.worker import Worker

async def main():
    client = await Client.connect("localhost:7233")
    
    worker = Worker(
        client,
        task_queue="hello-queue",
        workflows=[HelloWorkflow],
        activities=[say_hello],
    )
    
    await worker.run()

执行工作流

from temporalio.client import Client

async def main():
    client = await Client.connect("localhost:7233")
    
    result = await client.execute_workflow(
        HelloWorkflow.run,
        "World",
        id="hello-workflow",
        task_queue="hello-queue",
    )
    
    print(result)

使用 tctl CLI

admin-tools 容器dev 配置文件)包含 tctl

docker compose --profile dev run temporal-admin-tools
tctl namespace list
tctl workflow list

配置文件

  • dev:包含用于 CLI 访问的 admin-tools 容器

启用 dev 配置文件:

docker compose --profile dev up -d

安全注意事项

  1. 身份验证:为生产部署配置 mTLS
  2. 授权:为命名空间和工作流设置授权规则
  3. 数据库密码:使用强 PostgreSQL 密码
  4. 网络安全:限制对 Temporal 端口的访问
  5. 加密:为敏感数据启用静态加密

升级

升级 Temporal

  1. .env 中更新版本

  2. 拉取并重启:

    docker compose pull
    docker compose up -d
    
  3. 检查日志查看迁移消息:

    docker compose logs -f temporal
    

故障排除

服务无法启动:

  • 检查日志:docker compose logs temporal
  • 验证数据库:docker compose ps postgres
  • 确保分配了足够的资源

SDK 无法连接:

  • 验证端口 7233 可访问
  • 检查防火墙规则
  • 确保 SDK 版本兼容性

Web UI 无法加载:

  • 检查 UI 日志:docker compose logs temporal-ui
  • 验证 frontend 健康:docker compose ps temporal
  • 清除浏览器缓存

参考资料

许可证

Temporal 使用 MIT 许可证。详情请参阅 LICENSE