模块化项目模板工具

一个用于快速生成模块化、多协议后端系统的Cookiecutter模板,支持gRPC、REST、MQTT等多种协议,适用于云原生和边缘计算场景。

  • by pyfunc
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 pyfunc/cookiecutter

使用说明

Cookiecutter模块化项目模板

快速入门:

  1. 安装炊具切割器:
    pip install cookiecutter
    
  2. 生成您的项目:
    cookiecutter gh:pyfunc/cookiecutter
    
  3. 回答提示以选择名称、协议、服务等。
  4. 输入生成的目录并按照以下说明进行操作。

导航: 使用菜单可快速访问任何部分。


菜单


马上就来: 下一个版本将引入标准化的模块,让您只需几步即可将新的服务和协议(例如GraphQL、AMQP)添加到Cookiecutter项目中——无论是在生成时还是以后作为即插即用模块。


解决方案概述

此模板使您能够构建模块化、多协议、生产就绪的后端系统。每个服务或协议都存在于自己的目录中,具有独立的配置、依赖关系和Dockerfile。您可以快速原型化、扩展和扩展您的系统,以用于边缘、云、物联网和AI/LLM驱动的应用程序。


需求

  • Python 3.8+
  • pipx(推荐)
  • 诗歌(推荐)

项目结构

.
├── core
│   ├── config_manager.py
│   ├── ...
├── grpc
│   ├── server.py
│   ├── client.py
│   ├── Dockerfile
│   └── ...
├── rest
│   ├── server.py
│   ├── client.py
│   ├── Dockerfile
│   └── ...
├── mqtt
│   ├── server.py
│   ├── client.py
│   ├── Dockerfile
│   └── ...
├── process
│   ├── plugin_system.py
│   └── plugins
│       └── my_plugin.py
└── ...

如何使用模块


工具安装

pipx

Linux/macOS:

python3 -m pip install --user pipx
python3 -m pipx ensurepath

Ubuntu:

sudo apt update
sudo apt install pipx
pipx ensurepath

macOS:

brew install pipx
pipx ensurepath

窗户:

py -m pip install --user pipx
.\pipx.exe ensurepath

诗歌

Linux/macOS:

curl -sSL https://install.python-poetry.org | python3 -

窗户:

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

检查安装:

poetry --version

工程安装

  1. 克隆存储库或使用cookiecutter生成项目:
    pip install cookiecutter
    cookiecutter gh:pyfunc/cookiecutter
    
  2. 输入项目目录。
  3. 安装依赖项:
    poetry install
    

生成您的项目

cookiecutter gh:pyfunc/cookiecutter

系统将提示您选择项目名称、描述、作者、协议(gRPC、REST、MQTT等)和其他选项。示例提示:

[1/25] project_name ( Project): tts
[2/25] project_slug (tts):
[3/25] project_description (A modular text-to-speech system with MCP integration):
...
[6/25] Select license
  1 - MIT
  2 - Apache-2.0
  3 - GPL-3.0
  4 - BSD-3-Clause
  Choose from [1/2/3/4] (1):
...

安装Poetry(依赖管理器)

Linux/macOS

curl -sSL https://install.python-poetry.org | python3 -

Windows(PowerShell)

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

检查安装:

poetry --version

3.安装依赖项

poetry install

4.激活环境

poetry shell

5.运行服务

每个协议/服务(gRPC、REST、MQTT等)都可以独立运行。例如:

poetry run python grpc/server.py
poetry run python rest/server.py

或者使用Makefile/Docker-Compose(如果可用):

make up

6.添加或扩展模块

  • 要添加新的协议/服务。, graphql/),添加您的 server.py, client.py,以及 Dockerfile.
  • 在中注册新插件 process/plugins/.
  • 使用环境变量进行配置。

示例:添加自定义插件

# process/plugins/my_text_plugin.py
from process.process_base import ProcessBase
from process.plugin_system import register_plugin

class MyTextPlugin(ProcessBase):
    def process_text(self, text, **kwargs):
        return self.create_result(
            data=text[::-1],
            format='text',
            metadata={'plugin': 'my_text_plugin'}
        )

