floci-io/floci-az
运维与部署在本地运行兼容 Azure 的存储、函数、消息和数据库服务,方便开发、测试与 CI。
项目介绍
Floci AZ 是一个在本地运行的 Azure 兼容模拟器,面向开发、测试和 CI 场景。现有的 Azure SDK 客户端、Azure CLI 或 Terraform 只需把端点指向 http://localhost:4577,即可继续使用原有连接串和工作流,不需要 Azure 账号、鉴权令牌或付费功能解锁 项目说明。
覆盖范围包括 Blob/Queue/Table 存储、Azure Functions、App Configuration、Key Vault、Event Hubs、Service Bus、Cosmos DB、SQL 与托管 PostgreSQL/MySQL/MariaDB、AKS、Container Apps、API Management、网络、ARM 资源管理、Entra ID 等 支持的服务。多数服务在进程内模拟;Azure Functions、Event Hubs 消息代理以及 Cosmos DB 的 MongoDB/PostgreSQL/Cassandra/Gremlin 引擎会启动真实 Docker 容器,以保证协议层的一致性 真实 Docker 集成。
它适合需要轻量、跨平台本地 Azure 环境的开发者和 CI 流水线,可作为 Azurite、Functions Core Tools 和仅限 Windows 的 Cosmos DB Emulator 的替代方案 方案对比。它是 Floci 模拟器家族中的 Azure 成员,与 AWS、GCP、OCI 版本并列。
快速使用
需要 Docker;使用 Compose 方式时还需要 Docker Compose。先创建 docker-compose.yml:
services:
floci-az:
image: floci/floci-az:latest
ports:
- "4577:4577"
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Azure Functions 需要
执行 docker compose up。也可以直接运行:
docker run -d --name floci-az \
-p 4577:4577 \
-v /var/run/docker.sock:/var/run/docker.sock \
floci/floci-az:latest
所有服务都在 http://localhost:4577 响应,任意账号名和密钥均可使用,因为 SharedKey 凭据不会被校验 快速开始。Web 控制台在首次访问时按需启动,地址为 本地 UI。
用 Python 做一次 Blob 冒烟测试:安装 azure-storage-blob 后使用文档给出的连接串:
from azure.storage.blob import BlobServiceClient
conn_str = (
"DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;"
"AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;"
"BlobEndpoint=http://localhost:4577/devstoreaccount1;"
)
client = BlobServiceClient.from_connection_string(conn_str)
client.create_container("my-container")
blob = client.get_container_client("my-container").get_blob_client("hello.txt")
blob.upload_blob(b"Hello from floci-az!")
print(blob.download_blob().readall())
运行后会创建容器、上传文件并打印存储内容 Python SDK 示例。
存储与持久化
通过 FLOCI_AZ_STORAGE_MODE 选择存储模式:memory(默认,容器停止即丢失)、persistent(启动时加载,优雅关闭时刷盘)、hybrid(每 5 秒异步刷盘)或 wal(每次写操作先落盘再响应)。每个服务可单独覆盖全局模式,例如 FLOCI_AZ_STORAGE_BLOB_MODE=wal 持久化与存储模式。
使用约束
多数服务默认走端口 4577 的纯 HTTP;未显式开启 TLS 时不要使用 DefaultEndpointsProtocol=https。要求 HTTPS 的 SDK(如 App Configuration、Key Vault)需要用 ForceHttp 传输策略把请求改回 HTTP。Cosmos DB Java SDK 强制 TLS,需设置 FLOCI_AZ_TLS_ENABLED=true 并使用 https://localhost:4577;自签名证书在运行时生成,可从 GET /_floci/tls-cert 获取 TLS 配置。
Functions 和容器化服务需要访问 Docker socket。默认 dev 模式下鉴权基本关闭,任何密钥都会通过。APIM 只是有意收窄的子集,不是完整网关;未支持的包括完整策略语言、JWT/OIDC 校验、修订版本和开发者门户行为等 APIM 范围。项目定位为开发/测试用途,不可用于生产级或高可用存储,许可证为 MIT。
HotRepo 点评
在 2026-11-03 的 GitHub Java 日榜快照中,Floci AZ 的最好名次为第 4,当天 Star 总数 829、新增 12。这只是单次快照,不足以判断持续趋势,但说明它当天在 Java 仓库中具有较高可见度。其差异点是覆盖广度:把存储、消息、Functions、数据库和管理面收拢到同一个端口,比同时部署 Azurite 和 Functions Core Tools 更适合作为 CI 的单一依赖;Linux 原生容器也避开了官方 Cosmos DB Emulator 的 Windows 容器路径。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。