cancan-microstack 0.0.1__py3-none-any.whl
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/__init__.py +14 -0
- cancan_microstack/__version__.py +10 -0
- cancan_microstack/assets/__init__.py +6 -0
- cancan_microstack/assets/builds/caddy/Caddyfile +187 -0
- cancan_microstack/assets/builds/caddy/DEPLOYMENT.md +303 -0
- cancan_microstack/assets/builds/caddy/Dockerfile +46 -0
- cancan_microstack/assets/builds/caddy/README.md +343 -0
- cancan_microstack/assets/builds/caddy/geoip/README.md +5 -0
- cancan_microstack/assets/builds/caddy/start.sh +78 -0
- cancan_microstack/assets/builds/caddy/waf/coraza.conf +179 -0
- cancan_microstack/assets/builds/service/Dockerfile +59 -0
- cancan_microstack/assets/builds/service/README.md +13 -0
- cancan_microstack/assets/ddl/create_db.sql +22 -0
- cancan_microstack/assets/ddl/infra/execution_log_tbl.sql +46 -0
- cancan_microstack/assets/ddl/infra/node_instance_tbl.sql +56 -0
- cancan_microstack/assets/ddl/infra/service_action_log_tbl.sql +36 -0
- cancan_microstack/assets/ddl/infra/service_config_tbl.sql +26 -0
- cancan_microstack/assets/ddl/infra/service_info_tbl.sql +45 -0
- cancan_microstack/assets/ddl/infra/service_instance_tbl.sql +54 -0
- cancan_microstack/assets/ddl/infra/service_operation_tbl.sql +47 -0
- cancan_microstack/assets/ddl/infra/workflow_definition_tbl.sql +60 -0
- cancan_microstack/assets/ddl/infra/workflow_definition_version_tbl.sql +35 -0
- cancan_microstack/assets/ddl/infra/workflow_engine_alert_tbl.sql +34 -0
- cancan_microstack/assets/ddl/infra/workflow_run_tbl.sql +52 -0
- cancan_microstack/assets/ddl/ops/admin_user_tbl.sql +34 -0
- cancan_microstack/assets/ddl/ops/caddy_access_log_tbl.sql +91 -0
- cancan_microstack/assets/ddl/ops/caddy_certificate_tbl.sql +59 -0
- cancan_microstack/assets/ddl/ops/caddy_rate_limit_tbl.sql +64 -0
- cancan_microstack/assets/ddl/ops/caddy_route_tbl.sql +63 -0
- cancan_microstack/assets/ddl/ops/caddy_stats_tbl.sql +77 -0
- cancan_microstack/assets/ddl/trigger.sql +21 -0
- cancan_microstack/assets/docker/docker-compose.infra.yml +401 -0
- cancan_microstack/assets/scripts/README.md +195 -0
- cancan_microstack/assets/scripts/docker/build_images.sh +44 -0
- cancan_microstack/assets/scripts/docker/force_rebuild_images.sh +38 -0
- cancan_microstack/assets/scripts/docker/rebuild_all.sh +34 -0
- cancan_microstack/assets/scripts/docker/rebuild_compose.sh +61 -0
- cancan_microstack/assets/scripts/docker/restart.sh +35 -0
- cancan_microstack/assets/scripts/docker/restart_compose.sh +35 -0
- cancan_microstack/assets/scripts/docker/start.sh +78 -0
- cancan_microstack/assets/scripts/docker/start_all.sh +46 -0
- cancan_microstack/assets/scripts/docker/start_compose.sh +66 -0
- cancan_microstack/assets/scripts/docker/stop.sh +67 -0
- cancan_microstack/assets/scripts/docker/stop_all.sh +38 -0
- cancan_microstack/assets/scripts/docker/stop_compose.sh +38 -0
- cancan_microstack/assets/scripts/podman/build_images_podman.sh +59 -0
- cancan_microstack/assets/scripts/podman/cleanup_podman.sh +25 -0
- cancan_microstack/assets/scripts/podman/force_rebuild_images_podman.sh +56 -0
- cancan_microstack/assets/scripts/podman/rebuild_all_podman.sh +37 -0
- cancan_microstack/assets/scripts/podman/rebuild_compose_podman.sh +60 -0
- cancan_microstack/assets/scripts/podman/restart_compose_podman.sh +73 -0
- cancan_microstack/assets/scripts/podman/start_all_podman.sh +66 -0
- cancan_microstack/assets/scripts/podman/start_compose_podman.sh +80 -0
- cancan_microstack/assets/scripts/podman/start_podman.sh +91 -0
- cancan_microstack/assets/scripts/podman/stop.sh +73 -0
- cancan_microstack/assets/scripts/podman/stop_all_podman.sh +34 -0
- cancan_microstack/assets/scripts/podman/stop_compose_podman.sh +58 -0
- cancan_microstack/assets/scripts/start_controllersrv.sh +9 -0
- cancan_microstack/assets/scripts/utils/check_all_db_tables.sh +104 -0
- cancan_microstack/assets/scripts/utils/check_env.sh +177 -0
- cancan_microstack/assets/scripts/utils/check_service_management_deployment.sh +225 -0
- cancan_microstack/assets/scripts/utils/deploy_service_management.sh +176 -0
- cancan_microstack/assets/scripts/utils/force_reload_infrasrv.sh +52 -0
- cancan_microstack/assets/scripts/utils/monitor_service_management.sh +187 -0
- cancan_microstack/assets/scripts/utils/reset_postgres_volume.sh +68 -0
- cancan_microstack/assets/scripts/utils/test_async_operations.sh +141 -0
- cancan_microstack/assets/scripts/utils/verify_real_operations.sh +76 -0
- cancan_microstack/assets/service/Dockerfile +65 -0
- cancan_microstack/assets/www/adminops/assets/AppEmpty.vue_vue_type_script_setup_true_lang-BOKUurnM.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ConfigManage-DKV5YOUz.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ConfigManage-Y5bhy7wG.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ConsoleManage-8ljYvCW2.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ConsoleManage-BWpyqbuQ.css +1 -0
- cancan_microstack/assets/www/adminops/assets/DashboardNew-B9Nf1OPl.js +1 -0
- cancan_microstack/assets/www/adminops/assets/DashboardNew-DYWZKQ1V.css +1 -0
- cancan_microstack/assets/www/adminops/assets/LogSearch-CA0Jhe78.js +1 -0
- cancan_microstack/assets/www/adminops/assets/LogSearch-CCZfTNPF.css +1 -0
- cancan_microstack/assets/www/adminops/assets/LoginView-BId3kP3M.css +1 -0
- cancan_microstack/assets/www/adminops/assets/LoginView-BQZTV_Qy.js +1 -0
- cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-BdEYwqFq.js +1 -0
- cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-D-pASR8G.css +1 -0
- cancan_microstack/assets/www/adminops/assets/PageContainer-Byss-yUC.js +1 -0
- cancan_microstack/assets/www/adminops/assets/PageContainer-C3nSZwM7.css +1 -0
- cancan_microstack/assets/www/adminops/assets/RateLimitManage-BDI8jLpC.css +1 -0
- cancan_microstack/assets/www/adminops/assets/RateLimitManage-DJY4NiF-.js +1 -0
- cancan_microstack/assets/www/adminops/assets/RouteManage-DaUQ4QLw.css +1 -0
- cancan_microstack/assets/www/adminops/assets/RouteManage-w9XCU0UA.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceCard-BFzHe6Tw.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceCard-BJUhWnA-.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceDetail-Cw24WuKp.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceDetail-Yum47zdB.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceList-C7ryvbhE.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceList-Cgd01fUx.css +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceLogs-COpG9H0h.js +1 -0
- cancan_microstack/assets/www/adminops/assets/ServiceLogs-H_Alq0cf.css +1 -0
- cancan_microstack/assets/www/adminops/assets/StatsOverview-D0TwMQkA.js +39 -0
- cancan_microstack/assets/www/adminops/assets/StatsOverview-lqAN6pqM.css +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpBindView-CWlAmzFt.js +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpBindView-HoQC1lhx.css +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpVerifyView-BHN1VtX1.css +1 -0
- cancan_microstack/assets/www/adminops/assets/TotpVerifyView-D3w_lZk8.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowCenter-DU_mpIA0.css +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowCenter-i50rZyxN.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-CnHokPL9.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-DaZaZpLd.css +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowRuns-B09hK48c.js +1 -0
- cancan_microstack/assets/www/adminops/assets/WorkflowRuns-wGutKIIU.css +1 -0
- cancan_microstack/assets/www/adminops/assets/caddy-nnCKf8fG.js +1 -0
- cancan_microstack/assets/www/adminops/assets/format-Cuzxgna9.js +1 -0
- cancan_microstack/assets/www/adminops/assets/index-CiFlm8oc.js +64 -0
- cancan_microstack/assets/www/adminops/assets/index-UW0T1Dkc.css +1 -0
- cancan_microstack/assets/www/adminops/assets/service-BYlgGPs_.js +1 -0
- cancan_microstack/assets/www/adminops/assets/service-operation-6GzLw2Z1.js +1 -0
- cancan_microstack/assets/www/adminops/assets/style-CcIXnQ5y.css +1 -0
- cancan_microstack/assets/www/adminops/assets/style-lRnStdGu.js +39 -0
- cancan_microstack/assets/www/adminops/assets/useDebounce-BRlqfXqf.js +1 -0
- cancan_microstack/assets/www/adminops/assets/workflow-CUXs39Ac.js +1 -0
- cancan_microstack/assets/www/adminops/index.html +16 -0
- cancan_microstack/assets/www/adminops/vite.svg +1 -0
- cancan_microstack/cli/__init__.py +14 -0
- cancan_microstack/cli/__main__.py +9 -0
- cancan_microstack/cli/main.py +552 -0
- cancan_microstack/cmd/__init__.py +54 -0
- cancan_microstack/cmd/cancan/__init__.py +12 -0
- cancan_microstack/cmd/cancan/run.py +395 -0
- cancan_microstack/cmd/controllersrv/__init__.py +0 -0
- cancan_microstack/cmd/controllersrv/run.py +131 -0
- cancan_microstack/cmd/infrasrv/__init__.py +5 -0
- cancan_microstack/cmd/infrasrv/run.py +100 -0
- cancan_microstack/cmd/opsbffsrv/__init__.py +5 -0
- cancan_microstack/cmd/opsbffsrv/run.py +96 -0
- cancan_microstack/core/__init__.py +5 -0
- cancan_microstack/core/assets.py +123 -0
- cancan_microstack/core/compose_builder.py +102 -0
- cancan_microstack/core/doctor.py +152 -0
- cancan_microstack/core/microstack.py +71 -0
- cancan_microstack/core/runner.py +56 -0
- cancan_microstack/core/stack_manager.py +186 -0
- cancan_microstack/public/__init__.py +7 -0
- cancan_microstack/public/api/__init__.py +1 -0
- cancan_microstack/public/api/controllersrv_client.py +277 -0
- cancan_microstack/public/api/infrasrv_client.py +404 -0
- cancan_microstack/public/const/__init__.py +1 -0
- cancan_microstack/public/const/action_consts.py +18 -0
- cancan_microstack/public/const/app_consts.py +42 -0
- cancan_microstack/public/const/caddy_consts.py +22 -0
- cancan_microstack/public/const/controllersrv_consts.py +163 -0
- cancan_microstack/public/const/docker_consts.py +15 -0
- cancan_microstack/public/const/error.py +56 -0
- cancan_microstack/public/const/health_consts.py +52 -0
- cancan_microstack/public/const/hook_enums.py +56 -0
- cancan_microstack/public/const/logging_enums.py +13 -0
- cancan_microstack/public/const/metrics_enums.py +36 -0
- cancan_microstack/public/const/monitor_enums.py +26 -0
- cancan_microstack/public/const/operation_consts.py +53 -0
- cancan_microstack/public/const/opsbffsrv_error.py +92 -0
- cancan_microstack/public/const/overrides_consts.py +13 -0
- cancan_microstack/public/const/redis.py +17 -0
- cancan_microstack/public/const/service_consts.py +15 -0
- cancan_microstack/public/const/workflow_consts.py +65 -0
- cancan_microstack/public/error.py +41 -0
- cancan_microstack/public/logging/__init__.py +0 -0
- cancan_microstack/public/logging/initializer.py +109 -0
- cancan_microstack/public/logging/mq_handler.py +279 -0
- cancan_microstack/public/schemas/__init__.py +1 -0
- cancan_microstack/public/schemas/caddy/__init__.py +381 -0
- cancan_microstack/public/schemas/caddy/analysis.py +90 -0
- cancan_microstack/public/schemas/caddy/route.py +18 -0
- cancan_microstack/public/schemas/common.py +79 -0
- cancan_microstack/public/schemas/controllersrv/__init__.py +3 -0
- cancan_microstack/public/schemas/controllersrv/async_requests.py +30 -0
- cancan_microstack/public/schemas/controllersrv/compose_models.py +47 -0
- cancan_microstack/public/schemas/controllersrv/const.py +24 -0
- cancan_microstack/public/schemas/controllersrv/docker_models.py +45 -0
- cancan_microstack/public/schemas/controllersrv/docker_responses.py +104 -0
- cancan_microstack/public/schemas/controllersrv/requests.py +54 -0
- cancan_microstack/public/schemas/controllersrv/responses.py +124 -0
- cancan_microstack/public/schemas/controllersrv/task_models.py +102 -0
- cancan_microstack/public/schemas/controllersrv/validation.py +23 -0
- cancan_microstack/public/schemas/hook_metrics.py +124 -0
- cancan_microstack/public/schemas/hooks.py +39 -0
- cancan_microstack/public/schemas/infra/__init__.py +0 -0
- cancan_microstack/public/schemas/infra/cleanup.py +25 -0
- cancan_microstack/public/schemas/infra/container.py +74 -0
- cancan_microstack/public/schemas/infra/enums.py +135 -0
- cancan_microstack/public/schemas/infra/health_check.py +42 -0
- cancan_microstack/public/schemas/infra/hook_log.py +42 -0
- cancan_microstack/public/schemas/infra/operation.py +90 -0
- cancan_microstack/public/schemas/infra/overview.py +25 -0
- cancan_microstack/public/schemas/infra/push.py +33 -0
- cancan_microstack/public/schemas/infra/service_action_log.py +47 -0
- cancan_microstack/public/schemas/infra/service_config.py +10 -0
- cancan_microstack/public/schemas/infra/service_info.py +69 -0
- cancan_microstack/public/schemas/infra/service_instance.py +93 -0
- cancan_microstack/public/schemas/infra/service_management.py +152 -0
- cancan_microstack/public/schemas/infra/service_operation.py +79 -0
- cancan_microstack/public/schemas/infra/service_registry.py +158 -0
- cancan_microstack/public/schemas/infra/status_types.py +19 -0
- cancan_microstack/public/schemas/infra/workflow.py +566 -0
- cancan_microstack/public/schemas/logging/__init__.py +1 -0
- cancan_microstack/public/schemas/logging/log_event.py +121 -0
- cancan_microstack/public/schemas/opsbffsrv/__init__.py +1 -0
- cancan_microstack/public/schemas/opsbffsrv/async_ops.py +17 -0
- cancan_microstack/public/schemas/opsbffsrv/db_admin.py +147 -0
- cancan_microstack/public/schemas/opsbffsrv/db_init.py +48 -0
- cancan_microstack/public/schemas/opsbffsrv/service_config.py +89 -0
- cancan_microstack/public/schemas/opsbffsrv/service_logs.py +54 -0
- cancan_microstack/public/schemas/service_operation.py +24 -0
- cancan_microstack/public/schemas/service_registry.py +40 -0
- cancan_microstack/public/types/__init__.py +7 -0
- cancan_microstack/public/web/__init__.py +0 -0
- cancan_microstack/public/web/config_value.py +105 -0
- cancan_microstack/public/web/server.py +385 -0
- cancan_microstack/py.typed +0 -0
- cancan_microstack/runtime/__init__.py +0 -0
- cancan_microstack/runtime/compose_cmd.py +228 -0
- cancan_microstack/runtime/host_daemon.py +318 -0
- cancan_microstack/runtime/overrides.py +103 -0
- cancan_microstack/runtime/resources.py +25 -0
- cancan_microstack/runtime/workspace.py +94 -0
- cancan_microstack/services/__init__.py +0 -0
- cancan_microstack/services/controllersrv/__init__.py +8 -0
- cancan_microstack/services/controllersrv/application/__init__.py +0 -0
- cancan_microstack/services/controllersrv/application/docker_compose_app.py +427 -0
- cancan_microstack/services/controllersrv/conf/__init__.py +0 -0
- cancan_microstack/services/controllersrv/conf/config.py +76 -0
- cancan_microstack/services/controllersrv/conf/settings.py +54 -0
- cancan_microstack/services/controllersrv/domain/__init__.py +0 -0
- cancan_microstack/services/controllersrv/domain/docker_compose/__init__.py +0 -0
- cancan_microstack/services/controllersrv/domain/docker_compose/docker_compose_domain.py +278 -0
- cancan_microstack/services/controllersrv/domain/service_validator.py +327 -0
- cancan_microstack/services/controllersrv/domain/task/__init__.py +17 -0
- cancan_microstack/services/controllersrv/domain/task/task_queue.py +286 -0
- cancan_microstack/services/controllersrv/domain/task/task_worker.py +495 -0
- cancan_microstack/services/controllersrv/infrastructure/__init__.py +0 -0
- cancan_microstack/services/controllersrv/interface/__init__.py +0 -0
- cancan_microstack/services/controllersrv/interface/api/__init__.py +0 -0
- cancan_microstack/services/controllersrv/interface/api/docker_control_api.py +470 -0
- cancan_microstack/services/controllersrv/router.py +132 -0
- cancan_microstack/services/infrasrv/__init__.py +4 -0
- cancan_microstack/services/infrasrv/application/__init__.py +0 -0
- cancan_microstack/services/infrasrv/application/health_check_app.py +24 -0
- cancan_microstack/services/infrasrv/application/logging/__init__.py +1 -0
- cancan_microstack/services/infrasrv/application/logging/log_ingestion_service.py +183 -0
- cancan_microstack/services/infrasrv/application/service_config.py +22 -0
- cancan_microstack/services/infrasrv/application/service_logs_app.py +53 -0
- cancan_microstack/services/infrasrv/application/service_management_app.py +689 -0
- cancan_microstack/services/infrasrv/application/service_operation_tracker.py +251 -0
- cancan_microstack/services/infrasrv/application/service_registry.py +53 -0
- cancan_microstack/services/infrasrv/application/workflow/__init__.py +0 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_app.py +991 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_queue.py +302 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_tasks.py +46 -0
- cancan_microstack/services/infrasrv/application/workflow/workflow_worker_runtime.py +122 -0
- cancan_microstack/services/infrasrv/conf/__init__.py +0 -0
- cancan_microstack/services/infrasrv/conf/config.py +98 -0
- cancan_microstack/services/infrasrv/domain/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/health_check/__init__.py +3 -0
- cancan_microstack/services/infrasrv/domain/health_check/health_check_domain.py +576 -0
- cancan_microstack/services/infrasrv/domain/hooks/__init__.py +19 -0
- cancan_microstack/services/infrasrv/domain/hooks/builtin_hooks.py +308 -0
- cancan_microstack/services/infrasrv/domain/hooks/hook_registry.py +43 -0
- cancan_microstack/services/infrasrv/domain/hooks/hooks_log_utils.py +275 -0
- cancan_microstack/services/infrasrv/domain/hooks/init.py +17 -0
- cancan_microstack/services/infrasrv/domain/hooks/metrics.py +205 -0
- cancan_microstack/services/infrasrv/domain/hooks/pre_registration_hooks.py +490 -0
- cancan_microstack/services/infrasrv/domain/registry/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/registry/service_registry.py +509 -0
- cancan_microstack/services/infrasrv/domain/service_config/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/service_config/service_config.py +50 -0
- cancan_microstack/services/infrasrv/domain/service_logs/__init__.py +0 -0
- cancan_microstack/services/infrasrv/domain/service_logs/service_logs_domain.py +51 -0
- cancan_microstack/services/infrasrv/domain/workflow/__init__.py +4 -0
- cancan_microstack/services/infrasrv/domain/workflow/engine.py +159 -0
- cancan_microstack/services/infrasrv/domain/workflow/node_handlers.py +509 -0
- cancan_microstack/services/infrasrv/domain/workflow/workflow_domain.py +164 -0
- cancan_microstack/services/infrasrv/infrastructure/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/api/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/api/controllersrv_api.py +165 -0
- cancan_microstack/services/infrasrv/infrastructure/cache/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/cache/service_registry_cache.py +174 -0
- cancan_microstack/services/infrasrv/infrastructure/db/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/execution_log_tbl.py +53 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/node_instance_tbl.py +55 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_config_tbl.py +30 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_info_tbl.py +59 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_instance_tbl.py +88 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/service_operation_tbl.py +73 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_tbl.py +55 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_version_tbl.py +43 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_engine_alert_tbl.py +57 -0
- cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_run_tbl.py +56 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/__init__.py +0 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_action_log_op.py +239 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config.py +80 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config_manager.py +198 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_info_op.py +297 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_instance_op.py +688 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_operation_op.py +387 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/service_registry.py +124 -0
- cancan_microstack/services/infrasrv/infrastructure/db/operate/workflow_op.py +804 -0
- cancan_microstack/services/infrasrv/infrastructure/ddl_manager.py +31 -0
- cancan_microstack/services/infrasrv/infrastructure/mongo/__init__.py +1 -0
- cancan_microstack/services/infrasrv/infrastructure/mongo/log_repository.py +129 -0
- cancan_microstack/services/infrasrv/interface/__init__.py +0 -0
- cancan_microstack/services/infrasrv/interface/api/__init__.py +0 -0
- cancan_microstack/services/infrasrv/interface/api/health_check_api.py +29 -0
- cancan_microstack/services/infrasrv/interface/api/hooks.py +284 -0
- cancan_microstack/services/infrasrv/interface/api/internal.py +49 -0
- cancan_microstack/services/infrasrv/interface/api/internal_instance_api.py +265 -0
- cancan_microstack/services/infrasrv/interface/api/internal_operation_api.py +206 -0
- cancan_microstack/services/infrasrv/interface/api/service_config.py +50 -0
- cancan_microstack/services/infrasrv/interface/api/service_logs_api.py +49 -0
- cancan_microstack/services/infrasrv/interface/api/service_management_api.py +113 -0
- cancan_microstack/services/infrasrv/interface/api/service_registry.py +117 -0
- cancan_microstack/services/infrasrv/interface/api/workflow_api.py +303 -0
- cancan_microstack/services/infrasrv/interface/schedule/__init__.py +0 -0
- cancan_microstack/services/infrasrv/interface/schedule/cleanup.py +13 -0
- cancan_microstack/services/infrasrv/interface/schedule/health_check.py +27 -0
- cancan_microstack/services/infrasrv/interface/schedule/log_cleanup.py +26 -0
- cancan_microstack/services/infrasrv/interface/schedule/operation_tracker.py +25 -0
- cancan_microstack/services/infrasrv/interface/schedule/scheduler.py +39 -0
- cancan_microstack/services/infrasrv/interface/schedule/workflow_scheduler.py +115 -0
- cancan_microstack/services/infrasrv/router.py +341 -0
- cancan_microstack/services/opsbffsrv/__init__.py +4 -0
- cancan_microstack/services/opsbffsrv/application/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/application/async_operation_app.py +150 -0
- cancan_microstack/services/opsbffsrv/application/auth_app.py +285 -0
- cancan_microstack/services/opsbffsrv/application/caddy/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/application/caddy/access_log_analysis_app.py +344 -0
- cancan_microstack/services/opsbffsrv/application/caddy/access_log_ingestion_service.py +169 -0
- cancan_microstack/services/opsbffsrv/application/caddy/certificate_management_app.py +355 -0
- cancan_microstack/services/opsbffsrv/application/caddy/rate_limit_management_app.py +496 -0
- cancan_microstack/services/opsbffsrv/application/caddy/route_management_app.py +401 -0
- cancan_microstack/services/opsbffsrv/application/caddy/stats_aggregation_app.py +364 -0
- cancan_microstack/services/opsbffsrv/application/db_admin_app.py +103 -0
- cancan_microstack/services/opsbffsrv/application/db_init_app.py +283 -0
- cancan_microstack/services/opsbffsrv/application/logging/__init__.py +1 -0
- cancan_microstack/services/opsbffsrv/application/logging/log_query_app.py +28 -0
- cancan_microstack/services/opsbffsrv/application/service_config.py +158 -0
- cancan_microstack/services/opsbffsrv/application/service_logs_app.py +74 -0
- cancan_microstack/services/opsbffsrv/application/service_registry.py +36 -0
- cancan_microstack/services/opsbffsrv/application/workflow_ops_app.py +730 -0
- cancan_microstack/services/opsbffsrv/conf/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/conf/config.py +224 -0
- cancan_microstack/services/opsbffsrv/domain/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/auth/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/auth/admin_init.py +38 -0
- cancan_microstack/services/opsbffsrv/domain/auth/auth_domain.py +108 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/access_log_analysis.py +358 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/certificate_management.py +325 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/default_routes.py +53 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/rate_limit_management.py +308 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/route_management.py +279 -0
- cancan_microstack/services/opsbffsrv/domain/caddy/stats_aggregation.py +654 -0
- cancan_microstack/services/opsbffsrv/domain/db_admin/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/db_admin/db_admin_domain.py +118 -0
- cancan_microstack/services/opsbffsrv/domain/db_init/__init__.py +3 -0
- cancan_microstack/services/opsbffsrv/domain/db_init/db_init_domain.py +358 -0
- cancan_microstack/services/opsbffsrv/domain/logging/__init__.py +1 -0
- cancan_microstack/services/opsbffsrv/domain/logging/log_query_domain.py +99 -0
- cancan_microstack/services/opsbffsrv/domain/service_config/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/service_config/service_config.py +81 -0
- cancan_microstack/services/opsbffsrv/domain/service_registry/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/domain/service_registry/service_registry.py +292 -0
- cancan_microstack/services/opsbffsrv/infrastructure/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/api/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/api/infrasrv_api.py +242 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/captcha_service.py +67 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/password_service.py +12 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/redis_store.py +131 -0
- cancan_microstack/services/opsbffsrv/infrastructure/auth/totp_service.py +59 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/access_log_parser.py +307 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/admin_api_client.py +678 -0
- cancan_microstack/services/opsbffsrv/infrastructure/caddy/ip_geo_locator.py +176 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/admin_user_tbl.py +33 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_access_log_tbl.py +90 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_certificate_tbl.py +65 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_rate_limit_tbl.py +69 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_route_tbl.py +66 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_stats_tbl.py +78 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_config_tbl.py +30 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_info_tbl.py +51 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_instance_tbl.py +68 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/admin_user_operate.py +59 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_access_log.py +531 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_certificate.py +451 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_rate_limit.py +360 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_route.py +271 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_stats.py +343 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_action_log_op.py +57 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_config.py +86 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_info_op.py +79 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_instance.py +58 -0
- cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_registry.py +138 -0
- cancan_microstack/services/opsbffsrv/infrastructure/ddl_manager.py +31 -0
- cancan_microstack/services/opsbffsrv/infrastructure/mongo/__init__.py +1 -0
- cancan_microstack/services/opsbffsrv/infrastructure/mongo/log_query_repository.py +87 -0
- cancan_microstack/services/opsbffsrv/interface/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/interface/api/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/interface/api/async_operation_api.py +137 -0
- cancan_microstack/services/opsbffsrv/interface/api/auth_api.py +113 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/__init__.py +3 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/access_log_api.py +174 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/certificate_api.py +235 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/rate_limit_api.py +302 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/route_api.py +250 -0
- cancan_microstack/services/opsbffsrv/interface/api/caddy/stats_api.py +243 -0
- cancan_microstack/services/opsbffsrv/interface/api/db_admin_api.py +62 -0
- cancan_microstack/services/opsbffsrv/interface/api/db_init_api.py +109 -0
- cancan_microstack/services/opsbffsrv/interface/api/instance_management_api.py +165 -0
- cancan_microstack/services/opsbffsrv/interface/api/log_query_api.py +41 -0
- cancan_microstack/services/opsbffsrv/interface/api/mongo_express_proxy_api.py +181 -0
- cancan_microstack/services/opsbffsrv/interface/api/pgweb_proxy_api.py +154 -0
- cancan_microstack/services/opsbffsrv/interface/api/rabbitmq_mgmt_proxy_api.py +518 -0
- cancan_microstack/services/opsbffsrv/interface/api/redis_commander_proxy_api.py +133 -0
- cancan_microstack/services/opsbffsrv/interface/api/service_config.py +146 -0
- cancan_microstack/services/opsbffsrv/interface/api/service_logs_api.py +81 -0
- cancan_microstack/services/opsbffsrv/interface/api/service_registry.py +66 -0
- cancan_microstack/services/opsbffsrv/interface/api/workflow_ops_api.py +413 -0
- cancan_microstack/services/opsbffsrv/interface/middleware/__init__.py +0 -0
- cancan_microstack/services/opsbffsrv/interface/middleware/auth_middleware.py +52 -0
- cancan_microstack/services/opsbffsrv/router.py +901 -0
- cancan_microstack/utils/__init__.py +1 -0
- cancan_microstack/utils/container_env.py +218 -0
- cancan_microstack-0.0.1.dist-info/METADATA +155 -0
- cancan_microstack-0.0.1.dist-info/RECORD +440 -0
- cancan_microstack-0.0.1.dist-info/WHEEL +5 -0
- cancan_microstack-0.0.1.dist-info/entry_points.txt +2 -0
- cancan_microstack-0.0.1.dist-info/licenses/LICENSE +21 -0
- cancan_microstack-0.0.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE caddy_certificate_tbl
|
|
4
|
+
(
|
|
5
|
+
id BIGSERIAL PRIMARY KEY,
|
|
6
|
+
|
|
7
|
+
-- 域名信息
|
|
8
|
+
domain VARCHAR(255) NOT NULL,
|
|
9
|
+
alt_domains TEXT[],
|
|
10
|
+
|
|
11
|
+
-- 证书信息
|
|
12
|
+
certificate_pem TEXT,
|
|
13
|
+
private_key_pem TEXT,
|
|
14
|
+
issuer VARCHAR(255),
|
|
15
|
+
|
|
16
|
+
-- 证书时间
|
|
17
|
+
issued_at TIMESTAMP WITH TIME ZONE,
|
|
18
|
+
expires_at TIMESTAMP WITH TIME ZONE,
|
|
19
|
+
auto_renew BOOLEAN DEFAULT true,
|
|
20
|
+
renew_before_days INTEGER DEFAULT 30,
|
|
21
|
+
|
|
22
|
+
-- 证书状态
|
|
23
|
+
status VARCHAR(50) DEFAULT 'pending',
|
|
24
|
+
last_renew_attempt TIMESTAMP WITH TIME ZONE,
|
|
25
|
+
last_renew_success TIMESTAMP WITH TIME ZONE,
|
|
26
|
+
renew_error TEXT,
|
|
27
|
+
|
|
28
|
+
-- ACME 配置
|
|
29
|
+
acme_provider VARCHAR(100) DEFAULT 'letsencrypt',
|
|
30
|
+
acme_email VARCHAR(255),
|
|
31
|
+
acme_challenge_type VARCHAR(50) DEFAULT 'http-01',
|
|
32
|
+
|
|
33
|
+
-- 元数据
|
|
34
|
+
certificate_metadata JSONB DEFAULT '{}',
|
|
35
|
+
|
|
36
|
+
-- 标准字段
|
|
37
|
+
flag SMALLINT DEFAULT 0,
|
|
38
|
+
created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
39
|
+
update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
-- 唯一索引
|
|
43
|
+
CREATE UNIQUE INDEX uk_caddy_certificate_tbl_domain ON caddy_certificate_tbl (domain);
|
|
44
|
+
|
|
45
|
+
-- 提升按更新时间查询效率
|
|
46
|
+
CREATE INDEX idx_caddy_certificate_tbl_update_time ON caddy_certificate_tbl (update_time);
|
|
47
|
+
|
|
48
|
+
-- 其他业务索引
|
|
49
|
+
CREATE INDEX idx_caddy_certificate_tbl_status ON caddy_certificate_tbl (status);
|
|
50
|
+
CREATE INDEX idx_caddy_certificate_tbl_expires_at ON caddy_certificate_tbl (expires_at);
|
|
51
|
+
|
|
52
|
+
-- 自动更新时间戳触发器
|
|
53
|
+
CREATE TRIGGER t_upd_caddy_certificate_tbl
|
|
54
|
+
BEFORE UPDATE
|
|
55
|
+
ON caddy_certificate_tbl
|
|
56
|
+
FOR EACH ROW
|
|
57
|
+
EXECUTE PROCEDURE upd_timestamp();
|
|
58
|
+
|
|
59
|
+
COMMIT;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE caddy_rate_limit_tbl
|
|
4
|
+
(
|
|
5
|
+
id BIGSERIAL PRIMARY KEY,
|
|
6
|
+
|
|
7
|
+
-- 限流规则基本信息
|
|
8
|
+
rule_name VARCHAR(100) NOT NULL,
|
|
9
|
+
description TEXT,
|
|
10
|
+
|
|
11
|
+
-- 匹配条件
|
|
12
|
+
match_type VARCHAR(50) NOT NULL,
|
|
13
|
+
match_pattern VARCHAR(500),
|
|
14
|
+
match_domain VARCHAR(255),
|
|
15
|
+
|
|
16
|
+
-- 限流配置
|
|
17
|
+
limit_type VARCHAR(50) NOT NULL DEFAULT 'request',
|
|
18
|
+
limit_value INTEGER NOT NULL,
|
|
19
|
+
limit_window INTEGER NOT NULL DEFAULT 60,
|
|
20
|
+
limit_key VARCHAR(50) DEFAULT 'ip',
|
|
21
|
+
|
|
22
|
+
-- 突发流量配置
|
|
23
|
+
burst_size INTEGER DEFAULT 0,
|
|
24
|
+
|
|
25
|
+
-- 响应配置
|
|
26
|
+
block_status_code INTEGER DEFAULT 429,
|
|
27
|
+
block_message VARCHAR(500) DEFAULT 'Too Many Requests',
|
|
28
|
+
|
|
29
|
+
-- 白名单/黑名单
|
|
30
|
+
whitelist_ips TEXT[],
|
|
31
|
+
blacklist_ips TEXT[],
|
|
32
|
+
|
|
33
|
+
-- 状态和优先级
|
|
34
|
+
is_enabled BOOLEAN DEFAULT true,
|
|
35
|
+
priority INTEGER DEFAULT 100,
|
|
36
|
+
|
|
37
|
+
-- 元数据
|
|
38
|
+
rule_metadata JSONB DEFAULT '{}',
|
|
39
|
+
|
|
40
|
+
-- 标准字段
|
|
41
|
+
flag SMALLINT DEFAULT 0,
|
|
42
|
+
created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
43
|
+
update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
-- 唯一索引
|
|
47
|
+
CREATE UNIQUE INDEX uk_caddy_rate_limit_tbl_rule_name ON caddy_rate_limit_tbl (rule_name);
|
|
48
|
+
|
|
49
|
+
-- 提升按更新时间查询效率
|
|
50
|
+
CREATE INDEX idx_caddy_rate_limit_tbl_update_time ON caddy_rate_limit_tbl (update_time);
|
|
51
|
+
|
|
52
|
+
-- 其他业务索引
|
|
53
|
+
CREATE INDEX idx_caddy_rate_limit_tbl_match_type ON caddy_rate_limit_tbl (match_type);
|
|
54
|
+
CREATE INDEX idx_caddy_rate_limit_tbl_enabled ON caddy_rate_limit_tbl (is_enabled);
|
|
55
|
+
CREATE INDEX idx_caddy_rate_limit_tbl_priority ON caddy_rate_limit_tbl (priority);
|
|
56
|
+
|
|
57
|
+
-- 自动更新时间戳触发器
|
|
58
|
+
CREATE TRIGGER t_upd_caddy_rate_limit_tbl
|
|
59
|
+
BEFORE UPDATE
|
|
60
|
+
ON caddy_rate_limit_tbl
|
|
61
|
+
FOR EACH ROW
|
|
62
|
+
EXECUTE PROCEDURE upd_timestamp();
|
|
63
|
+
|
|
64
|
+
COMMIT;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE caddy_route_tbl
|
|
4
|
+
(
|
|
5
|
+
id BIGSERIAL PRIMARY KEY,
|
|
6
|
+
|
|
7
|
+
-- 路由基本信息
|
|
8
|
+
route_name VARCHAR(100) NOT NULL,
|
|
9
|
+
domain VARCHAR(255) NOT NULL,
|
|
10
|
+
path_pattern VARCHAR(500) NOT NULL,
|
|
11
|
+
|
|
12
|
+
-- 上游服务配置
|
|
13
|
+
upstream_service VARCHAR(100) NOT NULL,
|
|
14
|
+
upstream_host VARCHAR(100) NOT NULL,
|
|
15
|
+
upstream_port INTEGER NOT NULL,
|
|
16
|
+
|
|
17
|
+
-- 路由选项
|
|
18
|
+
strip_path_prefix VARCHAR(200),
|
|
19
|
+
add_path_prefix VARCHAR(200),
|
|
20
|
+
enable_https BOOLEAN DEFAULT true,
|
|
21
|
+
force_https BOOLEAN DEFAULT true,
|
|
22
|
+
|
|
23
|
+
-- WAF 配置
|
|
24
|
+
enable_waf BOOLEAN DEFAULT true,
|
|
25
|
+
waf_rule_set VARCHAR(50) DEFAULT 'default',
|
|
26
|
+
|
|
27
|
+
-- 负载均衡配置
|
|
28
|
+
load_balance_strategy VARCHAR(50) DEFAULT 'round_robin',
|
|
29
|
+
health_check_path VARCHAR(200),
|
|
30
|
+
health_check_interval INTEGER DEFAULT 30,
|
|
31
|
+
|
|
32
|
+
-- 状态和元数据
|
|
33
|
+
is_enabled BOOLEAN DEFAULT true,
|
|
34
|
+
priority INTEGER DEFAULT 100,
|
|
35
|
+
route_metadata JSONB DEFAULT '{}',
|
|
36
|
+
description TEXT,
|
|
37
|
+
|
|
38
|
+
-- 标准字段
|
|
39
|
+
flag SMALLINT DEFAULT 0,
|
|
40
|
+
created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
41
|
+
update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
-- 唯一索引
|
|
45
|
+
CREATE UNIQUE INDEX uk_caddy_route_tbl_route_name ON caddy_route_tbl (route_name);
|
|
46
|
+
|
|
47
|
+
-- 提升按更新时间查询效率
|
|
48
|
+
CREATE INDEX idx_caddy_route_tbl_update_time ON caddy_route_tbl (update_time);
|
|
49
|
+
|
|
50
|
+
-- 其他业务索引
|
|
51
|
+
CREATE INDEX idx_caddy_route_tbl_domain ON caddy_route_tbl (domain);
|
|
52
|
+
CREATE INDEX idx_caddy_route_tbl_upstream ON caddy_route_tbl (upstream_service);
|
|
53
|
+
CREATE INDEX idx_caddy_route_tbl_enabled ON caddy_route_tbl (is_enabled);
|
|
54
|
+
CREATE INDEX idx_caddy_route_tbl_priority ON caddy_route_tbl (priority);
|
|
55
|
+
|
|
56
|
+
-- 自动更新时间戳触发器
|
|
57
|
+
CREATE TRIGGER t_upd_caddy_route_tbl
|
|
58
|
+
BEFORE UPDATE
|
|
59
|
+
ON caddy_route_tbl
|
|
60
|
+
FOR EACH ROW
|
|
61
|
+
EXECUTE PROCEDURE upd_timestamp();
|
|
62
|
+
|
|
63
|
+
COMMIT;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE caddy_stats_tbl
|
|
4
|
+
(
|
|
5
|
+
id BIGSERIAL PRIMARY KEY,
|
|
6
|
+
|
|
7
|
+
-- 时间维度
|
|
8
|
+
stat_time TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
9
|
+
stat_period VARCHAR(20) NOT NULL,
|
|
10
|
+
|
|
11
|
+
-- 维度信息
|
|
12
|
+
dimension_type VARCHAR(50) NOT NULL,
|
|
13
|
+
dimension_value VARCHAR(255),
|
|
14
|
+
|
|
15
|
+
-- 请求统计
|
|
16
|
+
total_requests BIGINT DEFAULT 0,
|
|
17
|
+
success_requests BIGINT DEFAULT 0,
|
|
18
|
+
client_error_requests BIGINT DEFAULT 0,
|
|
19
|
+
server_error_requests BIGINT DEFAULT 0,
|
|
20
|
+
|
|
21
|
+
-- 流量统计
|
|
22
|
+
total_bytes_sent BIGINT DEFAULT 0,
|
|
23
|
+
total_bytes_received BIGINT DEFAULT 0,
|
|
24
|
+
|
|
25
|
+
-- 性能统计
|
|
26
|
+
avg_response_time INTEGER,
|
|
27
|
+
min_response_time INTEGER,
|
|
28
|
+
max_response_time INTEGER,
|
|
29
|
+
p50_response_time INTEGER,
|
|
30
|
+
p95_response_time INTEGER,
|
|
31
|
+
p99_response_time INTEGER,
|
|
32
|
+
|
|
33
|
+
-- WAF 统计
|
|
34
|
+
waf_blocked_requests BIGINT DEFAULT 0,
|
|
35
|
+
waf_logged_requests BIGINT DEFAULT 0,
|
|
36
|
+
|
|
37
|
+
-- 限流统计
|
|
38
|
+
rate_limited_requests BIGINT DEFAULT 0,
|
|
39
|
+
|
|
40
|
+
-- TLS 统计
|
|
41
|
+
tls_requests BIGINT DEFAULT 0,
|
|
42
|
+
non_tls_requests BIGINT DEFAULT 0,
|
|
43
|
+
|
|
44
|
+
-- 唯一访客统计
|
|
45
|
+
unique_ips INTEGER DEFAULT 0,
|
|
46
|
+
unique_user_agents INTEGER DEFAULT 0,
|
|
47
|
+
|
|
48
|
+
-- 元数据
|
|
49
|
+
stats_metadata JSONB DEFAULT '{}',
|
|
50
|
+
|
|
51
|
+
-- 标准字段
|
|
52
|
+
flag SMALLINT DEFAULT 0,
|
|
53
|
+
created_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
54
|
+
update_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
-- 唯一索引(防止重复统计)
|
|
58
|
+
CREATE UNIQUE INDEX uk_caddy_stats_tbl_unique ON caddy_stats_tbl (
|
|
59
|
+
stat_time, stat_period, dimension_type, COALESCE(dimension_value, '')
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
-- 提升按更新时间查询效率
|
|
63
|
+
CREATE INDEX idx_caddy_stats_tbl_update_time ON caddy_stats_tbl (update_time);
|
|
64
|
+
|
|
65
|
+
-- 其他业务索引
|
|
66
|
+
CREATE INDEX idx_caddy_stats_tbl_time ON caddy_stats_tbl (stat_time DESC);
|
|
67
|
+
CREATE INDEX idx_caddy_stats_tbl_period ON caddy_stats_tbl (stat_period);
|
|
68
|
+
CREATE INDEX idx_caddy_stats_tbl_dimension ON caddy_stats_tbl (dimension_type, dimension_value);
|
|
69
|
+
|
|
70
|
+
-- 自动更新时间戳触发器
|
|
71
|
+
CREATE TRIGGER t_upd_caddy_stats_tbl
|
|
72
|
+
BEFORE UPDATE
|
|
73
|
+
ON caddy_stats_tbl
|
|
74
|
+
FOR EACH ROW
|
|
75
|
+
EXECUTE PROCEDURE upd_timestamp();
|
|
76
|
+
|
|
77
|
+
COMMIT;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
BEGIN;
|
|
2
|
+
|
|
3
|
+
CREATE OR REPLACE FUNCTION upd_timestamp() RETURNS TRIGGER AS
|
|
4
|
+
$$
|
|
5
|
+
BEGIN
|
|
6
|
+
NEW.update_time = CURRENT_TIMESTAMP;
|
|
7
|
+
RETURN NEW;
|
|
8
|
+
END
|
|
9
|
+
$$
|
|
10
|
+
LANGUAGE plpgsql;
|
|
11
|
+
|
|
12
|
+
CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS
|
|
13
|
+
$$
|
|
14
|
+
BEGIN
|
|
15
|
+
NEW.update_time = CURRENT_TIMESTAMP;
|
|
16
|
+
RETURN NEW;
|
|
17
|
+
END
|
|
18
|
+
$$
|
|
19
|
+
LANGUAGE plpgsql;
|
|
20
|
+
|
|
21
|
+
COMMIT;
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
# 通用 Python 服务镜像设置
|
|
2
|
+
x-python-service-image: &python_service_image cancan_python_service:latest
|
|
3
|
+
x-python-service-build: &python_service_build
|
|
4
|
+
context: ./builds/service
|
|
5
|
+
dockerfile: Dockerfile
|
|
6
|
+
args:
|
|
7
|
+
# Injected automatically by the cancan CLI (os.environ CANCAN_VERSION = package version).
|
|
8
|
+
CANCAN_VERSION: "${CANCAN_VERSION:?CANCAN_VERSION required — run via the cancan CLI (cancan stack up / cancan compose build)}"
|
|
9
|
+
CANCAN_PIP_SPEC: "${CANCAN_PIP_SPEC:-}"
|
|
10
|
+
PIP_INDEX_URL: "${PIP_INDEX_URL:-}"
|
|
11
|
+
|
|
12
|
+
# ============================================
|
|
13
|
+
# 基础设施 Docker Compose 配置
|
|
14
|
+
# 包含: Caddy, PostgreSQL, Redis, infrasrv, opsbffsrv
|
|
15
|
+
# 这些服务属于基础框架,一般不需要频繁调整
|
|
16
|
+
# ============================================
|
|
17
|
+
|
|
18
|
+
# 自定义网络 - 所有服务使用相同网络
|
|
19
|
+
# 通过 CANCAN_STACK_PREFIX 环境变量隔离不同的 Podman/Docker 栈
|
|
20
|
+
networks:
|
|
21
|
+
app_network:
|
|
22
|
+
driver: bridge
|
|
23
|
+
# 不指定 name,让 compose 使用项目级别的网络名,避免与已有网络冲突。
|
|
24
|
+
# Do not set a fixed network name; let Compose create a project-scoped network to avoid collisions.
|
|
25
|
+
|
|
26
|
+
# 命名数据卷 - 用于持久化存储
|
|
27
|
+
volumes:
|
|
28
|
+
postgres_data:
|
|
29
|
+
name: ${CANCAN_STACK_PREFIX:-cancan}_postgres_data
|
|
30
|
+
redis_data:
|
|
31
|
+
name: ${CANCAN_STACK_PREFIX:-cancan}_redis_data
|
|
32
|
+
caddy_data:
|
|
33
|
+
name: ${CANCAN_STACK_PREFIX:-cancan}_caddy_data
|
|
34
|
+
caddy_config:
|
|
35
|
+
name: ${CANCAN_STACK_PREFIX:-cancan}_caddy_config
|
|
36
|
+
rabbitmq_data:
|
|
37
|
+
name: ${CANCAN_STACK_PREFIX:-cancan}_rabbitmq_data
|
|
38
|
+
mongo_data:
|
|
39
|
+
name: ${CANCAN_STACK_PREFIX:-cancan}_mongo_data
|
|
40
|
+
|
|
41
|
+
services:
|
|
42
|
+
# ==========================================
|
|
43
|
+
# Caddy - 反向代理和 WAF (带 Coraza WAF)
|
|
44
|
+
# ==========================================
|
|
45
|
+
caddy.internal:
|
|
46
|
+
build:
|
|
47
|
+
context: ./builds/caddy
|
|
48
|
+
dockerfile: Dockerfile
|
|
49
|
+
args:
|
|
50
|
+
GOPROXY: ${CADDY_GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct}
|
|
51
|
+
GOSUMDB: ${CADDY_GOSUMDB:-sum.golang.google.cn}
|
|
52
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_caddy
|
|
53
|
+
hostname: caddy.internal
|
|
54
|
+
ports:
|
|
55
|
+
# - "80:80" # HTTP
|
|
56
|
+
# - "443:443" # HTTPS
|
|
57
|
+
- "8080:8080" # 本地开发访问(生产环境会被防火墙过滤)
|
|
58
|
+
volumes:
|
|
59
|
+
- ./builds/caddy/Caddyfile:/etc/caddy/Caddyfile
|
|
60
|
+
- caddy_data:/data
|
|
61
|
+
- caddy_config:/config
|
|
62
|
+
- ./builds/caddy/logs:/var/log/caddy
|
|
63
|
+
- ./builds/caddy/geoip:/usr/share/GeoIP # GeoLite2 数据库
|
|
64
|
+
- ./builds/caddy/waf:/etc/caddy/waf # Coraza WAF 配置和规则
|
|
65
|
+
- ./builds/caddy/www:/srv/www:ro # 静态站点(adminops 等)/ Static sites (adminops, etc.)
|
|
66
|
+
networks:
|
|
67
|
+
app_network:
|
|
68
|
+
aliases:
|
|
69
|
+
- caddy.internal # Podman DNS 别名
|
|
70
|
+
environment:
|
|
71
|
+
- TZ=Asia/Shanghai
|
|
72
|
+
# 注意:Podman 5.6.2 健康检查存在兼容性问题,但 Docker 正常
|
|
73
|
+
# Caddy 服务已验证正常运行,Admin API 可访问 http://localhost:2019/config/
|
|
74
|
+
healthcheck:
|
|
75
|
+
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:2019/config/"]
|
|
76
|
+
interval: 30s
|
|
77
|
+
timeout: 10s
|
|
78
|
+
retries: 3
|
|
79
|
+
start_period: 10s
|
|
80
|
+
restart: unless-stopped
|
|
81
|
+
# 优雅关闭配置
|
|
82
|
+
stop_signal: SIGTERM
|
|
83
|
+
stop_grace_period: 30s
|
|
84
|
+
|
|
85
|
+
# ==========================================
|
|
86
|
+
# PostgreSQL - 主数据库
|
|
87
|
+
# ==========================================
|
|
88
|
+
postgres.internal:
|
|
89
|
+
image: postgres:18
|
|
90
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_postgres
|
|
91
|
+
hostname: postgres.internal
|
|
92
|
+
environment:
|
|
93
|
+
POSTGRES_USER: postgres
|
|
94
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres123}
|
|
95
|
+
POSTGRES_DB: main
|
|
96
|
+
TZ: Asia/Shanghai
|
|
97
|
+
# PG 18+ 建议挂载到 /var/lib/postgresql,数据会自动放在子目录
|
|
98
|
+
PGDATA: /var/lib/postgresql/data
|
|
99
|
+
# 端口映射:支持宿主机访问(out-pod 模式)
|
|
100
|
+
ports:
|
|
101
|
+
- "25432:5432" # 宿主机可通过 localhost:5432 访问
|
|
102
|
+
volumes:
|
|
103
|
+
- postgres_data:/var/lib/postgresql # 修改挂载点以兼容 PG 18+
|
|
104
|
+
- ./ddl:/docker-entrypoint-initdb.d
|
|
105
|
+
networks:
|
|
106
|
+
app_network:
|
|
107
|
+
aliases:
|
|
108
|
+
- postgres.internal # Podman DNS 别名
|
|
109
|
+
healthcheck:
|
|
110
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
111
|
+
interval: 10s
|
|
112
|
+
timeout: 5s
|
|
113
|
+
retries: 5
|
|
114
|
+
restart: unless-stopped
|
|
115
|
+
# 优雅关闭配置
|
|
116
|
+
stop_signal: SIGTERM
|
|
117
|
+
stop_grace_period: 60s
|
|
118
|
+
|
|
119
|
+
# ==========================================
|
|
120
|
+
# Redis - 缓存和消息队列
|
|
121
|
+
# ==========================================
|
|
122
|
+
redis.internal:
|
|
123
|
+
image: redis:8.4-alpine
|
|
124
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_redis
|
|
125
|
+
hostname: redis.internal
|
|
126
|
+
# 端口映射:支持宿主机访问(out-pod 模式)
|
|
127
|
+
ports:
|
|
128
|
+
- "26379:6379" # 宿主机可通过 localhost:6379 访问
|
|
129
|
+
volumes:
|
|
130
|
+
- redis_data:/data # 使用命名卷
|
|
131
|
+
networks:
|
|
132
|
+
app_network:
|
|
133
|
+
aliases:
|
|
134
|
+
- redis.internal # Podman DNS 别名
|
|
135
|
+
healthcheck:
|
|
136
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
137
|
+
interval: 10s
|
|
138
|
+
timeout: 3s
|
|
139
|
+
retries: 5
|
|
140
|
+
restart: unless-stopped
|
|
141
|
+
command: redis-server --appendonly yes
|
|
142
|
+
# 优雅关闭配置
|
|
143
|
+
stop_signal: SIGTERM
|
|
144
|
+
stop_grace_period: 30s
|
|
145
|
+
|
|
146
|
+
# ==========================================
|
|
147
|
+
# RabbitMQ - 消息队列 + Management Plugin
|
|
148
|
+
# ==========================================
|
|
149
|
+
rabbitmq.internal:
|
|
150
|
+
image: rabbitmq:4-management
|
|
151
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_rabbitmq
|
|
152
|
+
hostname: rabbitmq.internal
|
|
153
|
+
environment:
|
|
154
|
+
- RABBITMQ_DEFAULT_USER=${RABBITMQ_USERNAME:-admin}
|
|
155
|
+
- RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD:-admin123}
|
|
156
|
+
- TZ=Asia/Shanghai
|
|
157
|
+
ports:
|
|
158
|
+
- "35672:5672"
|
|
159
|
+
- "35673:15672"
|
|
160
|
+
expose:
|
|
161
|
+
- "5672"
|
|
162
|
+
- "15672"
|
|
163
|
+
volumes:
|
|
164
|
+
- rabbitmq_data:/var/lib/rabbitmq
|
|
165
|
+
networks:
|
|
166
|
+
app_network:
|
|
167
|
+
aliases:
|
|
168
|
+
- rabbitmq.internal
|
|
169
|
+
healthcheck:
|
|
170
|
+
test: ["CMD-SHELL", "rabbitmq-diagnostics -q status"]
|
|
171
|
+
interval: 30s
|
|
172
|
+
timeout: 10s
|
|
173
|
+
retries: 5
|
|
174
|
+
start_period: 15s
|
|
175
|
+
restart: unless-stopped
|
|
176
|
+
stop_signal: SIGTERM
|
|
177
|
+
stop_grace_period: 30s
|
|
178
|
+
|
|
179
|
+
# ==========================================
|
|
180
|
+
# MongoDB - 日志存储
|
|
181
|
+
# ==========================================
|
|
182
|
+
mongo.internal:
|
|
183
|
+
image: mongo:7.0
|
|
184
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_mongo
|
|
185
|
+
hostname: mongo.internal
|
|
186
|
+
environment:
|
|
187
|
+
- MONGO_INITDB_ROOT_USERNAME=admin
|
|
188
|
+
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD:-admin123}
|
|
189
|
+
- TZ=Asia/Shanghai
|
|
190
|
+
ports:
|
|
191
|
+
- "27017:27017"
|
|
192
|
+
expose:
|
|
193
|
+
- "27017"
|
|
194
|
+
volumes:
|
|
195
|
+
- mongo_data:/data/db
|
|
196
|
+
networks:
|
|
197
|
+
app_network:
|
|
198
|
+
aliases:
|
|
199
|
+
- mongo.internal
|
|
200
|
+
healthcheck:
|
|
201
|
+
test:
|
|
202
|
+
[
|
|
203
|
+
"CMD-SHELL",
|
|
204
|
+
"mongosh --quiet --username admin --password ${MONGO_INITDB_ROOT_PASSWORD:-admin123} --authenticationDatabase admin --eval 'db.runCommand({ ping: 1 })'",
|
|
205
|
+
]
|
|
206
|
+
interval: 30s
|
|
207
|
+
timeout: 10s
|
|
208
|
+
retries: 5
|
|
209
|
+
start_period: 20s
|
|
210
|
+
restart: unless-stopped
|
|
211
|
+
stop_signal: SIGTERM
|
|
212
|
+
stop_grace_period: 30s
|
|
213
|
+
|
|
214
|
+
# ==========================================
|
|
215
|
+
# mongo-express - MongoDB Web UI
|
|
216
|
+
# ==========================================
|
|
217
|
+
mongo-express.internal:
|
|
218
|
+
image: mongo-express:1.0.2-20-alpine3.19
|
|
219
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_mongo_express
|
|
220
|
+
hostname: mongo-express.internal
|
|
221
|
+
environment:
|
|
222
|
+
- ME_CONFIG_MONGODB_SERVER=mongo.internal
|
|
223
|
+
- ME_CONFIG_MONGODB_PORT=27017
|
|
224
|
+
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
|
|
225
|
+
- ME_CONFIG_MONGODB_ADMINPASSWORD=${MONGO_INITDB_ROOT_PASSWORD:-admin123}
|
|
226
|
+
- ME_CONFIG_BASICAUTH_USERNAME=admin
|
|
227
|
+
- ME_CONFIG_BASICAUTH_PASSWORD=${MONGO_EXPRESS_PASSWORD:-admin123}
|
|
228
|
+
- ME_CONFIG_SITE_BASEURL=/v1/opsbffsrv/mongo_express/
|
|
229
|
+
- TZ=Asia/Shanghai
|
|
230
|
+
expose:
|
|
231
|
+
- "8081"
|
|
232
|
+
networks:
|
|
233
|
+
app_network:
|
|
234
|
+
aliases:
|
|
235
|
+
- mongo-express.internal
|
|
236
|
+
depends_on:
|
|
237
|
+
mongo.internal:
|
|
238
|
+
condition: service_healthy
|
|
239
|
+
restart: unless-stopped
|
|
240
|
+
stop_signal: SIGTERM
|
|
241
|
+
stop_grace_period: 30s
|
|
242
|
+
|
|
243
|
+
# ==========================================
|
|
244
|
+
# infrasrv - 基础设施服务
|
|
245
|
+
# ==========================================
|
|
246
|
+
infrasrv.service:
|
|
247
|
+
image: *python_service_image
|
|
248
|
+
build: *python_service_build
|
|
249
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_infrasrv
|
|
250
|
+
hostname: infrasrv.service
|
|
251
|
+
command: ["sh", "-c", "python -m cancan_microstack.cmd.infrasrv.run 2>&1 | tee -a /app/server_log_data/infrasrv.out.log"]
|
|
252
|
+
environment:
|
|
253
|
+
- NE_CONFIG=dev_in_pod
|
|
254
|
+
- PYTHONUNBUFFERED=1
|
|
255
|
+
# Mac/Docker Desktop: use host.docker.internal to access host services
|
|
256
|
+
- "CONTROLLERSRV_HOST=${CONTROLLERSRV_HOST:-http://host.containers.internal:22100}"
|
|
257
|
+
# 凭据从工作区 .env 注入;默认值与开箱即用一致 / Credentials from workspace .env; defaults match out-of-box
|
|
258
|
+
- "RABBITMQ_USERNAME=${RABBITMQ_USERNAME:-admin}"
|
|
259
|
+
- "RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD:-admin123}"
|
|
260
|
+
- "MONGODB_URI=${MONGODB_URI:-mongodb://admin:admin123@mongo.internal:27017/admin?authSource=admin}"
|
|
261
|
+
# 不直接暴露端口,通过 Caddy 反向代理访问
|
|
262
|
+
expose:
|
|
263
|
+
- "8080"
|
|
264
|
+
networks:
|
|
265
|
+
app_network:
|
|
266
|
+
aliases:
|
|
267
|
+
- infrasrv.service # Podman DNS 别名
|
|
268
|
+
depends_on:
|
|
269
|
+
postgres.internal:
|
|
270
|
+
condition: service_healthy
|
|
271
|
+
redis.internal:
|
|
272
|
+
condition: service_healthy
|
|
273
|
+
rabbitmq.internal:
|
|
274
|
+
condition: service_healthy
|
|
275
|
+
mongo.internal:
|
|
276
|
+
condition: service_healthy
|
|
277
|
+
healthcheck:
|
|
278
|
+
test: ["CMD", "curl", "-f", "http://localhost:8080/internal/health"]
|
|
279
|
+
interval: 30s
|
|
280
|
+
timeout: 10s
|
|
281
|
+
retries: 3
|
|
282
|
+
start_period: 40s
|
|
283
|
+
restart: unless-stopped
|
|
284
|
+
volumes:
|
|
285
|
+
- ./ddl:/app/ddl
|
|
286
|
+
- ./server_log_data:/app/server_log_data
|
|
287
|
+
# 优雅关闭配置
|
|
288
|
+
stop_signal: SIGTERM
|
|
289
|
+
stop_grace_period: 30s
|
|
290
|
+
|
|
291
|
+
# ==========================================
|
|
292
|
+
# opsbffsrv - 运营管理服务
|
|
293
|
+
# ==========================================
|
|
294
|
+
opsbffsrv.service:
|
|
295
|
+
image: *python_service_image
|
|
296
|
+
build: *python_service_build
|
|
297
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_opsbffsrv
|
|
298
|
+
hostname: opsbffsrv.service
|
|
299
|
+
command: ["sh", "-c", "python -m cancan_microstack.cmd.opsbffsrv.run 2>&1 | tee -a /app/server_log_data/opsbffsrv.out.log"]
|
|
300
|
+
environment:
|
|
301
|
+
- NE_CONFIG=dev_in_pod
|
|
302
|
+
- PYTHONUNBUFFERED=1
|
|
303
|
+
# 凭据/密钥从工作区 .env 注入;默认值与开箱即用一致 / From workspace .env; defaults match out-of-box
|
|
304
|
+
- "CONTROLLERSRV_HOST=${CONTROLLERSRV_HOST:-http://host.containers.internal:22100}"
|
|
305
|
+
- "MONGODB_URI=${MONGODB_URI:-mongodb://admin:admin123@mongo.internal:27017/admin?authSource=admin}"
|
|
306
|
+
- "AUTH_TOTP_FERNET_KEY=${AUTH_TOTP_FERNET_KEY:-}"
|
|
307
|
+
- "AUTH_COOKIE_SECURE=${AUTH_COOKIE_SECURE:-true}"
|
|
308
|
+
- "MONGO_EXPRESS_PASSWORD=${MONGO_EXPRESS_PASSWORD:-admin123}"
|
|
309
|
+
- "RABBITMQ_MGMT_PASSWORD=${RABBITMQ_MGMT_PASSWORD:-admin123}"
|
|
310
|
+
- "PROXY_CORS_ALLOWED_ORIGINS=${PROXY_CORS_ALLOWED_ORIGINS:-}"
|
|
311
|
+
# 不直接暴露端口,通过 Caddy 反向代理访问
|
|
312
|
+
expose:
|
|
313
|
+
- "8080"
|
|
314
|
+
networks:
|
|
315
|
+
app_network:
|
|
316
|
+
aliases:
|
|
317
|
+
- opsbffsrv.service # Podman DNS 别名
|
|
318
|
+
depends_on:
|
|
319
|
+
postgres.internal:
|
|
320
|
+
condition: service_healthy
|
|
321
|
+
redis.internal:
|
|
322
|
+
condition: service_healthy
|
|
323
|
+
infrasrv.service:
|
|
324
|
+
condition: service_healthy
|
|
325
|
+
mongo.internal:
|
|
326
|
+
condition: service_healthy
|
|
327
|
+
rabbitmq.internal:
|
|
328
|
+
condition: service_healthy
|
|
329
|
+
healthcheck:
|
|
330
|
+
test: ["CMD", "curl", "-f", "http://localhost:8080/internal/health"]
|
|
331
|
+
interval: 30s
|
|
332
|
+
timeout: 10s
|
|
333
|
+
retries: 3
|
|
334
|
+
start_period: 40s
|
|
335
|
+
restart: unless-stopped
|
|
336
|
+
volumes:
|
|
337
|
+
- ./ddl:/app/ddl
|
|
338
|
+
- ./server_log_data:/app/server_log_data
|
|
339
|
+
- ./builds/caddy/geoip:/usr/share/GeoIP # GeoIP 数据库(与 Caddy 共享)
|
|
340
|
+
- ./builds/caddy/logs:/app/builds/caddy/logs:ro # Caddy access logs(供统计采集)
|
|
341
|
+
# 优雅关闭配置
|
|
342
|
+
stop_signal: SIGTERM
|
|
343
|
+
stop_grace_period: 30s
|
|
344
|
+
|
|
345
|
+
# ==========================================
|
|
346
|
+
# pgweb - PostgreSQL Web UI
|
|
347
|
+
# ==========================================
|
|
348
|
+
pgweb.internal:
|
|
349
|
+
image: sosedoff/pgweb:latest
|
|
350
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_pgweb
|
|
351
|
+
hostname: pgweb.internal
|
|
352
|
+
environment:
|
|
353
|
+
- PGWEB_DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD:-postgres123}@postgres.internal:5432/main?sslmode=disable
|
|
354
|
+
- TZ=Asia/Shanghai
|
|
355
|
+
# 不直接暴露端口,通过 opsbffsrv 转发访问
|
|
356
|
+
expose:
|
|
357
|
+
- "8081"
|
|
358
|
+
networks:
|
|
359
|
+
app_network:
|
|
360
|
+
aliases:
|
|
361
|
+
- pgweb.internal # Podman DNS 别名
|
|
362
|
+
depends_on:
|
|
363
|
+
postgres.internal:
|
|
364
|
+
condition: service_healthy
|
|
365
|
+
# 注意:Podman 5.6.2 健康检查存在兼容性问题,但 Docker 正常
|
|
366
|
+
# pgweb 服务已验证正常运行,可通过 opsbffsrv 访问 http://localhost:8081/
|
|
367
|
+
healthcheck:
|
|
368
|
+
test: ["CMD", "nc", "-z", "localhost", "8081"]
|
|
369
|
+
interval: 30s
|
|
370
|
+
timeout: 5s
|
|
371
|
+
retries: 3
|
|
372
|
+
start_period: 10s
|
|
373
|
+
restart: unless-stopped
|
|
374
|
+
|
|
375
|
+
# ==========================================
|
|
376
|
+
# redis-commander - Redis Web UI
|
|
377
|
+
# ==========================================
|
|
378
|
+
redis-commander.internal:
|
|
379
|
+
image: rediscommander/redis-commander:latest
|
|
380
|
+
container_name: ${CANCAN_STACK_PREFIX:-cancan}_redis_commander
|
|
381
|
+
hostname: redis-commander.internal
|
|
382
|
+
environment:
|
|
383
|
+
- REDIS_HOSTS=local:redis.internal:6379
|
|
384
|
+
- TZ=Asia/Shanghai
|
|
385
|
+
# 不直接暴露端口,通过 opsbffsrv 转发访问
|
|
386
|
+
expose:
|
|
387
|
+
- "8081"
|
|
388
|
+
networks:
|
|
389
|
+
app_network:
|
|
390
|
+
aliases:
|
|
391
|
+
- redis-commander.internal
|
|
392
|
+
depends_on:
|
|
393
|
+
redis.internal:
|
|
394
|
+
condition: service_healthy
|
|
395
|
+
healthcheck:
|
|
396
|
+
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8081"]
|
|
397
|
+
interval: 30s
|
|
398
|
+
timeout: 5s
|
|
399
|
+
retries: 3
|
|
400
|
+
start_period: 10s
|
|
401
|
+
restart: unless-stopped
|