register_plugin('my_text_plugin', MyTextPlugin)

工具安装

见上文诗歌。对于pipx:

python3 -m pip install --user pipx
python3 -m pipx ensurepath

工程安装

请参阅上面的步骤(诗歌、依赖关系、环境激活)。


运行项目

请参阅上面的“如何使用模块”以运行单个服务或一次运行所有服务。


插件开发

见上面的例子。将您的插件放入 process/plugins/,继承自 ProcessBase,并注册它。


环境配置

复制 .env.example 向 .env 在主目录中或根据需要为每个模块。为每个组件使用环境变量前缀: CORE_*, PROCESS_*, GRPC_*等等。


测试

对所有模块运行测试:

make test

或者对于特定模块:

cd process
poetry run pytest

解决方案概述

该项目为构建多服务、多协议应用程序提供了一个高度模块化、可扩展和生产就绪的模板。其架构旨在支持各种后端服务的快速开发、轻松集成和可扩展部署,每个后端服务都封装在自己的模块和容器中。

这个解决方案是为了什么?

  • 快速原型制作: 使用代码质量、测试和部署的最佳实践快速构建新项目。
  • 多协议支持: 对gRPC、REST、MQTT、WebRTC、WebSocket、IMAP、FTP等的开箱即用支持。
  • 关注点分离: 每个服务(例如,API、消息传递、处理)都位于自己的目录中,具有自己的依赖项、配置和Dockerfile。
  • 边缘、云和物联网: 适用于分布式、云原生和边缘计算场景。
  • AI/LLM集成: 已准备好进行模型上下文协议(MCP)、LangChain和其他AI/LLM集成。

未来的可能性和可扩展性

该架构旨在满足您的需求:

  • 轻松添加新协议: 创建新目录(例如。, graphql, coap, amqp),添加一个Dockerfile和服务代码,并与堆栈的其余部分集成。
  • Polyglot服务: 用不同的语言(Python、Go、Node.js等)实现服务——每种语言都有自己的技术栈和依赖关系。
  • 即插即用模块: 在不影响系统其他部分的情况下交换、升级或删除服务。
  • 自定义插件: 使用您自己的动态注册插件扩展核心处理引擎。
  • AI/LLM扩展: 将新的AI模型、NLP管道或ML推理端点作为独立模块集成。
  • 可扩展部署: 每个服务都可以使用Docker Compose、Kubernetes或无服务器平台独立扩展。

初始化您的存储库并运行:

cookiecutter gh:pyfunc/cookiecutter

结果

You've downloaded /home/tom/.cookiecutters/cookiecutter before. Is it okay to delete and re-download it? [y/n] (y): y
  [1/25] project_name ( Project): tts
  [2/25] project_slug (tts): 
  [3/25] project_description (A modular text-to-speech system with MCP integration): 
  [4/25] author_name (Tom Sapletta): 
  [5/25] author_email (info@softreck.dev): 
  [6/25] Select license
    1 - MIT
    2 - Apache-2.0
    3 - GPL-3.0
    4 - BSD-3-Clause
    Choose from [1/2/3/4] (1): 
  [7/25] Select python_version

示例:添加新服务

假设您要添加GraphQL API:

  1. 创建新目录:
    mkdir graphql
    cd graphql
    poetry init
    
  2. 添加依赖关系:
    poetry add strawberry-graphql fastapi uvicorn
    
  3. 创建服务文件:
    • server.py (GraphQL服务器)
    • client.py (可选客户端)
    • Dockerfile (集装箱化)
  4. 与其他模块集成:
    • 使用共享环境变量、连接到流程引擎或公开新端点。

示例:集成新协议

要添加对AMQP(RabbitMQ)的支持:

  • 创建一个 amqp/ 目录与 server.py, client.py和a Dockerfile.
  • 使用添加AMQP客户端/服务器逻辑 pika (Python)或 amqplib (Node.js)。
  • 在您的编排(Docker Compose、Kubernetes)中注册AMQP服务。

示例:用于文本处理的自定义插件

# process/plugins/my_text_plugin.py
from process.process_base import ProcessBase
from process.plugin_system import register_plugin

