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.
Files changed (461) hide show
  1. cancan_microstack-0.0.1/LICENSE +21 -0
  2. cancan_microstack-0.0.1/MANIFEST.in +9 -0
  3. cancan_microstack-0.0.1/PKG-INFO +155 -0
  4. cancan_microstack-0.0.1/README.md +109 -0
  5. cancan_microstack-0.0.1/__init__.py +14 -0
  6. cancan_microstack-0.0.1/__version__.py +10 -0
  7. cancan_microstack-0.0.1/assets/__init__.py +6 -0
  8. cancan_microstack-0.0.1/assets/builds/caddy/Caddyfile +187 -0
  9. cancan_microstack-0.0.1/assets/builds/caddy/DEPLOYMENT.md +303 -0
  10. cancan_microstack-0.0.1/assets/builds/caddy/Dockerfile +46 -0
  11. cancan_microstack-0.0.1/assets/builds/caddy/README.md +343 -0
  12. cancan_microstack-0.0.1/assets/builds/caddy/geoip/README.md +5 -0
  13. cancan_microstack-0.0.1/assets/builds/caddy/start.sh +78 -0
  14. cancan_microstack-0.0.1/assets/builds/caddy/waf/coraza.conf +179 -0
  15. cancan_microstack-0.0.1/assets/builds/service/Dockerfile +59 -0
  16. cancan_microstack-0.0.1/assets/builds/service/README.md +13 -0
  17. cancan_microstack-0.0.1/assets/ddl/create_db.sql +22 -0
  18. cancan_microstack-0.0.1/assets/ddl/infra/execution_log_tbl.sql +46 -0
  19. cancan_microstack-0.0.1/assets/ddl/infra/node_instance_tbl.sql +56 -0
  20. cancan_microstack-0.0.1/assets/ddl/infra/service_action_log_tbl.sql +36 -0
  21. cancan_microstack-0.0.1/assets/ddl/infra/service_config_tbl.sql +26 -0
  22. cancan_microstack-0.0.1/assets/ddl/infra/service_info_tbl.sql +45 -0
  23. cancan_microstack-0.0.1/assets/ddl/infra/service_instance_tbl.sql +54 -0
  24. cancan_microstack-0.0.1/assets/ddl/infra/service_operation_tbl.sql +47 -0
  25. cancan_microstack-0.0.1/assets/ddl/infra/workflow_definition_tbl.sql +60 -0
  26. cancan_microstack-0.0.1/assets/ddl/infra/workflow_definition_version_tbl.sql +35 -0
  27. cancan_microstack-0.0.1/assets/ddl/infra/workflow_engine_alert_tbl.sql +34 -0
  28. cancan_microstack-0.0.1/assets/ddl/infra/workflow_run_tbl.sql +52 -0
  29. cancan_microstack-0.0.1/assets/ddl/ops/admin_user_tbl.sql +34 -0
  30. cancan_microstack-0.0.1/assets/ddl/ops/caddy_access_log_tbl.sql +91 -0
  31. cancan_microstack-0.0.1/assets/ddl/ops/caddy_certificate_tbl.sql +59 -0
  32. cancan_microstack-0.0.1/assets/ddl/ops/caddy_rate_limit_tbl.sql +64 -0
  33. cancan_microstack-0.0.1/assets/ddl/ops/caddy_route_tbl.sql +63 -0
  34. cancan_microstack-0.0.1/assets/ddl/ops/caddy_stats_tbl.sql +77 -0
  35. cancan_microstack-0.0.1/assets/ddl/trigger.sql +21 -0
  36. cancan_microstack-0.0.1/assets/docker/docker-compose.infra.yml +401 -0
  37. cancan_microstack-0.0.1/assets/scripts/README.md +195 -0
  38. cancan_microstack-0.0.1/assets/scripts/docker/build_images.sh +44 -0
  39. cancan_microstack-0.0.1/assets/scripts/docker/force_rebuild_images.sh +38 -0
  40. cancan_microstack-0.0.1/assets/scripts/docker/rebuild_all.sh +34 -0
  41. cancan_microstack-0.0.1/assets/scripts/docker/rebuild_compose.sh +61 -0
  42. cancan_microstack-0.0.1/assets/scripts/docker/restart.sh +35 -0
  43. cancan_microstack-0.0.1/assets/scripts/docker/restart_compose.sh +35 -0
  44. cancan_microstack-0.0.1/assets/scripts/docker/start.sh +78 -0
  45. cancan_microstack-0.0.1/assets/scripts/docker/start_all.sh +46 -0
  46. cancan_microstack-0.0.1/assets/scripts/docker/start_compose.sh +66 -0
  47. cancan_microstack-0.0.1/assets/scripts/docker/stop.sh +67 -0
  48. cancan_microstack-0.0.1/assets/scripts/docker/stop_all.sh +38 -0
  49. cancan_microstack-0.0.1/assets/scripts/docker/stop_compose.sh +38 -0
  50. cancan_microstack-0.0.1/assets/scripts/podman/build_images_podman.sh +59 -0
  51. cancan_microstack-0.0.1/assets/scripts/podman/cleanup_podman.sh +25 -0
  52. cancan_microstack-0.0.1/assets/scripts/podman/force_rebuild_images_podman.sh +56 -0
  53. cancan_microstack-0.0.1/assets/scripts/podman/rebuild_all_podman.sh +37 -0
  54. cancan_microstack-0.0.1/assets/scripts/podman/rebuild_compose_podman.sh +60 -0
  55. cancan_microstack-0.0.1/assets/scripts/podman/restart_compose_podman.sh +73 -0
  56. cancan_microstack-0.0.1/assets/scripts/podman/start_all_podman.sh +66 -0
  57. cancan_microstack-0.0.1/assets/scripts/podman/start_compose_podman.sh +80 -0
  58. cancan_microstack-0.0.1/assets/scripts/podman/start_podman.sh +91 -0
  59. cancan_microstack-0.0.1/assets/scripts/podman/stop.sh +73 -0
  60. cancan_microstack-0.0.1/assets/scripts/podman/stop_all_podman.sh +34 -0
  61. cancan_microstack-0.0.1/assets/scripts/podman/stop_compose_podman.sh +58 -0
  62. cancan_microstack-0.0.1/assets/scripts/start_controllersrv.sh +9 -0
  63. cancan_microstack-0.0.1/assets/scripts/utils/check_all_db_tables.sh +104 -0
  64. cancan_microstack-0.0.1/assets/scripts/utils/check_env.sh +177 -0
  65. cancan_microstack-0.0.1/assets/scripts/utils/check_service_management_deployment.sh +225 -0
  66. cancan_microstack-0.0.1/assets/scripts/utils/deploy_service_management.sh +176 -0
  67. cancan_microstack-0.0.1/assets/scripts/utils/force_reload_infrasrv.sh +52 -0
  68. cancan_microstack-0.0.1/assets/scripts/utils/monitor_service_management.sh +187 -0
  69. cancan_microstack-0.0.1/assets/scripts/utils/reset_postgres_volume.sh +68 -0
  70. cancan_microstack-0.0.1/assets/scripts/utils/test_async_operations.sh +141 -0
  71. cancan_microstack-0.0.1/assets/scripts/utils/verify_real_operations.sh +76 -0
  72. cancan_microstack-0.0.1/assets/service/Dockerfile +65 -0
  73. cancan_microstack-0.0.1/assets/www/adminops/assets/AppEmpty.vue_vue_type_script_setup_true_lang-BOKUurnM.js +1 -0
  74. cancan_microstack-0.0.1/assets/www/adminops/assets/ConfigManage-DKV5YOUz.js +1 -0
  75. cancan_microstack-0.0.1/assets/www/adminops/assets/ConfigManage-Y5bhy7wG.css +1 -0
  76. cancan_microstack-0.0.1/assets/www/adminops/assets/ConsoleManage-8ljYvCW2.js +1 -0
  77. cancan_microstack-0.0.1/assets/www/adminops/assets/ConsoleManage-BWpyqbuQ.css +1 -0
  78. cancan_microstack-0.0.1/assets/www/adminops/assets/DashboardNew-B9Nf1OPl.js +1 -0
  79. cancan_microstack-0.0.1/assets/www/adminops/assets/DashboardNew-DYWZKQ1V.css +1 -0
  80. cancan_microstack-0.0.1/assets/www/adminops/assets/LogSearch-CA0Jhe78.js +1 -0
  81. cancan_microstack-0.0.1/assets/www/adminops/assets/LogSearch-CCZfTNPF.css +1 -0
  82. cancan_microstack-0.0.1/assets/www/adminops/assets/LoginView-BId3kP3M.css +1 -0
  83. cancan_microstack-0.0.1/assets/www/adminops/assets/LoginView-BQZTV_Qy.js +1 -0
  84. cancan_microstack-0.0.1/assets/www/adminops/assets/OperationProgressDialog-BdEYwqFq.js +1 -0
  85. cancan_microstack-0.0.1/assets/www/adminops/assets/OperationProgressDialog-D-pASR8G.css +1 -0
  86. cancan_microstack-0.0.1/assets/www/adminops/assets/PageContainer-Byss-yUC.js +1 -0
  87. cancan_microstack-0.0.1/assets/www/adminops/assets/PageContainer-C3nSZwM7.css +1 -0
  88. cancan_microstack-0.0.1/assets/www/adminops/assets/RateLimitManage-BDI8jLpC.css +1 -0
  89. cancan_microstack-0.0.1/assets/www/adminops/assets/RateLimitManage-DJY4NiF-.js +1 -0
  90. cancan_microstack-0.0.1/assets/www/adminops/assets/RouteManage-DaUQ4QLw.css +1 -0
  91. cancan_microstack-0.0.1/assets/www/adminops/assets/RouteManage-w9XCU0UA.js +1 -0
  92. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceCard-BFzHe6Tw.css +1 -0
  93. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceCard-BJUhWnA-.js +1 -0
  94. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceDetail-Cw24WuKp.js +1 -0
  95. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceDetail-Yum47zdB.css +1 -0
  96. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceList-C7ryvbhE.js +1 -0
  97. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceList-Cgd01fUx.css +1 -0
  98. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceLogs-COpG9H0h.js +1 -0
  99. cancan_microstack-0.0.1/assets/www/adminops/assets/ServiceLogs-H_Alq0cf.css +1 -0
  100. cancan_microstack-0.0.1/assets/www/adminops/assets/StatsOverview-D0TwMQkA.js +39 -0
  101. cancan_microstack-0.0.1/assets/www/adminops/assets/StatsOverview-lqAN6pqM.css +1 -0
  102. cancan_microstack-0.0.1/assets/www/adminops/assets/TotpBindView-CWlAmzFt.js +1 -0
  103. cancan_microstack-0.0.1/assets/www/adminops/assets/TotpBindView-HoQC1lhx.css +1 -0
  104. cancan_microstack-0.0.1/assets/www/adminops/assets/TotpVerifyView-BHN1VtX1.css +1 -0
  105. cancan_microstack-0.0.1/assets/www/adminops/assets/TotpVerifyView-D3w_lZk8.js +1 -0
  106. cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowCenter-DU_mpIA0.css +1 -0
  107. cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowCenter-i50rZyxN.js +1 -0
  108. cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowDesigner-CnHokPL9.js +1 -0
  109. cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowDesigner-DaZaZpLd.css +1 -0
  110. cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowRuns-B09hK48c.js +1 -0
  111. cancan_microstack-0.0.1/assets/www/adminops/assets/WorkflowRuns-wGutKIIU.css +1 -0
  112. cancan_microstack-0.0.1/assets/www/adminops/assets/caddy-nnCKf8fG.js +1 -0
  113. cancan_microstack-0.0.1/assets/www/adminops/assets/format-Cuzxgna9.js +1 -0
  114. cancan_microstack-0.0.1/assets/www/adminops/assets/index-CiFlm8oc.js +64 -0
  115. cancan_microstack-0.0.1/assets/www/adminops/assets/index-UW0T1Dkc.css +1 -0
  116. cancan_microstack-0.0.1/assets/www/adminops/assets/service-BYlgGPs_.js +1 -0
  117. cancan_microstack-0.0.1/assets/www/adminops/assets/service-operation-6GzLw2Z1.js +1 -0
  118. cancan_microstack-0.0.1/assets/www/adminops/assets/style-CcIXnQ5y.css +1 -0
  119. cancan_microstack-0.0.1/assets/www/adminops/assets/style-lRnStdGu.js +39 -0
  120. cancan_microstack-0.0.1/assets/www/adminops/assets/useDebounce-BRlqfXqf.js +1 -0
  121. cancan_microstack-0.0.1/assets/www/adminops/assets/workflow-CUXs39Ac.js +1 -0
  122. cancan_microstack-0.0.1/assets/www/adminops/index.html +16 -0
  123. cancan_microstack-0.0.1/assets/www/adminops/vite.svg +1 -0
  124. cancan_microstack-0.0.1/cancan_microstack.egg-info/PKG-INFO +155 -0
  125. cancan_microstack-0.0.1/cancan_microstack.egg-info/SOURCES.txt +893 -0
  126. cancan_microstack-0.0.1/cancan_microstack.egg-info/dependency_links.txt +1 -0
  127. cancan_microstack-0.0.1/cancan_microstack.egg-info/entry_points.txt +2 -0
  128. cancan_microstack-0.0.1/cancan_microstack.egg-info/not-zip-safe +1 -0
  129. cancan_microstack-0.0.1/cancan_microstack.egg-info/requires.txt +17 -0
  130. cancan_microstack-0.0.1/cancan_microstack.egg-info/top_level.txt +1 -0
  131. cancan_microstack-0.0.1/cli/__init__.py +14 -0
  132. cancan_microstack-0.0.1/cli/__main__.py +9 -0
  133. cancan_microstack-0.0.1/cli/main.py +552 -0
  134. cancan_microstack-0.0.1/cmd/__init__.py +54 -0
  135. cancan_microstack-0.0.1/cmd/cancan/__init__.py +12 -0
  136. cancan_microstack-0.0.1/cmd/cancan/run.py +395 -0
  137. cancan_microstack-0.0.1/cmd/controllersrv/__init__.py +0 -0
  138. cancan_microstack-0.0.1/cmd/controllersrv/run.py +131 -0
  139. cancan_microstack-0.0.1/cmd/infrasrv/__init__.py +5 -0
  140. cancan_microstack-0.0.1/cmd/infrasrv/run.py +100 -0
  141. cancan_microstack-0.0.1/cmd/opsbffsrv/__init__.py +5 -0
  142. cancan_microstack-0.0.1/cmd/opsbffsrv/run.py +96 -0
  143. cancan_microstack-0.0.1/core/__init__.py +5 -0
  144. cancan_microstack-0.0.1/core/assets.py +123 -0
  145. cancan_microstack-0.0.1/core/compose_builder.py +102 -0
  146. cancan_microstack-0.0.1/core/doctor.py +152 -0
  147. cancan_microstack-0.0.1/core/microstack.py +71 -0
  148. cancan_microstack-0.0.1/core/runner.py +56 -0
  149. cancan_microstack-0.0.1/core/stack_manager.py +186 -0
  150. cancan_microstack-0.0.1/public/__init__.py +7 -0
  151. cancan_microstack-0.0.1/public/api/__init__.py +1 -0
  152. cancan_microstack-0.0.1/public/api/controllersrv_client.py +277 -0
  153. cancan_microstack-0.0.1/public/api/infrasrv_client.py +404 -0
  154. cancan_microstack-0.0.1/public/const/__init__.py +1 -0
  155. cancan_microstack-0.0.1/public/const/action_consts.py +18 -0
  156. cancan_microstack-0.0.1/public/const/app_consts.py +42 -0
  157. cancan_microstack-0.0.1/public/const/caddy_consts.py +22 -0
  158. cancan_microstack-0.0.1/public/const/controllersrv_consts.py +163 -0
  159. cancan_microstack-0.0.1/public/const/docker_consts.py +15 -0
  160. cancan_microstack-0.0.1/public/const/error.py +56 -0
  161. cancan_microstack-0.0.1/public/const/health_consts.py +52 -0
  162. cancan_microstack-0.0.1/public/const/hook_enums.py +56 -0
  163. cancan_microstack-0.0.1/public/const/logging_enums.py +13 -0
  164. cancan_microstack-0.0.1/public/const/metrics_enums.py +36 -0
  165. cancan_microstack-0.0.1/public/const/monitor_enums.py +26 -0
  166. cancan_microstack-0.0.1/public/const/operation_consts.py +53 -0
  167. cancan_microstack-0.0.1/public/const/opsbffsrv_error.py +92 -0
  168. cancan_microstack-0.0.1/public/const/overrides_consts.py +13 -0
  169. cancan_microstack-0.0.1/public/const/redis.py +17 -0
  170. cancan_microstack-0.0.1/public/const/service_consts.py +15 -0
  171. cancan_microstack-0.0.1/public/const/workflow_consts.py +65 -0
  172. cancan_microstack-0.0.1/public/error.py +41 -0
  173. cancan_microstack-0.0.1/public/logging/__init__.py +0 -0
  174. cancan_microstack-0.0.1/public/logging/initializer.py +109 -0
  175. cancan_microstack-0.0.1/public/logging/mq_handler.py +279 -0
  176. cancan_microstack-0.0.1/public/schemas/__init__.py +1 -0
  177. cancan_microstack-0.0.1/public/schemas/caddy/__init__.py +381 -0
  178. cancan_microstack-0.0.1/public/schemas/caddy/analysis.py +90 -0
  179. cancan_microstack-0.0.1/public/schemas/caddy/route.py +18 -0
  180. cancan_microstack-0.0.1/public/schemas/common.py +79 -0
  181. cancan_microstack-0.0.1/public/schemas/controllersrv/__init__.py +3 -0
  182. cancan_microstack-0.0.1/public/schemas/controllersrv/async_requests.py +30 -0
  183. cancan_microstack-0.0.1/public/schemas/controllersrv/compose_models.py +47 -0
  184. cancan_microstack-0.0.1/public/schemas/controllersrv/const.py +24 -0
  185. cancan_microstack-0.0.1/public/schemas/controllersrv/docker_models.py +45 -0
  186. cancan_microstack-0.0.1/public/schemas/controllersrv/docker_responses.py +104 -0
  187. cancan_microstack-0.0.1/public/schemas/controllersrv/requests.py +54 -0
  188. cancan_microstack-0.0.1/public/schemas/controllersrv/responses.py +124 -0
  189. cancan_microstack-0.0.1/public/schemas/controllersrv/task_models.py +102 -0
  190. cancan_microstack-0.0.1/public/schemas/controllersrv/validation.py +23 -0
  191. cancan_microstack-0.0.1/public/schemas/hook_metrics.py +124 -0
  192. cancan_microstack-0.0.1/public/schemas/hooks.py +39 -0
  193. cancan_microstack-0.0.1/public/schemas/infra/__init__.py +0 -0
  194. cancan_microstack-0.0.1/public/schemas/infra/cleanup.py +25 -0
  195. cancan_microstack-0.0.1/public/schemas/infra/container.py +74 -0
  196. cancan_microstack-0.0.1/public/schemas/infra/enums.py +135 -0
  197. cancan_microstack-0.0.1/public/schemas/infra/health_check.py +42 -0
  198. cancan_microstack-0.0.1/public/schemas/infra/hook_log.py +42 -0
  199. cancan_microstack-0.0.1/public/schemas/infra/operation.py +90 -0
  200. cancan_microstack-0.0.1/public/schemas/infra/overview.py +25 -0
  201. cancan_microstack-0.0.1/public/schemas/infra/push.py +33 -0
  202. cancan_microstack-0.0.1/public/schemas/infra/service_action_log.py +47 -0
  203. cancan_microstack-0.0.1/public/schemas/infra/service_config.py +10 -0
  204. cancan_microstack-0.0.1/public/schemas/infra/service_info.py +69 -0
  205. cancan_microstack-0.0.1/public/schemas/infra/service_instance.py +93 -0
  206. cancan_microstack-0.0.1/public/schemas/infra/service_management.py +152 -0
  207. cancan_microstack-0.0.1/public/schemas/infra/service_operation.py +79 -0
  208. cancan_microstack-0.0.1/public/schemas/infra/service_registry.py +158 -0
  209. cancan_microstack-0.0.1/public/schemas/infra/status_types.py +19 -0
  210. cancan_microstack-0.0.1/public/schemas/infra/workflow.py +566 -0
  211. cancan_microstack-0.0.1/public/schemas/logging/__init__.py +1 -0
  212. cancan_microstack-0.0.1/public/schemas/logging/log_event.py +121 -0
  213. cancan_microstack-0.0.1/public/schemas/opsbffsrv/__init__.py +1 -0
  214. cancan_microstack-0.0.1/public/schemas/opsbffsrv/async_ops.py +17 -0
  215. cancan_microstack-0.0.1/public/schemas/opsbffsrv/db_admin.py +147 -0
  216. cancan_microstack-0.0.1/public/schemas/opsbffsrv/db_init.py +48 -0
  217. cancan_microstack-0.0.1/public/schemas/opsbffsrv/service_config.py +89 -0
  218. cancan_microstack-0.0.1/public/schemas/opsbffsrv/service_logs.py +54 -0
  219. cancan_microstack-0.0.1/public/schemas/service_operation.py +24 -0
  220. cancan_microstack-0.0.1/public/schemas/service_registry.py +40 -0
  221. cancan_microstack-0.0.1/public/types/__init__.py +7 -0
  222. cancan_microstack-0.0.1/public/web/__init__.py +0 -0
  223. cancan_microstack-0.0.1/public/web/config_value.py +105 -0
  224. cancan_microstack-0.0.1/public/web/server.py +385 -0
  225. cancan_microstack-0.0.1/py.typed +0 -0
  226. cancan_microstack-0.0.1/pyproject.toml +161 -0
  227. cancan_microstack-0.0.1/runtime/__init__.py +0 -0
  228. cancan_microstack-0.0.1/runtime/compose_cmd.py +228 -0
  229. cancan_microstack-0.0.1/runtime/host_daemon.py +318 -0
  230. cancan_microstack-0.0.1/runtime/overrides.py +103 -0
  231. cancan_microstack-0.0.1/runtime/resources.py +25 -0
  232. cancan_microstack-0.0.1/runtime/workspace.py +94 -0
  233. cancan_microstack-0.0.1/services/__init__.py +0 -0
  234. cancan_microstack-0.0.1/services/controllersrv/__init__.py +8 -0
  235. cancan_microstack-0.0.1/services/controllersrv/application/__init__.py +0 -0
  236. cancan_microstack-0.0.1/services/controllersrv/application/docker_compose_app.py +427 -0
  237. cancan_microstack-0.0.1/services/controllersrv/conf/__init__.py +0 -0
  238. cancan_microstack-0.0.1/services/controllersrv/conf/config.py +76 -0
  239. cancan_microstack-0.0.1/services/controllersrv/conf/settings.py +54 -0
  240. cancan_microstack-0.0.1/services/controllersrv/domain/__init__.py +0 -0
  241. cancan_microstack-0.0.1/services/controllersrv/domain/docker_compose/__init__.py +0 -0
  242. cancan_microstack-0.0.1/services/controllersrv/domain/docker_compose/docker_compose_domain.py +278 -0
  243. cancan_microstack-0.0.1/services/controllersrv/domain/service_validator.py +327 -0
  244. cancan_microstack-0.0.1/services/controllersrv/domain/task/__init__.py +17 -0
  245. cancan_microstack-0.0.1/services/controllersrv/domain/task/task_queue.py +286 -0
  246. cancan_microstack-0.0.1/services/controllersrv/domain/task/task_worker.py +495 -0
  247. cancan_microstack-0.0.1/services/controllersrv/infrastructure/__init__.py +0 -0
  248. cancan_microstack-0.0.1/services/controllersrv/interface/__init__.py +0 -0
  249. cancan_microstack-0.0.1/services/controllersrv/interface/api/__init__.py +0 -0
  250. cancan_microstack-0.0.1/services/controllersrv/interface/api/docker_control_api.py +470 -0
  251. cancan_microstack-0.0.1/services/controllersrv/router.py +132 -0
  252. cancan_microstack-0.0.1/services/infrasrv/__init__.py +4 -0
  253. cancan_microstack-0.0.1/services/infrasrv/application/__init__.py +0 -0
  254. cancan_microstack-0.0.1/services/infrasrv/application/health_check_app.py +24 -0
  255. cancan_microstack-0.0.1/services/infrasrv/application/logging/__init__.py +1 -0
  256. cancan_microstack-0.0.1/services/infrasrv/application/logging/log_ingestion_service.py +183 -0
  257. cancan_microstack-0.0.1/services/infrasrv/application/service_config.py +22 -0
  258. cancan_microstack-0.0.1/services/infrasrv/application/service_logs_app.py +53 -0
  259. cancan_microstack-0.0.1/services/infrasrv/application/service_management_app.py +689 -0
  260. cancan_microstack-0.0.1/services/infrasrv/application/service_operation_tracker.py +251 -0
  261. cancan_microstack-0.0.1/services/infrasrv/application/service_registry.py +53 -0
  262. cancan_microstack-0.0.1/services/infrasrv/application/workflow/__init__.py +0 -0
  263. cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_app.py +991 -0
  264. cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_queue.py +302 -0
  265. cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_tasks.py +46 -0
  266. cancan_microstack-0.0.1/services/infrasrv/application/workflow/workflow_worker_runtime.py +122 -0
  267. cancan_microstack-0.0.1/services/infrasrv/conf/__init__.py +0 -0
  268. cancan_microstack-0.0.1/services/infrasrv/conf/config.py +98 -0
  269. cancan_microstack-0.0.1/services/infrasrv/domain/__init__.py +0 -0
  270. cancan_microstack-0.0.1/services/infrasrv/domain/health_check/__init__.py +3 -0
  271. cancan_microstack-0.0.1/services/infrasrv/domain/health_check/health_check_domain.py +576 -0
  272. cancan_microstack-0.0.1/services/infrasrv/domain/hooks/__init__.py +19 -0
  273. cancan_microstack-0.0.1/services/infrasrv/domain/hooks/builtin_hooks.py +308 -0
  274. cancan_microstack-0.0.1/services/infrasrv/domain/hooks/hook_registry.py +43 -0
  275. cancan_microstack-0.0.1/services/infrasrv/domain/hooks/hooks_log_utils.py +275 -0
  276. cancan_microstack-0.0.1/services/infrasrv/domain/hooks/init.py +17 -0
  277. cancan_microstack-0.0.1/services/infrasrv/domain/hooks/metrics.py +205 -0
  278. cancan_microstack-0.0.1/services/infrasrv/domain/hooks/pre_registration_hooks.py +490 -0
  279. cancan_microstack-0.0.1/services/infrasrv/domain/registry/__init__.py +0 -0
  280. cancan_microstack-0.0.1/services/infrasrv/domain/registry/service_registry.py +509 -0
  281. cancan_microstack-0.0.1/services/infrasrv/domain/service_config/__init__.py +0 -0
  282. cancan_microstack-0.0.1/services/infrasrv/domain/service_config/service_config.py +50 -0
  283. cancan_microstack-0.0.1/services/infrasrv/domain/service_logs/__init__.py +0 -0
  284. cancan_microstack-0.0.1/services/infrasrv/domain/service_logs/service_logs_domain.py +51 -0
  285. cancan_microstack-0.0.1/services/infrasrv/domain/workflow/__init__.py +4 -0
  286. cancan_microstack-0.0.1/services/infrasrv/domain/workflow/engine.py +159 -0
  287. cancan_microstack-0.0.1/services/infrasrv/domain/workflow/node_handlers.py +509 -0
  288. cancan_microstack-0.0.1/services/infrasrv/domain/workflow/workflow_domain.py +164 -0
  289. cancan_microstack-0.0.1/services/infrasrv/infrastructure/__init__.py +0 -0
  290. cancan_microstack-0.0.1/services/infrasrv/infrastructure/api/__init__.py +0 -0
  291. cancan_microstack-0.0.1/services/infrasrv/infrastructure/api/controllersrv_api.py +165 -0
  292. cancan_microstack-0.0.1/services/infrasrv/infrastructure/cache/__init__.py +0 -0
  293. cancan_microstack-0.0.1/services/infrasrv/infrastructure/cache/service_registry_cache.py +174 -0
  294. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/__init__.py +0 -0
  295. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/__init__.py +0 -0
  296. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/execution_log_tbl.py +53 -0
  297. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/node_instance_tbl.py +55 -0
  298. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
  299. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_config_tbl.py +30 -0
  300. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_info_tbl.py +59 -0
  301. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_instance_tbl.py +88 -0
  302. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/service_operation_tbl.py +73 -0
  303. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_definition_tbl.py +55 -0
  304. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_definition_version_tbl.py +43 -0
  305. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_engine_alert_tbl.py +57 -0
  306. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/model/workflow_run_tbl.py +56 -0
  307. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/__init__.py +0 -0
  308. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_action_log_op.py +239 -0
  309. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_config.py +80 -0
  310. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_config_manager.py +198 -0
  311. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_info_op.py +297 -0
  312. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_instance_op.py +688 -0
  313. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_operation_op.py +387 -0
  314. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/service_registry.py +124 -0
  315. cancan_microstack-0.0.1/services/infrasrv/infrastructure/db/operate/workflow_op.py +804 -0
  316. cancan_microstack-0.0.1/services/infrasrv/infrastructure/ddl_manager.py +31 -0
  317. cancan_microstack-0.0.1/services/infrasrv/infrastructure/mongo/__init__.py +1 -0
  318. cancan_microstack-0.0.1/services/infrasrv/infrastructure/mongo/log_repository.py +129 -0
  319. cancan_microstack-0.0.1/services/infrasrv/interface/__init__.py +0 -0
  320. cancan_microstack-0.0.1/services/infrasrv/interface/api/__init__.py +0 -0
  321. cancan_microstack-0.0.1/services/infrasrv/interface/api/health_check_api.py +29 -0
  322. cancan_microstack-0.0.1/services/infrasrv/interface/api/hooks.py +284 -0
  323. cancan_microstack-0.0.1/services/infrasrv/interface/api/internal.py +49 -0
  324. cancan_microstack-0.0.1/services/infrasrv/interface/api/internal_instance_api.py +265 -0
  325. cancan_microstack-0.0.1/services/infrasrv/interface/api/internal_operation_api.py +206 -0
  326. cancan_microstack-0.0.1/services/infrasrv/interface/api/service_config.py +50 -0
  327. cancan_microstack-0.0.1/services/infrasrv/interface/api/service_logs_api.py +49 -0
  328. cancan_microstack-0.0.1/services/infrasrv/interface/api/service_management_api.py +113 -0
  329. cancan_microstack-0.0.1/services/infrasrv/interface/api/service_registry.py +117 -0
  330. cancan_microstack-0.0.1/services/infrasrv/interface/api/workflow_api.py +303 -0
  331. cancan_microstack-0.0.1/services/infrasrv/interface/schedule/__init__.py +0 -0
  332. cancan_microstack-0.0.1/services/infrasrv/interface/schedule/cleanup.py +13 -0
  333. cancan_microstack-0.0.1/services/infrasrv/interface/schedule/health_check.py +27 -0
  334. cancan_microstack-0.0.1/services/infrasrv/interface/schedule/log_cleanup.py +26 -0
  335. cancan_microstack-0.0.1/services/infrasrv/interface/schedule/operation_tracker.py +25 -0
  336. cancan_microstack-0.0.1/services/infrasrv/interface/schedule/scheduler.py +39 -0
  337. cancan_microstack-0.0.1/services/infrasrv/interface/schedule/workflow_scheduler.py +115 -0
  338. cancan_microstack-0.0.1/services/infrasrv/router.py +341 -0
  339. cancan_microstack-0.0.1/services/opsbffsrv/__init__.py +4 -0
  340. cancan_microstack-0.0.1/services/opsbffsrv/application/__init__.py +0 -0
  341. cancan_microstack-0.0.1/services/opsbffsrv/application/async_operation_app.py +150 -0
  342. cancan_microstack-0.0.1/services/opsbffsrv/application/auth_app.py +285 -0
  343. cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/__init__.py +0 -0
  344. cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/access_log_analysis_app.py +344 -0
  345. cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/access_log_ingestion_service.py +169 -0
  346. cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/certificate_management_app.py +355 -0
  347. cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/rate_limit_management_app.py +496 -0
  348. cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/route_management_app.py +401 -0
  349. cancan_microstack-0.0.1/services/opsbffsrv/application/caddy/stats_aggregation_app.py +364 -0
  350. cancan_microstack-0.0.1/services/opsbffsrv/application/db_admin_app.py +103 -0
  351. cancan_microstack-0.0.1/services/opsbffsrv/application/db_init_app.py +283 -0
  352. cancan_microstack-0.0.1/services/opsbffsrv/application/logging/__init__.py +1 -0
  353. cancan_microstack-0.0.1/services/opsbffsrv/application/logging/log_query_app.py +28 -0
  354. cancan_microstack-0.0.1/services/opsbffsrv/application/service_config.py +158 -0
  355. cancan_microstack-0.0.1/services/opsbffsrv/application/service_logs_app.py +74 -0
  356. cancan_microstack-0.0.1/services/opsbffsrv/application/service_registry.py +36 -0
  357. cancan_microstack-0.0.1/services/opsbffsrv/application/workflow_ops_app.py +730 -0
  358. cancan_microstack-0.0.1/services/opsbffsrv/conf/__init__.py +0 -0
  359. cancan_microstack-0.0.1/services/opsbffsrv/conf/config.py +224 -0
  360. cancan_microstack-0.0.1/services/opsbffsrv/domain/__init__.py +0 -0
  361. cancan_microstack-0.0.1/services/opsbffsrv/domain/auth/__init__.py +0 -0
  362. cancan_microstack-0.0.1/services/opsbffsrv/domain/auth/admin_init.py +38 -0
  363. cancan_microstack-0.0.1/services/opsbffsrv/domain/auth/auth_domain.py +108 -0
  364. cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/__init__.py +0 -0
  365. cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/access_log_analysis.py +358 -0
  366. cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/certificate_management.py +325 -0
  367. cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/default_routes.py +53 -0
  368. cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/rate_limit_management.py +308 -0
  369. cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/route_management.py +279 -0
  370. cancan_microstack-0.0.1/services/opsbffsrv/domain/caddy/stats_aggregation.py +654 -0
  371. cancan_microstack-0.0.1/services/opsbffsrv/domain/db_admin/__init__.py +0 -0
  372. cancan_microstack-0.0.1/services/opsbffsrv/domain/db_admin/db_admin_domain.py +118 -0
  373. cancan_microstack-0.0.1/services/opsbffsrv/domain/db_init/__init__.py +3 -0
  374. cancan_microstack-0.0.1/services/opsbffsrv/domain/db_init/db_init_domain.py +358 -0
  375. cancan_microstack-0.0.1/services/opsbffsrv/domain/logging/__init__.py +1 -0
  376. cancan_microstack-0.0.1/services/opsbffsrv/domain/logging/log_query_domain.py +99 -0
  377. cancan_microstack-0.0.1/services/opsbffsrv/domain/service_config/__init__.py +0 -0
  378. cancan_microstack-0.0.1/services/opsbffsrv/domain/service_config/service_config.py +81 -0
  379. cancan_microstack-0.0.1/services/opsbffsrv/domain/service_registry/__init__.py +0 -0
  380. cancan_microstack-0.0.1/services/opsbffsrv/domain/service_registry/service_registry.py +292 -0
  381. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/__init__.py +0 -0
  382. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/api/__init__.py +0 -0
  383. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/api/infrasrv_api.py +242 -0
  384. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/__init__.py +0 -0
  385. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/captcha_service.py +67 -0
  386. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/password_service.py +12 -0
  387. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/redis_store.py +131 -0
  388. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/auth/totp_service.py +59 -0
  389. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/__init__.py +0 -0
  390. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/access_log_parser.py +307 -0
  391. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/admin_api_client.py +678 -0
  392. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/caddy/ip_geo_locator.py +176 -0
  393. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/__init__.py +0 -0
  394. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/__init__.py +0 -0
  395. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/admin_user_tbl.py +33 -0
  396. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_access_log_tbl.py +90 -0
  397. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_certificate_tbl.py +65 -0
  398. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_rate_limit_tbl.py +69 -0
  399. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_route_tbl.py +66 -0
  400. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/caddy_stats_tbl.py +78 -0
  401. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
  402. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_config_tbl.py +30 -0
  403. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_info_tbl.py +51 -0
  404. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/model/service_instance_tbl.py +68 -0
  405. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/__init__.py +0 -0
  406. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/admin_user_operate.py +59 -0
  407. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_access_log.py +531 -0
  408. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_certificate.py +451 -0
  409. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_rate_limit.py +360 -0
  410. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_route.py +271 -0
  411. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/caddy_stats.py +343 -0
  412. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_action_log_op.py +57 -0
  413. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_config.py +86 -0
  414. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_info_op.py +79 -0
  415. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_instance.py +58 -0
  416. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/db/operate/service_registry.py +138 -0
  417. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/ddl_manager.py +31 -0
  418. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/mongo/__init__.py +1 -0
  419. cancan_microstack-0.0.1/services/opsbffsrv/infrastructure/mongo/log_query_repository.py +87 -0
  420. cancan_microstack-0.0.1/services/opsbffsrv/interface/__init__.py +0 -0
  421. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/__init__.py +0 -0
  422. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/async_operation_api.py +137 -0
  423. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/auth_api.py +113 -0
  424. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/__init__.py +3 -0
  425. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/access_log_api.py +174 -0
  426. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/certificate_api.py +235 -0
  427. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/rate_limit_api.py +302 -0
  428. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/route_api.py +250 -0
  429. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/caddy/stats_api.py +243 -0
  430. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/db_admin_api.py +62 -0
  431. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/db_init_api.py +109 -0
  432. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/instance_management_api.py +165 -0
  433. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/log_query_api.py +41 -0
  434. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/mongo_express_proxy_api.py +181 -0
  435. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/pgweb_proxy_api.py +154 -0
  436. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/rabbitmq_mgmt_proxy_api.py +518 -0
  437. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/redis_commander_proxy_api.py +133 -0
  438. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/service_config.py +146 -0
  439. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/service_logs_api.py +81 -0
  440. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/service_registry.py +66 -0
  441. cancan_microstack-0.0.1/services/opsbffsrv/interface/api/workflow_ops_api.py +413 -0
  442. cancan_microstack-0.0.1/services/opsbffsrv/interface/middleware/__init__.py +0 -0
  443. cancan_microstack-0.0.1/services/opsbffsrv/interface/middleware/auth_middleware.py +52 -0
  444. cancan_microstack-0.0.1/services/opsbffsrv/router.py +901 -0
  445. cancan_microstack-0.0.1/setup.cfg +4 -0
  446. cancan_microstack-0.0.1/tests/test_app_server_registry.py +107 -0
  447. cancan_microstack-0.0.1/tests/test_assets.py +60 -0
  448. cancan_microstack-0.0.1/tests/test_cli.py +119 -0
  449. cancan_microstack-0.0.1/tests/test_compose_builder.py +23 -0
  450. cancan_microstack-0.0.1/tests/test_config_value.py +79 -0
  451. cancan_microstack-0.0.1/tests/test_stack_cli.py +64 -0
  452. cancan_microstack-0.0.1/tests/test_workflow_consts.py +22 -0
  453. cancan_microstack-0.0.1/tests/test_workflow_engine_flow_baseline.py +141 -0
  454. cancan_microstack-0.0.1/tests/test_workflow_inline_queue.py +61 -0
  455. cancan_microstack-0.0.1/tests/test_workflow_nodes_baseline.py +366 -0
  456. cancan_microstack-0.0.1/tests/test_workflow_ops_app_baseline.py +215 -0
  457. cancan_microstack-0.0.1/tests/test_workflow_runtime_context.py +89 -0
  458. cancan_microstack-0.0.1/tests/test_workflow_scheduler_risk.py +125 -0
  459. cancan_microstack-0.0.1/tests/test_workflow_snapshot_baseline.py +693 -0
  460. cancan_microstack-0.0.1/utils/__init__.py +1 -0
  461. 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,9 @@
1
+ global-exclude __pycache__ *.py[cod] *.pyo *.pyd .DS_Store
2
+ prune .pytest_cache
3
+ prune .mypy_cache
4
+ prune .ruff_cache
5
+ prune .venv
6
+ prune build
7
+ prune dist
8
+ exclude .coverage
9
+ exclude coverage.xml
@@ -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
+ [![PyPI](https://img.shields.io/pypi/v/cancan-microstack.svg?color=8b7cff)](https://pypi.org/project/cancan-microstack/)
50
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
51
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](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
+ [![PyPI](https://img.shields.io/pypi/v/cancan-microstack.svg?color=8b7cff)](https://pypi.org/project/cancan-microstack/)
4
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
5
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](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,6 @@
1
+ """Packaged static assets for cancan_microstack.
2
+
3
+ 这些文件会随 cancan_microstack 一起发布,用于导出到业务工作区后再被 Docker/Caddy 等读取。
4
+ These files are shipped with cancan_microstack and can be exported into a workspace,
5
+ so Docker/Caddy can read them via bind mounts.
6
+ """
@@ -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
+