cancan-microstack 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cancan_microstack-0.0.1/LICENSE +21 -0
- cancan_microstack-0.0.1/MANIFEST.in +9 -0
- cancan_microstack-0.0.1/PKG-INFO +155 -0
- cancan_microstack-0.0.1/README.md +109 -0
- cancan_microstack-0.0.1/__init__.py +14 -0
- cancan_microstack-0.0.1/__version__.py +10 -0
- cancan_microstack-0.0.1/assets/__init__.py +6 -0
- cancan_microstack-0.0.1/assets/builds/caddy/Caddyfile +187 -0
- cancan_microstack-0.0.1/assets/builds/caddy/DEPLOYMENT.md +303 -0
- cancan_microstack-0.0.1/assets/builds/caddy/Dockerfile +46 -0
- cancan_microstack-0.0.1/assets/builds/caddy/README.md +343 -0
- cancan_microstack-0.0.1/assets/builds/caddy/geoip/README.md +5 -0
- cancan_microstack-0.0.1/assets/builds/caddy/start.sh +78 -0
- cancan_microstack-0.0.1/assets/builds/caddy/waf/coraza.conf +179 -0
- cancan_microstack-0.0.1/assets/builds/service/Dockerfile +59 -0
- cancan_microstack-0.0.1/assets/builds/service/README.md +13 -0
- cancan_microstack-0.0.1/assets/ddl/create_db.sql +22 -0
- cancan_microstack-0.0.1/assets/ddl/infra/execution_log_tbl.sql +46 -0
- cancan_microstack-0.0.1/assets/ddl/infra/node_instance_tbl.sql +56 -0
- cancan_microstack-0.0.1/assets/ddl/infra/service_action_log_tbl.sql +36 -0
- cancan_microstack-0.0.1/assets/ddl/infra/service_config_tbl.sql +26 -0
- cancan_microstack-0.0.1/assets/ddl/infra/service_info_tbl.sql +45 -0
- cancan_microstack-0.0.1/assets/ddl/infra/service_instance_tbl.sql +54 -0
- cancan_microstack-0.0.1/assets/ddl/infra/service_operation_tbl.sql +47 -0
- cancan_microstack-0.0.1/assets/ddl/infra/workflow_definition_tbl.sql +60 -0
- cancan_microstack-0.0.1/assets/ddl/infra/workflow_definition_version_tbl.sql +35 -0
- cancan_microstack-0.0.1/assets/ddl/infra/workflow_engine_alert_tbl.sql +34 -0
- cancan_microstack-0.0.1/assets/ddl/infra/workflow_run_tbl.sql +52 -0
- cancan_microstack-0.0.1/assets/ddl/ops/admin_user_tbl.sql +34 -0
- cancan_microstack-0.0.1/assets/ddl/ops/caddy_access_log_tbl.sql +91 -0
- cancan_microstack-0.0.1/assets/ddl/ops/caddy_certificate_tbl.sql +59 -0
- cancan_microstack-0.0.1/assets/ddl/ops/caddy_rate_limit_tbl.sql +64 -0
- cancan_microstack-0.0.1/assets/ddl/ops/caddy_route_tbl.sql +63 -0
- cancan_microstack-0.0.1/assets/ddl/ops/caddy_stats_tbl.sql +77 -0
- cancan_microstack-0.0.1/assets/ddl/trigger.sql +21 -0
- cancan_microstack-0.0.1/assets/docker/docker-compose.infra.yml +401 -0
- cancan_microstack-0.0.1/assets/scripts/README.md +195 -0
- cancan_microstack-0.0.1/assets/scripts/docker/build_images.sh +44 -0
- cancan_microstack-0.0.1/assets/scripts/docker/force_rebuild_images.sh +38 -0
- cancan_microstack-0.0.1/assets/scripts/docker/rebuild_all.sh +34 -0
- cancan_microstack-0.0.1/assets/scripts/docker/rebuild_compose.sh +61 -0
- cancan_microstack-0.0.1/assets/scripts/docker/restart.sh +35 -0
- cancan_microstack-0.0.1/assets/scripts/docker/restart_compose.sh +35 -0
- cancan_microstack-0.0.1/assets/scripts/docker/start.sh +78 -0
- cancan_microstack-0.0.1/assets/scripts/docker/start_all.sh +46 -0
- cancan_microstack-0.0.1/assets/scripts/docker/start_compose.sh +66 -0
- cancan_microstack-0.0.1/assets/scripts/docker/stop.sh +67 -0
- cancan_microstack-0.0.1/assets/scripts/docker/stop_all.sh +38 -0
- cancan_microstack-0.0.1/assets/scripts/docker/stop_compose.sh +38 -0
- cancan_microstack-0.0.1/assets/scripts/podman/build_images_podman.sh +59 -0
- cancan_microstack-0.0.1/assets/scripts/podman/cleanup_podman.sh +25 -0
- cancan_microstack-0.0.1/assets/scripts/podman/force_rebuild_images_podman.sh +56 -0
- cancan_microstack-0.0.1/assets/scripts/podman/rebuild_all_podman.sh +37 -0
- cancan_microstack-0.0.1/assets/scripts/podman/rebuild_compose_podman.sh +60 -0
- cancan_microstack-0.0.1/assets/scripts/podman/restart_compose_podman.sh +73 -0
- cancan_microstack-0.0.1/assets/scripts/podman/start_all_podman.sh +66 -0
- cancan_microstack-0.0.1/assets/scripts/podman/start_compose_podman.sh +80 -0
- cancan_microstack-0.0.1/assets/scripts/podman/start_podman.sh +91 -0
- cancan_microstack-0.0.1/assets/scripts/podman/stop.sh +73 -0
- cancan_microstack-0.0.1/assets/scripts/podman/stop_all_podman.sh +34 -0
- cancan_microstack-0.0.1/assets/scripts/podman/stop_compose_podman.sh +58 -0
- cancan_microstack-0.0.1/assets/scripts/start_controllersrv.sh +9 -0
- cancan_microstack-0.0.1/assets/scripts/utils/check_all_db_tables.sh +104 -0
- cancan_microstack-0.0.1/assets/scripts/utils/check_env.sh +177 -0
- cancan_microstack-0.0.1/assets/scripts/utils/check_service_management_deployment.sh +225 -0
- cancan_microstack-0.0.1/assets/scripts/utils/deploy_service_management.sh +176 -0
- cancan_microstack-0.0.1/assets/scripts/utils/force_reload_infrasrv.sh +52 -0
- cancan_microstack-0.0.1/assets/scripts/utils/monitor_service_management.sh +187 -0
- cancan_microstack-0.0.1/assets/scripts/utils/reset_postgres_volume.sh +68 -0
- cancan_microstack-0.0.1/assets/scripts/utils/test_async_operations.sh +141 -0
- cancan_microstack-0.0.1/assets/scripts/utils/verify_real_operations.sh +76 -0
- cancan_microstack-0.0.1/assets/service/Dockerfile +65 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/AppEmpty.vue_vue_type_script_setup_true_lang-BOKUurnM.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ConfigManage-DKV5YOUz.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ConfigManage-Y5bhy7wG.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ConsoleManage-8ljYvCW2.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ConsoleManage-BWpyqbuQ.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/DashboardNew-B9Nf1OPl.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/DashboardNew-DYWZKQ1V.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/LogSearch-CA0Jhe78.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/LogSearch-CCZfTNPF.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/LoginView-BId3kP3M.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/LoginView-BQZTV_Qy.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/OperationProgressDialog-BdEYwqFq.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/OperationProgressDialog-D-pASR8G.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/PageContainer-Byss-yUC.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/PageContainer-C3nSZwM7.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/RateLimitManage-BDI8jLpC.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/RateLimitManage-DJY4NiF-.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/RouteManage-DaUQ4QLw.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/RouteManage-w9XCU0UA.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceCard-BFzHe6Tw.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceCard-BJUhWnA-.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceDetail-Cw24WuKp.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceDetail-Yum47zdB.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceList-C7ryvbhE.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceList-Cgd01fUx.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceLogs-COpG9H0h.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceLogs-H_Alq0cf.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/StatsOverview-D0TwMQkA.js +39 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/StatsOverview-lqAN6pqM.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/TotpBindView-CWlAmzFt.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/TotpBindView-HoQC1lhx.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/TotpVerifyView-BHN1VtX1.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/TotpVerifyView-D3w_lZk8.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowCenter-DU_mpIA0.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowCenter-i50rZyxN.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowDesigner-CnHokPL9.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowDesigner-DaZaZpLd.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowRuns-B09hK48c.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowRuns-wGutKIIU.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/caddy-nnCKf8fG.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/format-Cuzxgna9.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/index-CiFlm8oc.js +64 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/index-UW0T1Dkc.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/service-BYlgGPs_.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/service-operation-6GzLw2Z1.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/style-CcIXnQ5y.css +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/style-lRnStdGu.js +39 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/useDebounce-BRlqfXqf.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/assets/workflow-CUXs39Ac.js +1 -0
- cancan_microstack-0.0.1/assets/www/adminops/index.html +16 -0
- cancan_microstack-0.0.1/assets/www/adminops/vite.svg +1 -0
- cancan_microstack-0.0.1/cancan_microstack.egg-info/PKG-INFO +155 -0
- cancan_microstack-0.0.1/cancan_microstack.egg-info/SOURCES.txt +893 -0
- cancan_microstack-0.0.1/cancan_microstack.egg-info/dependency_links.txt +1 -0
- cancan_microstack-0.0.1/cancan_microstack.egg-info/entry_points.txt +2 -0
- cancan_microstack-0.0.1/cancan_microstack.egg-info/not-zip-safe +1 -0
- cancan_microstack-0.0.1/cancan_microstack.egg-info/requires.txt +17 -0
- cancan_microstack-0.0.1/cancan_microstack.egg-info/top_level.txt +1 -0
- cancan_microstack-0.0.1/cli/__init__.py +14 -0
- cancan_microstack-0.0.1/cli/__main__.py +9 -0
- cancan_microstack-0.0.1/cli/main.py +552 -0
- cancan_microstack-0.0.1/cmd/__init__.py +54 -0
- cancan_microstack-0.0.1/cmd/cancan/__init__.py +12 -0
- cancan_microstack-0.0.1/cmd/cancan/run.py +395 -0
- cancan_microstack-0.0.1/cmd/controllersrv/__init__.py +0 -0
- cancan_microstack-0.0.1/cmd/controllersrv/run.py +131 -0
- cancan_microstack-0.0.1/cmd/infrasrv/__init__.py +5 -0
- cancan_microstack-0.0.1/cmd/infrasrv/run.py +100 -0
- cancan_microstack-0.0.1/cmd/opsbffsrv/__init__.py +5 -0
- cancan_microstack-0.0.1/cmd/opsbffsrv/run.py +96 -0
- cancan_microstack-0.0.1/core/__init__.py +5 -0
- cancan_microstack-0.0.1/core/assets.py +123 -0
- cancan_microstack-0.0.1/core/compose_builder.py +102 -0
- cancan_microstack-0.0.1/core/doctor.py +152 -0
- cancan_microstack-0.0.1/core/microstack.py +71 -0
- cancan_microstack-0.0.1/core/runner.py +56 -0
- cancan_microstack-0.0.1/core/stack_manager.py +186 -0
- cancan_microstack-0.0.1/public/__init__.py +7 -0
- cancan_microstack-0.0.1/public/api/__init__.py +1 -0
- cancan_microstack-0.0.1/public/api/controllersrv_client.py +277 -0
- cancan_microstack-0.0.1/public/api/infrasrv_client.py +404 -0
- cancan_microstack-0.0.1/public/const/__init__.py +1 -0
- cancan_microstack-0.0.1/public/const/action_consts.py +18 -0
- cancan_microstack-0.0.1/public/const/app_consts.py +42 -0
- cancan_microstack-0.0.1/public/const/caddy_consts.py +22 -0
- cancan_microstack-0.0.1/public/const/controllersrv_consts.py +163 -0
- cancan_microstack-0.0.1/public/const/docker_consts.py +15 -0
- cancan_microstack-0.0.1/public/const/error.py +56 -0
- cancan_microstack-0.0.1/public/const/health_consts.py +52 -0
- cancan_microstack-0.0.1/public/const/hook_enums.py +56 -0
- cancan_microstack-0.0.1/public/const/logging_enums.py +13 -0
- cancan_microstack-0.0.1/public/const/metrics_enums.py +36 -0
- cancan_microstack-0.0.1/public/const/monitor_enums.py +26 -0
- cancan_microstack-0.0.1/public/const/operation_consts.py +53 -0
- cancan_microstack-0.0.1/public/const/opsbffsrv_error.py +92 -0
- cancan_microstack-0.0.1/public/const/overrides_consts.py +13 -0
- cancan_microstack-0.0.1/public/const/redis.py +17 -0
- cancan_microstack-0.0.1/public/const/service_consts.py +15 -0
- cancan_microstack-0.0.1/public/const/workflow_consts.py +65 -0
- cancan_microstack-0.0.1/public/error.py +41 -0
- cancan_microstack-0.0.1/public/logging/__init__.py +0 -0
- cancan_microstack-0.0.1/public/logging/initializer.py +109 -0
- cancan_microstack-0.0.1/public/logging/mq_handler.py +279 -0
- cancan_microstack-0.0.1/public/schemas/__init__.py +1 -0
- cancan_microstack-0.0.1/public/schemas/caddy/__init__.py +381 -0
- cancan_microstack-0.0.1/public/schemas/caddy/analysis.py +90 -0
- cancan_microstack-0.0.1/public/schemas/caddy/route.py +18 -0
- cancan_microstack-0.0.1/public/schemas/common.py +79 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/__init__.py +3 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/async_requests.py +30 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/compose_models.py +47 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/const.py +24 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/docker_models.py +45 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/docker_responses.py +104 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/requests.py +54 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/responses.py +124 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/task_models.py +102 -0
- cancan_microstack-0.0.1/public/schemas/controllersrv/validation.py +23 -0
- cancan_microstack-0.0.1/public/schemas/hook_metrics.py +124 -0
- cancan_microstack-0.0.1/public/schemas/hooks.py +39 -0
- cancan_microstack-0.0.1/public/schemas/infra/__init__.py +0 -0
- cancan_microstack-0.0.1/public/schemas/infra/cleanup.py +25 -0
- cancan_microstack-0.0.1/public/schemas/infra/container.py +74 -0
- cancan_microstack-0.0.1/public/schemas/infra/enums.py +135 -0
- cancan_microstack-0.0.1/public/schemas/infra/health_check.py +42 -0
- cancan_microstack-0.0.1/public/schemas/infra/hook_log.py +42 -0
- cancan_microstack-0.0.1/public/schemas/infra/operation.py +90 -0
- cancan_microstack-0.0.1/public/schemas/infra/overview.py +25 -0
- cancan_microstack-0.0.1/public/schemas/infra/push.py +33 -0
- cancan_microstack-0.0.1/public/schemas/infra/service_action_log.py +47 -0
- cancan_microstack-0.0.1/public/schemas/infra/service_config.py +10 -0
- cancan_microstack-0.0.1/public/schemas/infra/service_info.py +69 -0
- cancan_microstack-0.0.1/public/schemas/infra/service_instance.py +93 -0
- cancan_microstack-0.0.1/public/schemas/infra/service_management.py +152 -0
- cancan_microstack-0.0.1/public/schemas/infra/service_operation.py +79 -0
- cancan_microstack-0.0.1/public/schemas/infra/service_registry.py +158 -0
- cancan_microstack-0.0.1/public/schemas/infra/status_types.py +19 -0
- cancan_microstack-0.0.1/public/schemas/infra/workflow.py +566 -0
- cancan_microstack-0.0.1/public/schemas/logging/__init__.py +1 -0
- cancan_microstack-0.0.1/public/schemas/logging/log_event.py +121 -0
- cancan_microstack-0.0.1/public/schemas/opsbffsrv/__init__.py +1 -0
- cancan_microstack-0.0.1/public/schemas/opsbffsrv/async_ops.py +17 -0
- cancan_microstack-0.0.1/public/schemas/opsbffsrv/db_admin.py +147 -0
- cancan_microstack-0.0.1/public/schemas/opsbffsrv/db_init.py +48 -0
- cancan_microstack-0.0.1/public/schemas/opsbffsrv/service_config.py +89 -0
- cancan_microstack-0.0.1/public/schemas/opsbffsrv/service_logs.py +54 -0
- cancan_microstack-0.0.1/public/schemas/service_operation.py +24 -0
- cancan_microstack-0.0.1/public/schemas/service_registry.py +40 -0
- cancan_microstack-0.0.1/public/types/__init__.py +7 -0
- cancan_microstack-0.0.1/public/web/__init__.py +0 -0
- cancan_microstack-0.0.1/public/web/config_value.py +105 -0
- cancan_microstack-0.0.1/public/web/server.py +385 -0
- cancan_microstack-0.0.1/py.typed +0 -0
- cancan_microstack-0.0.1/pyproject.toml +161 -0
- cancan_microstack-0.0.1/runtime/__init__.py +0 -0
- cancan_microstack-0.0.1/runtime/compose_cmd.py +228 -0
- cancan_microstack-0.0.1/runtime/host_daemon.py +318 -0
- cancan_microstack-0.0.1/runtime/overrides.py +103 -0
- cancan_microstack-0.0.1/runtime/resources.py +25 -0
- cancan_microstack-0.0.1/runtime/workspace.py +94 -0
- cancan_microstack-0.0.1/services/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/__init__.py +8 -0
- cancan_microstack-0.0.1/services/controllersrv/application/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/application/docker_compose_app.py +427 -0
- cancan_microstack-0.0.1/services/controllersrv/conf/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/conf/config.py +76 -0
- cancan_microstack-0.0.1/services/controllersrv/conf/settings.py +54 -0
- cancan_microstack-0.0.1/services/controllersrv/domain/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/domain/docker_compose/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/domain/docker_compose/docker_compose_domain.py +278 -0
- cancan_microstack-0.0.1/services/controllersrv/domain/service_validator.py +327 -0
- cancan_microstack-0.0.1/services/controllersrv/domain/task/__init__.py +17 -0
- cancan_microstack-0.0.1/services/controllersrv/domain/task/task_queue.py +286 -0
- cancan_microstack-0.0.1/services/controllersrv/domain/task/task_worker.py +495 -0
- cancan_microstack-0.0.1/services/controllersrv/infrastructure/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/interface/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/interface/api/__init__.py +0 -0
- cancan_microstack-0.0.1/services/controllersrv/interface/api/docker_control_api.py +470 -0
- cancan_microstack-0.0.1/services/controllersrv/router.py +132 -0
- cancan_microstack-0.0.1/services/infrasrv/__init__.py +4 -0
- cancan_microstack-0.0.1/services/infrasrv/application/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/application/health_check_app.py +24 -0
- cancan_microstack-0.0.1/services/infrasrv/application/logging/__init__.py +1 -0
- cancan_microstack-0.0.1/services/infrasrv/application/logging/log_ingestion_service.py +183 -0
- cancan_microstack-0.0.1/services/infrasrv/application/service_config.py +22 -0
- cancan_microstack-0.0.1/services/infrasrv/application/service_logs_app.py +53 -0
- cancan_microstack-0.0.1/services/infrasrv/application/service_management_app.py +689 -0
- cancan_microstack-0.0.1/services/infrasrv/application/service_operation_tracker.py +251 -0
- cancan_microstack-0.0.1/services/infrasrv/application/service_registry.py +53 -0
- cancan_microstack-0.0.1/services/infrasrv/application/workflow/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_app.py +991 -0
- cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_queue.py +302 -0
- cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_tasks.py +46 -0
- cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_worker_runtime.py +122 -0
- cancan_microstack-0.0.1/services/infrasrv/conf/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/conf/config.py +98 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/health_check/__init__.py +3 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/health_check/health_check_domain.py +576 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/hooks/__init__.py +19 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/hooks/builtin_hooks.py +308 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/hooks/hook_registry.py +43 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/hooks/hooks_log_utils.py +275 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/hooks/init.py +17 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/hooks/metrics.py +205 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/hooks/pre_registration_hooks.py +490 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/registry/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/registry/service_registry.py +509 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/service_config/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/service_config/service_config.py +50 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/service_logs/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/service_logs/service_logs_domain.py +51 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/workflow/__init__.py +4 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/workflow/engine.py +159 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/workflow/node_handlers.py +509 -0
- cancan_microstack-0.0.1/services/infrasrv/domain/workflow/workflow_domain.py +164 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/api/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/api/controllersrv_api.py +165 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/cache/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/cache/service_registry_cache.py +174 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/execution_log_tbl.py +53 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/node_instance_tbl.py +55 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_config_tbl.py +30 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_info_tbl.py +59 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_instance_tbl.py +88 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_operation_tbl.py +73 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_definition_tbl.py +55 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_definition_version_tbl.py +43 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_engine_alert_tbl.py +57 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_run_tbl.py +56 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_action_log_op.py +239 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_config.py +80 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_config_manager.py +198 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_info_op.py +297 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_instance_op.py +688 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_operation_op.py +387 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_registry.py +124 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/workflow_op.py +804 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/ddl_manager.py +31 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/mongo/__init__.py +1 -0
- cancan_microstack-0.0.1/services/infrasrv/infrastructure/mongo/log_repository.py +129 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/health_check_api.py +29 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/hooks.py +284 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/internal.py +49 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/internal_instance_api.py +265 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/internal_operation_api.py +206 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/service_config.py +50 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/service_logs_api.py +49 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/service_management_api.py +113 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/service_registry.py +117 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/api/workflow_api.py +303 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/schedule/__init__.py +0 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/schedule/cleanup.py +13 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/schedule/health_check.py +27 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/schedule/log_cleanup.py +26 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/schedule/operation_tracker.py +25 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/schedule/scheduler.py +39 -0
- cancan_microstack-0.0.1/services/infrasrv/interface/schedule/workflow_scheduler.py +115 -0
- cancan_microstack-0.0.1/services/infrasrv/router.py +341 -0
- cancan_microstack-0.0.1/services/opsbffsrv/__init__.py +4 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/async_operation_app.py +150 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/auth_app.py +285 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/access_log_analysis_app.py +344 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/access_log_ingestion_service.py +169 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/certificate_management_app.py +355 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/rate_limit_management_app.py +496 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/route_management_app.py +401 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/stats_aggregation_app.py +364 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/db_admin_app.py +103 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/db_init_app.py +283 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/logging/__init__.py +1 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/logging/log_query_app.py +28 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/service_config.py +158 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/service_logs_app.py +74 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/service_registry.py +36 -0
- cancan_microstack-0.0.1/services/opsbffsrv/application/workflow_ops_app.py +730 -0
- cancan_microstack-0.0.1/services/opsbffsrv/conf/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/conf/config.py +224 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/auth/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/auth/admin_init.py +38 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/auth/auth_domain.py +108 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/access_log_analysis.py +358 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/certificate_management.py +325 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/default_routes.py +53 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/rate_limit_management.py +308 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/route_management.py +279 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/stats_aggregation.py +654 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/db_admin/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/db_admin/db_admin_domain.py +118 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/db_init/__init__.py +3 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/db_init/db_init_domain.py +358 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/logging/__init__.py +1 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/logging/log_query_domain.py +99 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/service_config/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/service_config/service_config.py +81 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/service_registry/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/domain/service_registry/service_registry.py +292 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/api/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/api/infrasrv_api.py +242 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/captcha_service.py +67 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/password_service.py +12 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/redis_store.py +131 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/totp_service.py +59 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/access_log_parser.py +307 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/admin_api_client.py +678 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/ip_geo_locator.py +176 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/admin_user_tbl.py +33 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_access_log_tbl.py +90 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_certificate_tbl.py +65 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_rate_limit_tbl.py +69 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_route_tbl.py +66 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_stats_tbl.py +78 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_config_tbl.py +30 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_info_tbl.py +51 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_instance_tbl.py +68 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/admin_user_operate.py +59 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_access_log.py +531 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_certificate.py +451 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_rate_limit.py +360 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_route.py +271 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_stats.py +343 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_action_log_op.py +57 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_config.py +86 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_info_op.py +79 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_instance.py +58 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_registry.py +138 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/ddl_manager.py +31 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/mongo/__init__.py +1 -0
- cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/mongo/log_query_repository.py +87 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/async_operation_api.py +137 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/auth_api.py +113 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/__init__.py +3 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/access_log_api.py +174 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/certificate_api.py +235 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/rate_limit_api.py +302 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/route_api.py +250 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/stats_api.py +243 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/db_admin_api.py +62 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/db_init_api.py +109 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/instance_management_api.py +165 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/log_query_api.py +41 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/mongo_express_proxy_api.py +181 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/pgweb_proxy_api.py +154 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/rabbitmq_mgmt_proxy_api.py +518 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/redis_commander_proxy_api.py +133 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/service_config.py +146 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/service_logs_api.py +81 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/service_registry.py +66 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/api/workflow_ops_api.py +413 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/middleware/__init__.py +0 -0
- cancan_microstack-0.0.1/services/opsbffsrv/interface/middleware/auth_middleware.py +52 -0
- cancan_microstack-0.0.1/services/opsbffsrv/router.py +901 -0
- cancan_microstack-0.0.1/setup.cfg +4 -0
- cancan_microstack-0.0.1/tests/test_app_server_registry.py +107 -0
- cancan_microstack-0.0.1/tests/test_assets.py +60 -0
- cancan_microstack-0.0.1/tests/test_cli.py +119 -0
- cancan_microstack-0.0.1/tests/test_compose_builder.py +23 -0
- cancan_microstack-0.0.1/tests/test_config_value.py +79 -0
- cancan_microstack-0.0.1/tests/test_stack_cli.py +64 -0
- cancan_microstack-0.0.1/tests/test_workflow_consts.py +22 -0
- cancan_microstack-0.0.1/tests/test_workflow_engine_flow_baseline.py +141 -0
- cancan_microstack-0.0.1/tests/test_workflow_inline_queue.py +61 -0
- cancan_microstack-0.0.1/tests/test_workflow_nodes_baseline.py +366 -0
- cancan_microstack-0.0.1/tests/test_workflow_ops_app_baseline.py +215 -0
- cancan_microstack-0.0.1/tests/test_workflow_runtime_context.py +89 -0
- cancan_microstack-0.0.1/tests/test_workflow_scheduler_risk.py +125 -0
- cancan_microstack-0.0.1/tests/test_workflow_snapshot_baseline.py +693 -0
- cancan_microstack-0.0.1/utils/__init__.py +1 -0
- cancan_microstack-0.0.1/utils/container_env.py +218 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Victor Lai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cancan-microstack
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Controllersrv/Infrasrv/Opsbffsrv bundle with compose tooling
|
|
5
|
+
Author-email: Victor Lai <victor.lai@foxmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/10000ms/cancan_microstack
|
|
8
|
+
Project-URL: Repository, https://github.com/10000ms/cancan_microstack
|
|
9
|
+
Project-URL: Bug Tracker, https://github.com/10000ms/cancan_microstack/issues
|
|
10
|
+
Keywords: fastapi,microservices,docker,compose,orchestration,workflow,ops
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: System Administrators
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
22
|
+
Classifier: Topic :: System :: Systems Administration
|
|
23
|
+
Classifier: Framework :: FastAPI
|
|
24
|
+
Classifier: Framework :: AsyncIO
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.10
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: pyyaml<7.0.0,>=6.0.0
|
|
30
|
+
Requires-Dist: bcrypt<6.0.0,>=4.0.0
|
|
31
|
+
Requires-Dist: pyotp<3.0.0,>=2.9.0
|
|
32
|
+
Requires-Dist: Pillow<13.0.0,>=10.0.0
|
|
33
|
+
Requires-Dist: nanoid<4.0.0,>=2.0.0
|
|
34
|
+
Requires-Dist: redis[hiredis]<9.0.0,>=5.0.0
|
|
35
|
+
Requires-Dist: cryptography<50.0.0,>=41.0.0
|
|
36
|
+
Requires-Dist: qrcode<9.0.0,>=7.4.0
|
|
37
|
+
Requires-Dist: jinja2<4.0.0,>=3.1.0
|
|
38
|
+
Requires-Dist: geoip2<6.0.0,>=4.7.0
|
|
39
|
+
Requires-Dist: jmespath<2.0.0,>=1.0.0
|
|
40
|
+
Requires-Dist: dragonfly-container[all]>=0.0.1
|
|
41
|
+
Requires-Dist: linglong-web[all]>=0.0.1
|
|
42
|
+
Provides-Extra: dev
|
|
43
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
44
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
45
|
+
Dynamic: license-file
|
|
46
|
+
|
|
47
|
+
# Cancan Microstack
|
|
48
|
+
|
|
49
|
+
[](https://pypi.org/project/cancan-microstack/)
|
|
50
|
+
[](https://www.python.org/downloads/)
|
|
51
|
+
[](LICENSE)
|
|
52
|
+
|
|
53
|
+
可嵌入的基础设施微服务栈:把一整套基础设施微服务(`controllersrv` / `infrasrv` / `opsbffsrv`)连同 Docker Compose 编排、DDL、运维前端与统一 CLI,打包成**一个可 pip 安装的 Python 库**,让业务仓库“只写业务代码”。
|
|
54
|
+
|
|
55
|
+
An embeddable infrastructure microstack: bundle a complete set of infrastructure microservices (`controllersrv` / `infrasrv` / `opsbffsrv`) — together with Docker Compose orchestration, DDL, an ops UI and a unified CLI — into **a single pip-installable Python library**, so your product repo contains business logic only.
|
|
56
|
+
|
|
57
|
+
> 📖 **完整文档 / Full documentation**:[`docs/index.html`](docs/index.html) — 双语、含架构原理、CLI 参考与使用说明。
|
|
58
|
+
> Bilingual docs with architecture, CLI reference and guides.
|
|
59
|
+
|
|
60
|
+
> **定位 / Positioning**:本库只包含**通用基础设施能力**;具体业务服务与逻辑应留在你自己的业务仓库。
|
|
61
|
+
> This library contains **generic infrastructure capabilities only**; your business services and logic stay in your own product repo.
|
|
62
|
+
|
|
63
|
+
## 特性 / Features
|
|
64
|
+
|
|
65
|
+
- 🛠️ **统一 CLI / Unified CLI**:`cancan` 命令提供 `assets` / `compose` / `services` / `stack` 子命令。
|
|
66
|
+
- 🔀 **Compose 构建器 / Compose builder**:把内置 infra compose 与业务 compose、override 深度合并成一个可运行栈。
|
|
67
|
+
Deep-merge the built-in infra compose with your services compose and overrides into one runnable stack.
|
|
68
|
+
- 🔌 **免 Fork 覆盖 / Fork-free overrides**:用 `cancan_overrides/` 只替换你想改的文件,其余复用库实现。
|
|
69
|
+
- 🖥️ **内置运维前端 / Bundled ops UI**:随库附带 adminops UI 构建产物,可导出由 Caddy 挂载。
|
|
70
|
+
- 🗄️ **自管理 DDL / Self-managed DDL**:infra/ops 数据库表随服务启动自动初始化。
|
|
71
|
+
- ♻️ **整栈生命周期 / Full-stack lifecycle**:`stack up/down/status` 同时管理宿主机进程与容器栈。
|
|
72
|
+
|
|
73
|
+
构建于已发布的姊妹库之上 / Built on published sibling libraries:[`linglong-web`](https://pypi.org/project/linglong-web/) · [`dragonfly-container`](https://pypi.org/project/dragonfly-container/)。
|
|
74
|
+
|
|
75
|
+
## 快速开始 / Quick Start
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# 1. 安装 / Install
|
|
79
|
+
pip install cancan-microstack
|
|
80
|
+
|
|
81
|
+
# 2. 脚手架:生成最小可跑工作区(业务 compose 样例 + .env + overrides 骨架)
|
|
82
|
+
# Scaffold a minimal workspace (services compose sample + .env + overrides skeleton)
|
|
83
|
+
cancan init
|
|
84
|
+
|
|
85
|
+
# 3. 预检环境(容器引擎 / 端口 / 配置 / 弱默认值)
|
|
86
|
+
# Pre-flight checks (engine / ports / config / weak defaults)
|
|
87
|
+
cancan doctor
|
|
88
|
+
|
|
89
|
+
# 4. 一键启动整套集群(推荐)/ Bring up the whole stack
|
|
90
|
+
# 生成 compose.cancan.yml、bootstrap 运行文件、宿主机起 controllersrv、容器栈 up
|
|
91
|
+
cancan stack up --workspace . --service-file docker-compose.services.yml
|
|
92
|
+
|
|
93
|
+
# 5. 状态 / 关闭 — status / teardown
|
|
94
|
+
cancan stack status --workspace .
|
|
95
|
+
cancan stack down --workspace .
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
> 安装即提供 `cancan` 命令;也可用 `python -m cancan_microstack.cli ...`。
|
|
99
|
+
> Installing provides the `cancan` command; `python -m cancan_microstack.cli ...` works too.
|
|
100
|
+
>
|
|
101
|
+
> 运行容器栈需要 Docker 或 Podman。 / Running the stack requires Docker or Podman.
|
|
102
|
+
|
|
103
|
+
> ⚠️ **生产安全 / Production safety**:凭据与密钥集中在工作区 `.env`(`cancan init` 会生成,并自动写入一个唯一的 TOTP 加密 key)。其中数据库等使用本地开发弱默认值(如 `admin123`)以便开箱即用。**生产部署务必在 `.env` 里改成真实凭证;`cancan doctor` 会提示仍在使用的弱默认值。**
|
|
104
|
+
> Credentials & secrets live in the workspace `.env` (created by `cancan init`, with a unique TOTP encryption key auto-generated). Databases use weak local-dev defaults (e.g. `admin123`) for out-of-the-box use. **In production, set real secrets in `.env`; `cancan doctor` flags any weak defaults still in use.**
|
|
105
|
+
|
|
106
|
+
## CLI 速览 / CLI at a glance
|
|
107
|
+
|
|
108
|
+
| 命令 / Command | 作用 / Purpose |
|
|
109
|
+
| --- | --- |
|
|
110
|
+
| `cancan init` | 脚手架最小可跑工作区 / scaffold a minimal runnable workspace |
|
|
111
|
+
| `cancan doctor` | 起栈前环境/配置预检 / pre-flight environment & config checks |
|
|
112
|
+
| `cancan assets list [subdir]` | 列出内置资产 / list bundled assets |
|
|
113
|
+
| `cancan assets export <name> <dest> [--overwrite]` | 导出资产到工作区 / export an asset to the workspace |
|
|
114
|
+
| `cancan compose build [--service-file …] [--override …]` | 合成 `compose.cancan.yml` / synthesize the stack file |
|
|
115
|
+
| `cancan services run <name> [--host] [--port]` | 前台运行内置服务 / run a bundled service in the foreground |
|
|
116
|
+
| `cancan stack up/down/status` | 整栈生命周期(宿主机进程 + 容器栈)/ full-stack lifecycle |
|
|
117
|
+
|
|
118
|
+
完整参数与原理见 [`docs/index.html`](docs/index.html)。 / Full options and design in the docs.
|
|
119
|
+
|
|
120
|
+
## 内置服务 / Bundled services
|
|
121
|
+
|
|
122
|
+
| 服务 / Service | 职责 / Responsibility |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| `controllersrv` | 宿主机进程,封装 Docker/Podman 容器操作(基于 `dragonfly-container`)/ host process managing containers |
|
|
125
|
+
| `infrasrv` | 服务注册、工作流引擎与调度、日志采集、健康检查 / registry, workflow, log ingestion, health checks |
|
|
126
|
+
| `opsbffsrv` | 运维 BFF:为 adminops 前端聚合接口(认证 / Caddy / DB / 日志)/ ops BFF for the admin UI |
|
|
127
|
+
|
|
128
|
+
服务配置基于 `linglong-web`,资源(PostgreSQL / Redis / MongoDB / RabbitMQ / Celery)由其统一编排。
|
|
129
|
+
Services are configured via `linglong-web`, which orchestrates the backing resources.
|
|
130
|
+
|
|
131
|
+
## 免 Fork 覆盖 / Fork-free overrides
|
|
132
|
+
|
|
133
|
+
在工作区放一个 `cancan_overrides/<service>/` 目录,只放你要替换的文件,运行时会优先加载它,其余仍复用库实现(也可用环境变量 `CANCAN_OVERRIDE_ROOT` 指定)。
|
|
134
|
+
|
|
135
|
+
Drop a `cancan_overrides/<service>/` directory in your workspace with only the files you want to replace; it is loaded with priority at runtime while the rest falls back to the library (or point at it via `CANCAN_OVERRIDE_ROOT`).
|
|
136
|
+
|
|
137
|
+
## 运维前端(adminops)/ The adminops UI
|
|
138
|
+
|
|
139
|
+
库内**只包含前端的构建产物**(`assets/www/adminops/`),不含前端源码。前端源码在独立仓库维护;更新流程:在前端源码仓构建(`pnpm build`)→ 把 `dist` 产物覆盖到 `assets/www/adminops/` → 重新发布本库。
|
|
140
|
+
|
|
141
|
+
This library ships **only the built frontend artifacts** (`assets/www/adminops/`), not the frontend source. The UI source lives in a separate repository; to update: build in the source repo (`pnpm build`) → copy the `dist` output into `assets/www/adminops/` → re-release this library.
|
|
142
|
+
|
|
143
|
+
## 开发 / Development
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
git clone https://github.com/10000ms/cancan_microstack.git
|
|
147
|
+
cd cancan_microstack
|
|
148
|
+
python -m venv .venv && . .venv/bin/activate
|
|
149
|
+
pip install -e ".[dev]"
|
|
150
|
+
pytest
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 许可证 / License
|
|
154
|
+
|
|
155
|
+
MIT License © 2026 Victor Lai
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Cancan Microstack
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/cancan-microstack/)
|
|
4
|
+
[](https://www.python.org/downloads/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
可嵌入的基础设施微服务栈:把一整套基础设施微服务(`controllersrv` / `infrasrv` / `opsbffsrv`)连同 Docker Compose 编排、DDL、运维前端与统一 CLI,打包成**一个可 pip 安装的 Python 库**,让业务仓库“只写业务代码”。
|
|
8
|
+
|
|
9
|
+
An embeddable infrastructure microstack: bundle a complete set of infrastructure microservices (`controllersrv` / `infrasrv` / `opsbffsrv`) — together with Docker Compose orchestration, DDL, an ops UI and a unified CLI — into **a single pip-installable Python library**, so your product repo contains business logic only.
|
|
10
|
+
|
|
11
|
+
> 📖 **完整文档 / Full documentation**:[`docs/index.html`](docs/index.html) — 双语、含架构原理、CLI 参考与使用说明。
|
|
12
|
+
> Bilingual docs with architecture, CLI reference and guides.
|
|
13
|
+
|
|
14
|
+
> **定位 / Positioning**:本库只包含**通用基础设施能力**;具体业务服务与逻辑应留在你自己的业务仓库。
|
|
15
|
+
> This library contains **generic infrastructure capabilities only**; your business services and logic stay in your own product repo.
|
|
16
|
+
|
|
17
|
+
## 特性 / Features
|
|
18
|
+
|
|
19
|
+
- 🛠️ **统一 CLI / Unified CLI**:`cancan` 命令提供 `assets` / `compose` / `services` / `stack` 子命令。
|
|
20
|
+
- 🔀 **Compose 构建器 / Compose builder**:把内置 infra compose 与业务 compose、override 深度合并成一个可运行栈。
|
|
21
|
+
Deep-merge the built-in infra compose with your services compose and overrides into one runnable stack.
|
|
22
|
+
- 🔌 **免 Fork 覆盖 / Fork-free overrides**:用 `cancan_overrides/` 只替换你想改的文件,其余复用库实现。
|
|
23
|
+
- 🖥️ **内置运维前端 / Bundled ops UI**:随库附带 adminops UI 构建产物,可导出由 Caddy 挂载。
|
|
24
|
+
- 🗄️ **自管理 DDL / Self-managed DDL**:infra/ops 数据库表随服务启动自动初始化。
|
|
25
|
+
- ♻️ **整栈生命周期 / Full-stack lifecycle**:`stack up/down/status` 同时管理宿主机进程与容器栈。
|
|
26
|
+
|
|
27
|
+
构建于已发布的姊妹库之上 / Built on published sibling libraries:[`linglong-web`](https://pypi.org/project/linglong-web/) · [`dragonfly-container`](https://pypi.org/project/dragonfly-container/)。
|
|
28
|
+
|
|
29
|
+
## 快速开始 / Quick Start
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 1. 安装 / Install
|
|
33
|
+
pip install cancan-microstack
|
|
34
|
+
|
|
35
|
+
# 2. 脚手架:生成最小可跑工作区(业务 compose 样例 + .env + overrides 骨架)
|
|
36
|
+
# Scaffold a minimal workspace (services compose sample + .env + overrides skeleton)
|
|
37
|
+
cancan init
|
|
38
|
+
|
|
39
|
+
# 3. 预检环境(容器引擎 / 端口 / 配置 / 弱默认值)
|
|
40
|
+
# Pre-flight checks (engine / ports / config / weak defaults)
|
|
41
|
+
cancan doctor
|
|
42
|
+
|
|
43
|
+
# 4. 一键启动整套集群(推荐)/ Bring up the whole stack
|
|
44
|
+
# 生成 compose.cancan.yml、bootstrap 运行文件、宿主机起 controllersrv、容器栈 up
|
|
45
|
+
cancan stack up --workspace . --service-file docker-compose.services.yml
|
|
46
|
+
|
|
47
|
+
# 5. 状态 / 关闭 — status / teardown
|
|
48
|
+
cancan stack status --workspace .
|
|
49
|
+
cancan stack down --workspace .
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
> 安装即提供 `cancan` 命令;也可用 `python -m cancan_microstack.cli ...`。
|
|
53
|
+
> Installing provides the `cancan` command; `python -m cancan_microstack.cli ...` works too.
|
|
54
|
+
>
|
|
55
|
+
> 运行容器栈需要 Docker 或 Podman。 / Running the stack requires Docker or Podman.
|
|
56
|
+
|
|
57
|
+
> ⚠️ **生产安全 / Production safety**:凭据与密钥集中在工作区 `.env`(`cancan init` 会生成,并自动写入一个唯一的 TOTP 加密 key)。其中数据库等使用本地开发弱默认值(如 `admin123`)以便开箱即用。**生产部署务必在 `.env` 里改成真实凭证;`cancan doctor` 会提示仍在使用的弱默认值。**
|
|
58
|
+
> Credentials & secrets live in the workspace `.env` (created by `cancan init`, with a unique TOTP encryption key auto-generated). Databases use weak local-dev defaults (e.g. `admin123`) for out-of-the-box use. **In production, set real secrets in `.env`; `cancan doctor` flags any weak defaults still in use.**
|
|
59
|
+
|
|
60
|
+
## CLI 速览 / CLI at a glance
|
|
61
|
+
|
|
62
|
+
| 命令 / Command | 作用 / Purpose |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| `cancan init` | 脚手架最小可跑工作区 / scaffold a minimal runnable workspace |
|
|
65
|
+
| `cancan doctor` | 起栈前环境/配置预检 / pre-flight environment & config checks |
|
|
66
|
+
| `cancan assets list [subdir]` | 列出内置资产 / list bundled assets |
|
|
67
|
+
| `cancan assets export <name> <dest> [--overwrite]` | 导出资产到工作区 / export an asset to the workspace |
|
|
68
|
+
| `cancan compose build [--service-file …] [--override …]` | 合成 `compose.cancan.yml` / synthesize the stack file |
|
|
69
|
+
| `cancan services run <name> [--host] [--port]` | 前台运行内置服务 / run a bundled service in the foreground |
|
|
70
|
+
| `cancan stack up/down/status` | 整栈生命周期(宿主机进程 + 容器栈)/ full-stack lifecycle |
|
|
71
|
+
|
|
72
|
+
完整参数与原理见 [`docs/index.html`](docs/index.html)。 / Full options and design in the docs.
|
|
73
|
+
|
|
74
|
+
## 内置服务 / Bundled services
|
|
75
|
+
|
|
76
|
+
| 服务 / Service | 职责 / Responsibility |
|
|
77
|
+
| --- | --- |
|
|
78
|
+
| `controllersrv` | 宿主机进程,封装 Docker/Podman 容器操作(基于 `dragonfly-container`)/ host process managing containers |
|
|
79
|
+
| `infrasrv` | 服务注册、工作流引擎与调度、日志采集、健康检查 / registry, workflow, log ingestion, health checks |
|
|
80
|
+
| `opsbffsrv` | 运维 BFF:为 adminops 前端聚合接口(认证 / Caddy / DB / 日志)/ ops BFF for the admin UI |
|
|
81
|
+
|
|
82
|
+
服务配置基于 `linglong-web`,资源(PostgreSQL / Redis / MongoDB / RabbitMQ / Celery)由其统一编排。
|
|
83
|
+
Services are configured via `linglong-web`, which orchestrates the backing resources.
|
|
84
|
+
|
|
85
|
+
## 免 Fork 覆盖 / Fork-free overrides
|
|
86
|
+
|
|
87
|
+
在工作区放一个 `cancan_overrides/<service>/` 目录,只放你要替换的文件,运行时会优先加载它,其余仍复用库实现(也可用环境变量 `CANCAN_OVERRIDE_ROOT` 指定)。
|
|
88
|
+
|
|
89
|
+
Drop a `cancan_overrides/<service>/` directory in your workspace with only the files you want to replace; it is loaded with priority at runtime while the rest falls back to the library (or point at it via `CANCAN_OVERRIDE_ROOT`).
|
|
90
|
+
|
|
91
|
+
## 运维前端(adminops)/ The adminops UI
|
|
92
|
+
|
|
93
|
+
库内**只包含前端的构建产物**(`assets/www/adminops/`),不含前端源码。前端源码在独立仓库维护;更新流程:在前端源码仓构建(`pnpm build`)→ 把 `dist` 产物覆盖到 `assets/www/adminops/` → 重新发布本库。
|
|
94
|
+
|
|
95
|
+
This library ships **only the built frontend artifacts** (`assets/www/adminops/`), not the frontend source. The UI source lives in a separate repository; to update: build in the source repo (`pnpm build`) → copy the `dist` output into `assets/www/adminops/` → re-release this library.
|
|
96
|
+
|
|
97
|
+
## 开发 / Development
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
git clone https://github.com/10000ms/cancan_microstack.git
|
|
101
|
+
cd cancan_microstack
|
|
102
|
+
python -m venv .venv && . .venv/bin/activate
|
|
103
|
+
pip install -e ".[dev]"
|
|
104
|
+
pytest
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 许可证 / License
|
|
108
|
+
|
|
109
|
+
MIT License © 2026 Victor Lai
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Cancan Microstack – infrastructure microservice bundle and tooling."""
|
|
2
|
+
from .__version__ import (
|
|
3
|
+
__author__,
|
|
4
|
+
__author_email__,
|
|
5
|
+
__description__,
|
|
6
|
+
__license__,
|
|
7
|
+
__title__,
|
|
8
|
+
__url__,
|
|
9
|
+
__version__,
|
|
10
|
+
)
|
|
11
|
+
from .core.assets import AssetManager, AssetRecord
|
|
12
|
+
from .core.compose_builder import ComposeBuilder
|
|
13
|
+
from .core.microstack import CancanMicrostack
|
|
14
|
+
from .core.runner import ServiceRunner
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Cancan Microstack package metadata."""
|
|
2
|
+
|
|
3
|
+
__title__ = "cancan-microstack"
|
|
4
|
+
__description__ = "Infrastructure microservice bundle providing controllersrv/infrasrv/opsbffsrv, assets, and orchestration tooling"
|
|
5
|
+
__url__ = "https://github.com/10000ms/cancan_microstack"
|
|
6
|
+
__version__ = "0.0.1"
|
|
7
|
+
__author__ = "Victor Lai"
|
|
8
|
+
__author_email__ = "victor.lai@foxmail.com"
|
|
9
|
+
__license__ = "MIT"
|
|
10
|
+
__copyright__ = "2026 Victor Lai"
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Caddyfile - 反向代理和 Coraza WAF 配置
|
|
2
|
+
# 集成 Coraza WAF 和完整的反向代理功能
|
|
3
|
+
|
|
4
|
+
{
|
|
5
|
+
# 全局配置
|
|
6
|
+
admin 0.0.0.0:2019
|
|
7
|
+
persist_config off
|
|
8
|
+
|
|
9
|
+
# 访问日志(JSON 格式,包含详细信息)
|
|
10
|
+
log {
|
|
11
|
+
output file /var/log/caddy/access.log {
|
|
12
|
+
roll_size 100mb
|
|
13
|
+
roll_keep 10
|
|
14
|
+
roll_keep_for 720h
|
|
15
|
+
}
|
|
16
|
+
format json {
|
|
17
|
+
time_format iso8601
|
|
18
|
+
message_key msg
|
|
19
|
+
}
|
|
20
|
+
level INFO
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
# 服务器配置
|
|
24
|
+
servers {
|
|
25
|
+
metrics
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# Coraza WAF 全局配置
|
|
29
|
+
order coraza_waf first
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# HTTP -> HTTPS 重定向(生产环境)
|
|
33
|
+
# :80 {
|
|
34
|
+
# redir https://{host}{uri} permanent
|
|
35
|
+
# }
|
|
36
|
+
|
|
37
|
+
# 本地开发 HTTP 端口(8080)
|
|
38
|
+
http://:8080 {
|
|
39
|
+
# 访问日志
|
|
40
|
+
log {
|
|
41
|
+
output file /var/log/caddy/http-access.json {
|
|
42
|
+
roll_size 50mb
|
|
43
|
+
roll_keep 10
|
|
44
|
+
}
|
|
45
|
+
format json
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# 基础健康检查端点
|
|
49
|
+
handle /health {
|
|
50
|
+
respond "OK" 200
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# ===== adminops - 运维管理前端(静态 SPA) =====
|
|
54
|
+
redir /adminops /adminops/ 308
|
|
55
|
+
# 资源文件不做 SPA 回退,避免缺失 chunk 被返回 index.html 导致 MIME 错误
|
|
56
|
+
# Do not apply SPA fallback for assets, otherwise missing chunks return HTML and break module loading
|
|
57
|
+
handle /adminops/assets/* {
|
|
58
|
+
root * /srv/www
|
|
59
|
+
file_server
|
|
60
|
+
}
|
|
61
|
+
# 入口 HTML 禁止强缓存,降低发布期间旧 runtime 引用旧 chunk 的概率
|
|
62
|
+
# Disable strong cache for entry HTML to reduce stale runtime/chunk mismatch after deployments
|
|
63
|
+
@adminops_index path /adminops /adminops/
|
|
64
|
+
header @adminops_index Cache-Control "no-store, no-cache, must-revalidate"
|
|
65
|
+
|
|
66
|
+
handle_path /adminops/* {
|
|
67
|
+
root * /srv/www/adminops
|
|
68
|
+
try_files {path} /index.html
|
|
69
|
+
file_server
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# ===== opsbffsrv - 运营管理服务 =====
|
|
73
|
+
handle /v1/opsbffsrv/* {
|
|
74
|
+
reverse_proxy opsbffsrv.service:8080 {
|
|
75
|
+
lb_policy round_robin
|
|
76
|
+
header_up X-Real-IP {remote_ip}
|
|
77
|
+
header_up X-Forwarded-For {remote_ip}
|
|
78
|
+
header_up X-Forwarded-Proto {scheme}
|
|
79
|
+
header_up X-Forwarded-Host {host}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# 默认处理(404)
|
|
84
|
+
handle {
|
|
85
|
+
respond "Not Found" 404
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
# HTTPS 主配置(生产环境,带 WAF)
|
|
90
|
+
:443 {
|
|
91
|
+
# TLS 配置(自动证书)
|
|
92
|
+
tls internal {
|
|
93
|
+
on_demand
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# ===== Coraza WAF 配置 =====
|
|
97
|
+
coraza_waf {
|
|
98
|
+
# 加载 WAF 配置文件
|
|
99
|
+
directives `
|
|
100
|
+
Include /etc/caddy/waf/coraza.conf
|
|
101
|
+
`
|
|
102
|
+
|
|
103
|
+
# WAF 日志
|
|
104
|
+
# audit_log /var/log/caddy/waf-audit.log
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# 访问日志(详细的 JSON 格式)
|
|
108
|
+
log {
|
|
109
|
+
output file /var/log/caddy/access.json {
|
|
110
|
+
roll_size 50mb
|
|
111
|
+
roll_keep 20
|
|
112
|
+
}
|
|
113
|
+
format json {
|
|
114
|
+
time_format iso8601
|
|
115
|
+
message_key message
|
|
116
|
+
level_key level
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# 基础健康检查端点
|
|
121
|
+
handle /health {
|
|
122
|
+
respond "OK" 200
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
# ===== adminops - 运维管理前端(静态 SPA) =====
|
|
126
|
+
redir /adminops /adminops/ 308
|
|
127
|
+
# 资源文件不做 SPA 回退,避免缺失 chunk 被返回 index.html 导致 MIME 错误
|
|
128
|
+
# Do not apply SPA fallback for assets, otherwise missing chunks return HTML and break module loading
|
|
129
|
+
handle /adminops/assets/* {
|
|
130
|
+
root * /srv/www
|
|
131
|
+
file_server
|
|
132
|
+
}
|
|
133
|
+
# 入口 HTML 禁止强缓存,降低发布期间旧 runtime 引用旧 chunk 的概率
|
|
134
|
+
# Disable strong cache for entry HTML to reduce stale runtime/chunk mismatch after deployments
|
|
135
|
+
@adminops_index path /adminops /adminops/
|
|
136
|
+
header @adminops_index Cache-Control "no-store, no-cache, must-revalidate"
|
|
137
|
+
|
|
138
|
+
handle_path /adminops/* {
|
|
139
|
+
root * /srv/www/adminops
|
|
140
|
+
try_files {path} /index.html
|
|
141
|
+
file_server
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
# ===== opsbffsrv - 运营管理服务 =====
|
|
145
|
+
handle /v1/opsbffsrv/* {
|
|
146
|
+
reverse_proxy opsbffsrv.service:8080 {
|
|
147
|
+
# 负载均衡
|
|
148
|
+
lb_policy round_robin
|
|
149
|
+
|
|
150
|
+
# 请求头
|
|
151
|
+
header_up X-Real-IP {remote_ip}
|
|
152
|
+
header_up X-Forwarded-For {remote_ip}
|
|
153
|
+
header_up X-Forwarded-Proto {scheme}
|
|
154
|
+
header_up X-Forwarded-Host {host}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
# 默认处理(404)
|
|
159
|
+
handle {
|
|
160
|
+
respond "Not Found" 404
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
# ===== 未来扩展:Coraza WAF 配置示例 =====
|
|
165
|
+
# 注意:需要使用编译了 Coraza 模块的 Caddy 版本
|
|
166
|
+
#
|
|
167
|
+
# :443 {
|
|
168
|
+
# # Coraza WAF
|
|
169
|
+
# coraza {
|
|
170
|
+
# directives `
|
|
171
|
+
# SecRuleEngine On
|
|
172
|
+
# SecRequestBodyAccess On
|
|
173
|
+
# SecResponseBodyAccess Off
|
|
174
|
+
# SecRequestBodyLimit 13107200
|
|
175
|
+
# SecRequestBodyNoFilesLimit 131072
|
|
176
|
+
#
|
|
177
|
+
# # 加载 OWASP Core Rule Set
|
|
178
|
+
# Include /etc/coraza/crs-setup.conf
|
|
179
|
+
# Include /etc/coraza/rules/*.conf
|
|
180
|
+
#
|
|
181
|
+
# # 自定义规则
|
|
182
|
+
# SecRule REQUEST_URI "@contains /admin" \
|
|
183
|
+
# "id:1001,phase:1,deny,status:403,msg:'Admin access blocked'"
|
|
184
|
+
# `
|
|
185
|
+
# }
|
|
186
|
+
# }
|
|
187
|
+
|