class MyTextPlugin(ProcessBase):
    def process_text(self, text, **kwargs):
        # Custom text transformation
        return self.create_result(
            data=text[::-1],  # Example: reverse text
            format='text',
            metadata={'plugin': 'my_text_plugin'}
        )

register_plugin('my_text_plugin', MyTextPlugin)

模块化架构的优点

  • 独立组件: 每个服务(gRPC、REST、MCP、MQTT、WebSocket等)都可以作为独立的存储库运行,也可以在同一个monorepo中运行。
  • 语言独立性: 服务可以用Python、Go、Node.js或任何语言实现。
  • 最小耦合: 每个模块只取决于它需要什么。
  • 标准化接口: 明确API合同和通信协议。
  • 共享工具: 通用实用程序可用,但不是必需的。

AI/LLM集成

  • MCP(模型上下文协议): 与LLM和AI工具集成的标准协议。
  • 郎链: 轻松添加LLM驱动的链和代理。
  • MQTT/WebSocket: 连接到实时系统、物联网设备或聊天机器人。

为什么是这种结构?

  • 单独的 Docker 文件 : 为每项服务量身定制环境。
  • 模块化: 独立开发、测试和部署服务。
  • 明确界限: 每个服务都有自己的目录、配置和生命周期。
  • 轻松生成代码: 一致的结构实现了自动代码生成和脚手架。

有关更多详细信息,请参阅 模块化架构 和 开发者指南.

完整项目结构

.  
├── core
│   ├── config_manager.py
│   ├── config.py
│   ├── error_handling.py
│   ├── __init__.py
│   ├── logging.py
│   ├── monitoring.py
│   ├── README.md
│   ├── scaffold.py
│   ├── test_config.py
│   └── utils.py
├── deploy
│   ├── ansible
│   ├── fabfile.py
│   ├── kubernetes
│   └── scripts
├── dev_setup.py
├── docker-compose.prod.yml
├── docker-compose.yml
├── ftp
│   ├── client.py
│   ├── __init__.py
│   ├── server.py
│   ├── test_ftp_client.py
│   └── test_ftp_server.py
├── grpc
│   ├── client.py
│   ├── Dockerfile
│   ├── __init__.py
│   ├── Makefile
│   ├── proto
│   ├── pyproject.toml
│   ├── server.py
│   └── test_grpc.py
├── hooks
│   ├── post_gen_project.py
│   └── pre_gen_project.py
├── imap
│   ├── client.py
│   ├── server.py
│   └── test_imap_client.py
├── langchain
├── Makefile
├── mcp
│   ├── Dockerfile
│   ├── __init__.py
│   ├── Makefile
│   ├── mcp_server.py
│   ├── process
│   ├── protocol
│   ├── pyproject.toml
│   ├── README.md
│   ├── resources
│   ├── sampling
│   ├── tests
│   ├── tools
│   └── transports
├── mqtt
│   ├── client.py
│   ├── __init__.py
│   ├── server.py
│   ├── test_mqtt_client.py
│   └── test_mqtt_server.py
├── process
│   ├── adapters
│   ├── Dockerfile
│   ├── __init__.py
│   ├── languages.py
│   ├── Makefile
│   ├── plugin_system.py
│   ├── process_base.py
│   ├── process_config.py
│   ├── process.py
│   ├── process.py.bak
│   ├── pyproject.toml
│   ├── README.md
│   └── test_process.py
├── pyproject.toml
├── quality
│   ├── bandit.yaml
│   ├── conftest.py
│   ├── doc_checker.py
│   ├── formatters.py
│   ├── hooks.py
│   ├── __init__.py
│   ├── linters.py
│   ├── Makefile
│   ├── pyproject.toml
│   ├── reporters.py
│   ├── security.py
│   ├── testers.py
│   └── tox.ini
├── README.md
├── rest
│   ├── client.py
│   ├── Dockerfile
│   ├── __init__.py
│   ├── Makefile
│   ├── models
│   ├── pyproject.toml
│   ├── server.py
│   └── test_rest.py
├── scripts
│   └── quality.sh
├── shell
│   ├── client.py
│   ├── __init__.py
│   ├── interactive.py
│   ├── main.py
│   ├── Makefile
│   └── pyproject.toml
├── tests
│   ├── conftest.py
│   ├── e2e_tests
│   ├── __init__.py
│   └── __pycache__
├── webrtc
│   ├── client.py
│   ├── Dockerfile
│   ├── __init__.py
│   ├── Makefile
│   ├── pyproject.toml
│   ├── session.py
│   ├── signaling.py
│   ├── static
│   ├── test_webrtc.py
│   └── test_websocket_client.py
└── websocket
    ├── client.py
    └── server.py

额外资源


关于Tom Sapletta

专业概况

作为一名DevOps工程师、软件开发人员和系统架构师,我拥有超过12年的经验,擅长通过创新的解决方案建立人与技术的联系。我的专业知识涵盖边缘计算、超模块化和自动化软件开发生命周期,专注于在复杂的技术要求和人类需求之间建立桥梁。

目前,作为Telemonit的创始人兼首席执行官,我正在开发Portigen——一种具有集成边缘计算功能的创新电源系统,即使在连接有限的环境中也能实现自然的人机交互。

专业领域

  • DevOps和云工程: Docker、Kubernetes、CI/CD管道、基础设施自动化
  • 软件开发: Java、Python、PHP、NodeJS、微服务架构
  • 边缘计算和物联网: 分布式系统、传感器网络、实时处理
  • 硬件软件集成: 嵌入式系统、电源管理解决方案
  • 研究: TextToSoftware、超模块化、基于模型的系统工程

著名项目

  • 移动 : 具有边缘计算、500Wh容量、超低延迟、模块化设计的创新电源,适用于物联网/边缘场景。
  • TextToSoftware生态系统: 将自然语言转换为功能应用程序的系统,连接人类交流和代码生成。
  • Python包: pifunc、mdirtree、markdown2code、dynapsys等的创建者,专注于自动化、模块化和DSL。

出版物和创意作品

  • 《残疾人控制系统》(Control System for People with Disabilities)
  • “带智能手机的六边形沙盒”——为儿童解释超模块化的绘本
  • 超模块化——软件模块化见解

上次专业经验

  • Telemonit, 法兰克福
    • 创始人兼首席执行官,硬件和软件开发人员(06.2024至今)
    • 领先开发和生产具有边缘计算的Portigen能源供应站
  • 法兰克福Link11有限公司
    • DevOps工程师CDN/DNS(07.2023–01.2024)
    • 优化了CDN/DNS服务,以提高安全性和性能
  • IT-NRW(SEVEN PRINCILES AG),杜塞尔多夫
    • Java开发人员和DevOps(2020年9月-2013年4月)
    • 开发公共服务应用集成平台

研究方向

  • TextToSoftware:从自然语言自动生成代码
  • 软件体系结构中的超模块化
  • 边缘计算和分布式系统
  • 基于模型的系统工程(MBSE)
  • 软件开发方法
  • 数字孪生技术

合作机会

我欢迎在边缘计算、超模块化、文本到软件技术和开源硬件/软件开发方面的合作。对将学术研究与实际行业应用和技术教育举措联系起来的项目特别感兴趣。

联系方式

专业领域

超模块化、ModDevOps、边缘计算、MBSE、文本到软件、Python、DSL、自动化、DevOps、数字孪生

研究领域

  • TextToSoftware:从自然语言自动生成代码
  • 软件体系结构与开发中的超模块化
  • 边缘计算和分布式系统
  • 基于模型的系统和软件工程(MBSE和ModDevOps)
  • 基于组件的软件开发(CBSD)
  • 数字孪生技术
  • 开源开发方法
  • 硬件软件集成

开源项目

提供的服务

  • 基础设施发展: DevOps、云工程师、解决方案架构师
  • 软件开发: Python、Java、Kotlin、Scala、JavaScript、TypeScript、Node.js、PHP
  • 硬件开发: 网络、物联网、移动服务器
  • SaaS服务:
    • Automatyzer.com(自动化)
    • OneDayRun.com(一天SaaS服务)