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.
Files changed (440) hide show
  1. cancan_microstack/__init__.py +14 -0
  2. cancan_microstack/__version__.py +10 -0
  3. cancan_microstack/assets/__init__.py +6 -0
  4. cancan_microstack/assets/builds/caddy/Caddyfile +187 -0
  5. cancan_microstack/assets/builds/caddy/DEPLOYMENT.md +303 -0
  6. cancan_microstack/assets/builds/caddy/Dockerfile +46 -0
  7. cancan_microstack/assets/builds/caddy/README.md +343 -0
  8. cancan_microstack/assets/builds/caddy/geoip/README.md +5 -0
  9. cancan_microstack/assets/builds/caddy/start.sh +78 -0
  10. cancan_microstack/assets/builds/caddy/waf/coraza.conf +179 -0
  11. cancan_microstack/assets/builds/service/Dockerfile +59 -0
  12. cancan_microstack/assets/builds/service/README.md +13 -0
  13. cancan_microstack/assets/ddl/create_db.sql +22 -0
  14. cancan_microstack/assets/ddl/infra/execution_log_tbl.sql +46 -0
  15. cancan_microstack/assets/ddl/infra/node_instance_tbl.sql +56 -0
  16. cancan_microstack/assets/ddl/infra/service_action_log_tbl.sql +36 -0
  17. cancan_microstack/assets/ddl/infra/service_config_tbl.sql +26 -0
  18. cancan_microstack/assets/ddl/infra/service_info_tbl.sql +45 -0
  19. cancan_microstack/assets/ddl/infra/service_instance_tbl.sql +54 -0
  20. cancan_microstack/assets/ddl/infra/service_operation_tbl.sql +47 -0
  21. cancan_microstack/assets/ddl/infra/workflow_definition_tbl.sql +60 -0
  22. cancan_microstack/assets/ddl/infra/workflow_definition_version_tbl.sql +35 -0
  23. cancan_microstack/assets/ddl/infra/workflow_engine_alert_tbl.sql +34 -0
  24. cancan_microstack/assets/ddl/infra/workflow_run_tbl.sql +52 -0
  25. cancan_microstack/assets/ddl/ops/admin_user_tbl.sql +34 -0
  26. cancan_microstack/assets/ddl/ops/caddy_access_log_tbl.sql +91 -0
  27. cancan_microstack/assets/ddl/ops/caddy_certificate_tbl.sql +59 -0
  28. cancan_microstack/assets/ddl/ops/caddy_rate_limit_tbl.sql +64 -0
  29. cancan_microstack/assets/ddl/ops/caddy_route_tbl.sql +63 -0
  30. cancan_microstack/assets/ddl/ops/caddy_stats_tbl.sql +77 -0
  31. cancan_microstack/assets/ddl/trigger.sql +21 -0
  32. cancan_microstack/assets/docker/docker-compose.infra.yml +401 -0
  33. cancan_microstack/assets/scripts/README.md +195 -0
  34. cancan_microstack/assets/scripts/docker/build_images.sh +44 -0
  35. cancan_microstack/assets/scripts/docker/force_rebuild_images.sh +38 -0
  36. cancan_microstack/assets/scripts/docker/rebuild_all.sh +34 -0
  37. cancan_microstack/assets/scripts/docker/rebuild_compose.sh +61 -0
  38. cancan_microstack/assets/scripts/docker/restart.sh +35 -0
  39. cancan_microstack/assets/scripts/docker/restart_compose.sh +35 -0
  40. cancan_microstack/assets/scripts/docker/start.sh +78 -0
  41. cancan_microstack/assets/scripts/docker/start_all.sh +46 -0
  42. cancan_microstack/assets/scripts/docker/start_compose.sh +66 -0
  43. cancan_microstack/assets/scripts/docker/stop.sh +67 -0
  44. cancan_microstack/assets/scripts/docker/stop_all.sh +38 -0
  45. cancan_microstack/assets/scripts/docker/stop_compose.sh +38 -0
  46. cancan_microstack/assets/scripts/podman/build_images_podman.sh +59 -0
  47. cancan_microstack/assets/scripts/podman/cleanup_podman.sh +25 -0
  48. cancan_microstack/assets/scripts/podman/force_rebuild_images_podman.sh +56 -0
  49. cancan_microstack/assets/scripts/podman/rebuild_all_podman.sh +37 -0
  50. cancan_microstack/assets/scripts/podman/rebuild_compose_podman.sh +60 -0
  51. cancan_microstack/assets/scripts/podman/restart_compose_podman.sh +73 -0
  52. cancan_microstack/assets/scripts/podman/start_all_podman.sh +66 -0
  53. cancan_microstack/assets/scripts/podman/start_compose_podman.sh +80 -0
  54. cancan_microstack/assets/scripts/podman/start_podman.sh +91 -0
  55. cancan_microstack/assets/scripts/podman/stop.sh +73 -0
  56. cancan_microstack/assets/scripts/podman/stop_all_podman.sh +34 -0
  57. cancan_microstack/assets/scripts/podman/stop_compose_podman.sh +58 -0
  58. cancan_microstack/assets/scripts/start_controllersrv.sh +9 -0
  59. cancan_microstack/assets/scripts/utils/check_all_db_tables.sh +104 -0
  60. cancan_microstack/assets/scripts/utils/check_env.sh +177 -0
  61. cancan_microstack/assets/scripts/utils/check_service_management_deployment.sh +225 -0
  62. cancan_microstack/assets/scripts/utils/deploy_service_management.sh +176 -0
  63. cancan_microstack/assets/scripts/utils/force_reload_infrasrv.sh +52 -0
  64. cancan_microstack/assets/scripts/utils/monitor_service_management.sh +187 -0
  65. cancan_microstack/assets/scripts/utils/reset_postgres_volume.sh +68 -0
  66. cancan_microstack/assets/scripts/utils/test_async_operations.sh +141 -0
  67. cancan_microstack/assets/scripts/utils/verify_real_operations.sh +76 -0
  68. cancan_microstack/assets/service/Dockerfile +65 -0
  69. cancan_microstack/assets/www/adminops/assets/AppEmpty.vue_vue_type_script_setup_true_lang-BOKUurnM.js +1 -0
  70. cancan_microstack/assets/www/adminops/assets/ConfigManage-DKV5YOUz.js +1 -0
  71. cancan_microstack/assets/www/adminops/assets/ConfigManage-Y5bhy7wG.css +1 -0
  72. cancan_microstack/assets/www/adminops/assets/ConsoleManage-8ljYvCW2.js +1 -0
  73. cancan_microstack/assets/www/adminops/assets/ConsoleManage-BWpyqbuQ.css +1 -0
  74. cancan_microstack/assets/www/adminops/assets/DashboardNew-B9Nf1OPl.js +1 -0
  75. cancan_microstack/assets/www/adminops/assets/DashboardNew-DYWZKQ1V.css +1 -0
  76. cancan_microstack/assets/www/adminops/assets/LogSearch-CA0Jhe78.js +1 -0
  77. cancan_microstack/assets/www/adminops/assets/LogSearch-CCZfTNPF.css +1 -0
  78. cancan_microstack/assets/www/adminops/assets/LoginView-BId3kP3M.css +1 -0
  79. cancan_microstack/assets/www/adminops/assets/LoginView-BQZTV_Qy.js +1 -0
  80. cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-BdEYwqFq.js +1 -0
  81. cancan_microstack/assets/www/adminops/assets/OperationProgressDialog-D-pASR8G.css +1 -0
  82. cancan_microstack/assets/www/adminops/assets/PageContainer-Byss-yUC.js +1 -0
  83. cancan_microstack/assets/www/adminops/assets/PageContainer-C3nSZwM7.css +1 -0
  84. cancan_microstack/assets/www/adminops/assets/RateLimitManage-BDI8jLpC.css +1 -0
  85. cancan_microstack/assets/www/adminops/assets/RateLimitManage-DJY4NiF-.js +1 -0
  86. cancan_microstack/assets/www/adminops/assets/RouteManage-DaUQ4QLw.css +1 -0
  87. cancan_microstack/assets/www/adminops/assets/RouteManage-w9XCU0UA.js +1 -0
  88. cancan_microstack/assets/www/adminops/assets/ServiceCard-BFzHe6Tw.css +1 -0
  89. cancan_microstack/assets/www/adminops/assets/ServiceCard-BJUhWnA-.js +1 -0
  90. cancan_microstack/assets/www/adminops/assets/ServiceDetail-Cw24WuKp.js +1 -0
  91. cancan_microstack/assets/www/adminops/assets/ServiceDetail-Yum47zdB.css +1 -0
  92. cancan_microstack/assets/www/adminops/assets/ServiceList-C7ryvbhE.js +1 -0
  93. cancan_microstack/assets/www/adminops/assets/ServiceList-Cgd01fUx.css +1 -0
  94. cancan_microstack/assets/www/adminops/assets/ServiceLogs-COpG9H0h.js +1 -0
  95. cancan_microstack/assets/www/adminops/assets/ServiceLogs-H_Alq0cf.css +1 -0
  96. cancan_microstack/assets/www/adminops/assets/StatsOverview-D0TwMQkA.js +39 -0
  97. cancan_microstack/assets/www/adminops/assets/StatsOverview-lqAN6pqM.css +1 -0
  98. cancan_microstack/assets/www/adminops/assets/TotpBindView-CWlAmzFt.js +1 -0
  99. cancan_microstack/assets/www/adminops/assets/TotpBindView-HoQC1lhx.css +1 -0
  100. cancan_microstack/assets/www/adminops/assets/TotpVerifyView-BHN1VtX1.css +1 -0
  101. cancan_microstack/assets/www/adminops/assets/TotpVerifyView-D3w_lZk8.js +1 -0
  102. cancan_microstack/assets/www/adminops/assets/WorkflowCenter-DU_mpIA0.css +1 -0
  103. cancan_microstack/assets/www/adminops/assets/WorkflowCenter-i50rZyxN.js +1 -0
  104. cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-CnHokPL9.js +1 -0
  105. cancan_microstack/assets/www/adminops/assets/WorkflowDesigner-DaZaZpLd.css +1 -0
  106. cancan_microstack/assets/www/adminops/assets/WorkflowRuns-B09hK48c.js +1 -0
  107. cancan_microstack/assets/www/adminops/assets/WorkflowRuns-wGutKIIU.css +1 -0
  108. cancan_microstack/assets/www/adminops/assets/caddy-nnCKf8fG.js +1 -0
  109. cancan_microstack/assets/www/adminops/assets/format-Cuzxgna9.js +1 -0
  110. cancan_microstack/assets/www/adminops/assets/index-CiFlm8oc.js +64 -0
  111. cancan_microstack/assets/www/adminops/assets/index-UW0T1Dkc.css +1 -0
  112. cancan_microstack/assets/www/adminops/assets/service-BYlgGPs_.js +1 -0
  113. cancan_microstack/assets/www/adminops/assets/service-operation-6GzLw2Z1.js +1 -0
  114. cancan_microstack/assets/www/adminops/assets/style-CcIXnQ5y.css +1 -0
  115. cancan_microstack/assets/www/adminops/assets/style-lRnStdGu.js +39 -0
  116. cancan_microstack/assets/www/adminops/assets/useDebounce-BRlqfXqf.js +1 -0
  117. cancan_microstack/assets/www/adminops/assets/workflow-CUXs39Ac.js +1 -0
  118. cancan_microstack/assets/www/adminops/index.html +16 -0
  119. cancan_microstack/assets/www/adminops/vite.svg +1 -0
  120. cancan_microstack/cli/__init__.py +14 -0
  121. cancan_microstack/cli/__main__.py +9 -0
  122. cancan_microstack/cli/main.py +552 -0
  123. cancan_microstack/cmd/__init__.py +54 -0
  124. cancan_microstack/cmd/cancan/__init__.py +12 -0
  125. cancan_microstack/cmd/cancan/run.py +395 -0
  126. cancan_microstack/cmd/controllersrv/__init__.py +0 -0
  127. cancan_microstack/cmd/controllersrv/run.py +131 -0
  128. cancan_microstack/cmd/infrasrv/__init__.py +5 -0
  129. cancan_microstack/cmd/infrasrv/run.py +100 -0
  130. cancan_microstack/cmd/opsbffsrv/__init__.py +5 -0
  131. cancan_microstack/cmd/opsbffsrv/run.py +96 -0
  132. cancan_microstack/core/__init__.py +5 -0
  133. cancan_microstack/core/assets.py +123 -0
  134. cancan_microstack/core/compose_builder.py +102 -0
  135. cancan_microstack/core/doctor.py +152 -0
  136. cancan_microstack/core/microstack.py +71 -0
  137. cancan_microstack/core/runner.py +56 -0
  138. cancan_microstack/core/stack_manager.py +186 -0
  139. cancan_microstack/public/__init__.py +7 -0
  140. cancan_microstack/public/api/__init__.py +1 -0
  141. cancan_microstack/public/api/controllersrv_client.py +277 -0
  142. cancan_microstack/public/api/infrasrv_client.py +404 -0
  143. cancan_microstack/public/const/__init__.py +1 -0
  144. cancan_microstack/public/const/action_consts.py +18 -0
  145. cancan_microstack/public/const/app_consts.py +42 -0
  146. cancan_microstack/public/const/caddy_consts.py +22 -0
  147. cancan_microstack/public/const/controllersrv_consts.py +163 -0
  148. cancan_microstack/public/const/docker_consts.py +15 -0
  149. cancan_microstack/public/const/error.py +56 -0
  150. cancan_microstack/public/const/health_consts.py +52 -0
  151. cancan_microstack/public/const/hook_enums.py +56 -0
  152. cancan_microstack/public/const/logging_enums.py +13 -0
  153. cancan_microstack/public/const/metrics_enums.py +36 -0
  154. cancan_microstack/public/const/monitor_enums.py +26 -0
  155. cancan_microstack/public/const/operation_consts.py +53 -0
  156. cancan_microstack/public/const/opsbffsrv_error.py +92 -0
  157. cancan_microstack/public/const/overrides_consts.py +13 -0
  158. cancan_microstack/public/const/redis.py +17 -0
  159. cancan_microstack/public/const/service_consts.py +15 -0
  160. cancan_microstack/public/const/workflow_consts.py +65 -0
  161. cancan_microstack/public/error.py +41 -0
  162. cancan_microstack/public/logging/__init__.py +0 -0
  163. cancan_microstack/public/logging/initializer.py +109 -0
  164. cancan_microstack/public/logging/mq_handler.py +279 -0
  165. cancan_microstack/public/schemas/__init__.py +1 -0
  166. cancan_microstack/public/schemas/caddy/__init__.py +381 -0
  167. cancan_microstack/public/schemas/caddy/analysis.py +90 -0
  168. cancan_microstack/public/schemas/caddy/route.py +18 -0
  169. cancan_microstack/public/schemas/common.py +79 -0
  170. cancan_microstack/public/schemas/controllersrv/__init__.py +3 -0
  171. cancan_microstack/public/schemas/controllersrv/async_requests.py +30 -0
  172. cancan_microstack/public/schemas/controllersrv/compose_models.py +47 -0
  173. cancan_microstack/public/schemas/controllersrv/const.py +24 -0
  174. cancan_microstack/public/schemas/controllersrv/docker_models.py +45 -0
  175. cancan_microstack/public/schemas/controllersrv/docker_responses.py +104 -0
  176. cancan_microstack/public/schemas/controllersrv/requests.py +54 -0
  177. cancan_microstack/public/schemas/controllersrv/responses.py +124 -0
  178. cancan_microstack/public/schemas/controllersrv/task_models.py +102 -0
  179. cancan_microstack/public/schemas/controllersrv/validation.py +23 -0
  180. cancan_microstack/public/schemas/hook_metrics.py +124 -0
  181. cancan_microstack/public/schemas/hooks.py +39 -0
  182. cancan_microstack/public/schemas/infra/__init__.py +0 -0
  183. cancan_microstack/public/schemas/infra/cleanup.py +25 -0
  184. cancan_microstack/public/schemas/infra/container.py +74 -0
  185. cancan_microstack/public/schemas/infra/enums.py +135 -0
  186. cancan_microstack/public/schemas/infra/health_check.py +42 -0
  187. cancan_microstack/public/schemas/infra/hook_log.py +42 -0
  188. cancan_microstack/public/schemas/infra/operation.py +90 -0
  189. cancan_microstack/public/schemas/infra/overview.py +25 -0
  190. cancan_microstack/public/schemas/infra/push.py +33 -0
  191. cancan_microstack/public/schemas/infra/service_action_log.py +47 -0
  192. cancan_microstack/public/schemas/infra/service_config.py +10 -0
  193. cancan_microstack/public/schemas/infra/service_info.py +69 -0
  194. cancan_microstack/public/schemas/infra/service_instance.py +93 -0
  195. cancan_microstack/public/schemas/infra/service_management.py +152 -0
  196. cancan_microstack/public/schemas/infra/service_operation.py +79 -0
  197. cancan_microstack/public/schemas/infra/service_registry.py +158 -0
  198. cancan_microstack/public/schemas/infra/status_types.py +19 -0
  199. cancan_microstack/public/schemas/infra/workflow.py +566 -0
  200. cancan_microstack/public/schemas/logging/__init__.py +1 -0
  201. cancan_microstack/public/schemas/logging/log_event.py +121 -0
  202. cancan_microstack/public/schemas/opsbffsrv/__init__.py +1 -0
  203. cancan_microstack/public/schemas/opsbffsrv/async_ops.py +17 -0
  204. cancan_microstack/public/schemas/opsbffsrv/db_admin.py +147 -0
  205. cancan_microstack/public/schemas/opsbffsrv/db_init.py +48 -0
  206. cancan_microstack/public/schemas/opsbffsrv/service_config.py +89 -0
  207. cancan_microstack/public/schemas/opsbffsrv/service_logs.py +54 -0
  208. cancan_microstack/public/schemas/service_operation.py +24 -0
  209. cancan_microstack/public/schemas/service_registry.py +40 -0
  210. cancan_microstack/public/types/__init__.py +7 -0
  211. cancan_microstack/public/web/__init__.py +0 -0
  212. cancan_microstack/public/web/config_value.py +105 -0
  213. cancan_microstack/public/web/server.py +385 -0
  214. cancan_microstack/py.typed +0 -0
  215. cancan_microstack/runtime/__init__.py +0 -0
  216. cancan_microstack/runtime/compose_cmd.py +228 -0
  217. cancan_microstack/runtime/host_daemon.py +318 -0
  218. cancan_microstack/runtime/overrides.py +103 -0
  219. cancan_microstack/runtime/resources.py +25 -0
  220. cancan_microstack/runtime/workspace.py +94 -0
  221. cancan_microstack/services/__init__.py +0 -0
  222. cancan_microstack/services/controllersrv/__init__.py +8 -0
  223. cancan_microstack/services/controllersrv/application/__init__.py +0 -0
  224. cancan_microstack/services/controllersrv/application/docker_compose_app.py +427 -0
  225. cancan_microstack/services/controllersrv/conf/__init__.py +0 -0
  226. cancan_microstack/services/controllersrv/conf/config.py +76 -0
  227. cancan_microstack/services/controllersrv/conf/settings.py +54 -0
  228. cancan_microstack/services/controllersrv/domain/__init__.py +0 -0
  229. cancan_microstack/services/controllersrv/domain/docker_compose/__init__.py +0 -0
  230. cancan_microstack/services/controllersrv/domain/docker_compose/docker_compose_domain.py +278 -0
  231. cancan_microstack/services/controllersrv/domain/service_validator.py +327 -0
  232. cancan_microstack/services/controllersrv/domain/task/__init__.py +17 -0
  233. cancan_microstack/services/controllersrv/domain/task/task_queue.py +286 -0
  234. cancan_microstack/services/controllersrv/domain/task/task_worker.py +495 -0
  235. cancan_microstack/services/controllersrv/infrastructure/__init__.py +0 -0
  236. cancan_microstack/services/controllersrv/interface/__init__.py +0 -0
  237. cancan_microstack/services/controllersrv/interface/api/__init__.py +0 -0
  238. cancan_microstack/services/controllersrv/interface/api/docker_control_api.py +470 -0
  239. cancan_microstack/services/controllersrv/router.py +132 -0
  240. cancan_microstack/services/infrasrv/__init__.py +4 -0
  241. cancan_microstack/services/infrasrv/application/__init__.py +0 -0
  242. cancan_microstack/services/infrasrv/application/health_check_app.py +24 -0
  243. cancan_microstack/services/infrasrv/application/logging/__init__.py +1 -0
  244. cancan_microstack/services/infrasrv/application/logging/log_ingestion_service.py +183 -0
  245. cancan_microstack/services/infrasrv/application/service_config.py +22 -0
  246. cancan_microstack/services/infrasrv/application/service_logs_app.py +53 -0
  247. cancan_microstack/services/infrasrv/application/service_management_app.py +689 -0
  248. cancan_microstack/services/infrasrv/application/service_operation_tracker.py +251 -0
  249. cancan_microstack/services/infrasrv/application/service_registry.py +53 -0
  250. cancan_microstack/services/infrasrv/application/workflow/__init__.py +0 -0
  251. cancan_microstack/services/infrasrv/application/workflow/workflow_app.py +991 -0
  252. cancan_microstack/services/infrasrv/application/workflow/workflow_queue.py +302 -0
  253. cancan_microstack/services/infrasrv/application/workflow/workflow_tasks.py +46 -0
  254. cancan_microstack/services/infrasrv/application/workflow/workflow_worker_runtime.py +122 -0
  255. cancan_microstack/services/infrasrv/conf/__init__.py +0 -0
  256. cancan_microstack/services/infrasrv/conf/config.py +98 -0
  257. cancan_microstack/services/infrasrv/domain/__init__.py +0 -0
  258. cancan_microstack/services/infrasrv/domain/health_check/__init__.py +3 -0
  259. cancan_microstack/services/infrasrv/domain/health_check/health_check_domain.py +576 -0
  260. cancan_microstack/services/infrasrv/domain/hooks/__init__.py +19 -0
  261. cancan_microstack/services/infrasrv/domain/hooks/builtin_hooks.py +308 -0
  262. cancan_microstack/services/infrasrv/domain/hooks/hook_registry.py +43 -0
  263. cancan_microstack/services/infrasrv/domain/hooks/hooks_log_utils.py +275 -0
  264. cancan_microstack/services/infrasrv/domain/hooks/init.py +17 -0
  265. cancan_microstack/services/infrasrv/domain/hooks/metrics.py +205 -0
  266. cancan_microstack/services/infrasrv/domain/hooks/pre_registration_hooks.py +490 -0
  267. cancan_microstack/services/infrasrv/domain/registry/__init__.py +0 -0
  268. cancan_microstack/services/infrasrv/domain/registry/service_registry.py +509 -0
  269. cancan_microstack/services/infrasrv/domain/service_config/__init__.py +0 -0
  270. cancan_microstack/services/infrasrv/domain/service_config/service_config.py +50 -0
  271. cancan_microstack/services/infrasrv/domain/service_logs/__init__.py +0 -0
  272. cancan_microstack/services/infrasrv/domain/service_logs/service_logs_domain.py +51 -0
  273. cancan_microstack/services/infrasrv/domain/workflow/__init__.py +4 -0
  274. cancan_microstack/services/infrasrv/domain/workflow/engine.py +159 -0
  275. cancan_microstack/services/infrasrv/domain/workflow/node_handlers.py +509 -0
  276. cancan_microstack/services/infrasrv/domain/workflow/workflow_domain.py +164 -0
  277. cancan_microstack/services/infrasrv/infrastructure/__init__.py +0 -0
  278. cancan_microstack/services/infrasrv/infrastructure/api/__init__.py +0 -0
  279. cancan_microstack/services/infrasrv/infrastructure/api/controllersrv_api.py +165 -0
  280. cancan_microstack/services/infrasrv/infrastructure/cache/__init__.py +0 -0
  281. cancan_microstack/services/infrasrv/infrastructure/cache/service_registry_cache.py +174 -0
  282. cancan_microstack/services/infrasrv/infrastructure/db/__init__.py +0 -0
  283. cancan_microstack/services/infrasrv/infrastructure/db/model/__init__.py +0 -0
  284. cancan_microstack/services/infrasrv/infrastructure/db/model/execution_log_tbl.py +53 -0
  285. cancan_microstack/services/infrasrv/infrastructure/db/model/node_instance_tbl.py +55 -0
  286. cancan_microstack/services/infrasrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
  287. cancan_microstack/services/infrasrv/infrastructure/db/model/service_config_tbl.py +30 -0
  288. cancan_microstack/services/infrasrv/infrastructure/db/model/service_info_tbl.py +59 -0
  289. cancan_microstack/services/infrasrv/infrastructure/db/model/service_instance_tbl.py +88 -0
  290. cancan_microstack/services/infrasrv/infrastructure/db/model/service_operation_tbl.py +73 -0
  291. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_tbl.py +55 -0
  292. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_definition_version_tbl.py +43 -0
  293. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_engine_alert_tbl.py +57 -0
  294. cancan_microstack/services/infrasrv/infrastructure/db/model/workflow_run_tbl.py +56 -0
  295. cancan_microstack/services/infrasrv/infrastructure/db/operate/__init__.py +0 -0
  296. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_action_log_op.py +239 -0
  297. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config.py +80 -0
  298. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_config_manager.py +198 -0
  299. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_info_op.py +297 -0
  300. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_instance_op.py +688 -0
  301. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_operation_op.py +387 -0
  302. cancan_microstack/services/infrasrv/infrastructure/db/operate/service_registry.py +124 -0
  303. cancan_microstack/services/infrasrv/infrastructure/db/operate/workflow_op.py +804 -0
  304. cancan_microstack/services/infrasrv/infrastructure/ddl_manager.py +31 -0
  305. cancan_microstack/services/infrasrv/infrastructure/mongo/__init__.py +1 -0
  306. cancan_microstack/services/infrasrv/infrastructure/mongo/log_repository.py +129 -0
  307. cancan_microstack/services/infrasrv/interface/__init__.py +0 -0
  308. cancan_microstack/services/infrasrv/interface/api/__init__.py +0 -0
  309. cancan_microstack/services/infrasrv/interface/api/health_check_api.py +29 -0
  310. cancan_microstack/services/infrasrv/interface/api/hooks.py +284 -0
  311. cancan_microstack/services/infrasrv/interface/api/internal.py +49 -0
  312. cancan_microstack/services/infrasrv/interface/api/internal_instance_api.py +265 -0
  313. cancan_microstack/services/infrasrv/interface/api/internal_operation_api.py +206 -0
  314. cancan_microstack/services/infrasrv/interface/api/service_config.py +50 -0
  315. cancan_microstack/services/infrasrv/interface/api/service_logs_api.py +49 -0
  316. cancan_microstack/services/infrasrv/interface/api/service_management_api.py +113 -0
  317. cancan_microstack/services/infrasrv/interface/api/service_registry.py +117 -0
  318. cancan_microstack/services/infrasrv/interface/api/workflow_api.py +303 -0
  319. cancan_microstack/services/infrasrv/interface/schedule/__init__.py +0 -0
  320. cancan_microstack/services/infrasrv/interface/schedule/cleanup.py +13 -0
  321. cancan_microstack/services/infrasrv/interface/schedule/health_check.py +27 -0
  322. cancan_microstack/services/infrasrv/interface/schedule/log_cleanup.py +26 -0
  323. cancan_microstack/services/infrasrv/interface/schedule/operation_tracker.py +25 -0
  324. cancan_microstack/services/infrasrv/interface/schedule/scheduler.py +39 -0
  325. cancan_microstack/services/infrasrv/interface/schedule/workflow_scheduler.py +115 -0
  326. cancan_microstack/services/infrasrv/router.py +341 -0
  327. cancan_microstack/services/opsbffsrv/__init__.py +4 -0
  328. cancan_microstack/services/opsbffsrv/application/__init__.py +0 -0
  329. cancan_microstack/services/opsbffsrv/application/async_operation_app.py +150 -0
  330. cancan_microstack/services/opsbffsrv/application/auth_app.py +285 -0
  331. cancan_microstack/services/opsbffsrv/application/caddy/__init__.py +0 -0
  332. cancan_microstack/services/opsbffsrv/application/caddy/access_log_analysis_app.py +344 -0
  333. cancan_microstack/services/opsbffsrv/application/caddy/access_log_ingestion_service.py +169 -0
  334. cancan_microstack/services/opsbffsrv/application/caddy/certificate_management_app.py +355 -0
  335. cancan_microstack/services/opsbffsrv/application/caddy/rate_limit_management_app.py +496 -0
  336. cancan_microstack/services/opsbffsrv/application/caddy/route_management_app.py +401 -0
  337. cancan_microstack/services/opsbffsrv/application/caddy/stats_aggregation_app.py +364 -0
  338. cancan_microstack/services/opsbffsrv/application/db_admin_app.py +103 -0
  339. cancan_microstack/services/opsbffsrv/application/db_init_app.py +283 -0
  340. cancan_microstack/services/opsbffsrv/application/logging/__init__.py +1 -0
  341. cancan_microstack/services/opsbffsrv/application/logging/log_query_app.py +28 -0
  342. cancan_microstack/services/opsbffsrv/application/service_config.py +158 -0
  343. cancan_microstack/services/opsbffsrv/application/service_logs_app.py +74 -0
  344. cancan_microstack/services/opsbffsrv/application/service_registry.py +36 -0
  345. cancan_microstack/services/opsbffsrv/application/workflow_ops_app.py +730 -0
  346. cancan_microstack/services/opsbffsrv/conf/__init__.py +0 -0
  347. cancan_microstack/services/opsbffsrv/conf/config.py +224 -0
  348. cancan_microstack/services/opsbffsrv/domain/__init__.py +0 -0
  349. cancan_microstack/services/opsbffsrv/domain/auth/__init__.py +0 -0
  350. cancan_microstack/services/opsbffsrv/domain/auth/admin_init.py +38 -0
  351. cancan_microstack/services/opsbffsrv/domain/auth/auth_domain.py +108 -0
  352. cancan_microstack/services/opsbffsrv/domain/caddy/__init__.py +0 -0
  353. cancan_microstack/services/opsbffsrv/domain/caddy/access_log_analysis.py +358 -0
  354. cancan_microstack/services/opsbffsrv/domain/caddy/certificate_management.py +325 -0
  355. cancan_microstack/services/opsbffsrv/domain/caddy/default_routes.py +53 -0
  356. cancan_microstack/services/opsbffsrv/domain/caddy/rate_limit_management.py +308 -0
  357. cancan_microstack/services/opsbffsrv/domain/caddy/route_management.py +279 -0
  358. cancan_microstack/services/opsbffsrv/domain/caddy/stats_aggregation.py +654 -0
  359. cancan_microstack/services/opsbffsrv/domain/db_admin/__init__.py +0 -0
  360. cancan_microstack/services/opsbffsrv/domain/db_admin/db_admin_domain.py +118 -0
  361. cancan_microstack/services/opsbffsrv/domain/db_init/__init__.py +3 -0
  362. cancan_microstack/services/opsbffsrv/domain/db_init/db_init_domain.py +358 -0
  363. cancan_microstack/services/opsbffsrv/domain/logging/__init__.py +1 -0
  364. cancan_microstack/services/opsbffsrv/domain/logging/log_query_domain.py +99 -0
  365. cancan_microstack/services/opsbffsrv/domain/service_config/__init__.py +0 -0
  366. cancan_microstack/services/opsbffsrv/domain/service_config/service_config.py +81 -0
  367. cancan_microstack/services/opsbffsrv/domain/service_registry/__init__.py +0 -0
  368. cancan_microstack/services/opsbffsrv/domain/service_registry/service_registry.py +292 -0
  369. cancan_microstack/services/opsbffsrv/infrastructure/__init__.py +0 -0
  370. cancan_microstack/services/opsbffsrv/infrastructure/api/__init__.py +0 -0
  371. cancan_microstack/services/opsbffsrv/infrastructure/api/infrasrv_api.py +242 -0
  372. cancan_microstack/services/opsbffsrv/infrastructure/auth/__init__.py +0 -0
  373. cancan_microstack/services/opsbffsrv/infrastructure/auth/captcha_service.py +67 -0
  374. cancan_microstack/services/opsbffsrv/infrastructure/auth/password_service.py +12 -0
  375. cancan_microstack/services/opsbffsrv/infrastructure/auth/redis_store.py +131 -0
  376. cancan_microstack/services/opsbffsrv/infrastructure/auth/totp_service.py +59 -0
  377. cancan_microstack/services/opsbffsrv/infrastructure/caddy/__init__.py +0 -0
  378. cancan_microstack/services/opsbffsrv/infrastructure/caddy/access_log_parser.py +307 -0
  379. cancan_microstack/services/opsbffsrv/infrastructure/caddy/admin_api_client.py +678 -0
  380. cancan_microstack/services/opsbffsrv/infrastructure/caddy/ip_geo_locator.py +176 -0
  381. cancan_microstack/services/opsbffsrv/infrastructure/db/__init__.py +0 -0
  382. cancan_microstack/services/opsbffsrv/infrastructure/db/model/__init__.py +0 -0
  383. cancan_microstack/services/opsbffsrv/infrastructure/db/model/admin_user_tbl.py +33 -0
  384. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_access_log_tbl.py +90 -0
  385. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_certificate_tbl.py +65 -0
  386. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_rate_limit_tbl.py +69 -0
  387. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_route_tbl.py +66 -0
  388. cancan_microstack/services/opsbffsrv/infrastructure/db/model/caddy_stats_tbl.py +78 -0
  389. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_action_log_tbl.py +44 -0
  390. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_config_tbl.py +30 -0
  391. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_info_tbl.py +51 -0
  392. cancan_microstack/services/opsbffsrv/infrastructure/db/model/service_instance_tbl.py +68 -0
  393. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/__init__.py +0 -0
  394. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/admin_user_operate.py +59 -0
  395. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_access_log.py +531 -0
  396. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_certificate.py +451 -0
  397. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_rate_limit.py +360 -0
  398. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_route.py +271 -0
  399. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/caddy_stats.py +343 -0
  400. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_action_log_op.py +57 -0
  401. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_config.py +86 -0
  402. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_info_op.py +79 -0
  403. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_instance.py +58 -0
  404. cancan_microstack/services/opsbffsrv/infrastructure/db/operate/service_registry.py +138 -0
  405. cancan_microstack/services/opsbffsrv/infrastructure/ddl_manager.py +31 -0
  406. cancan_microstack/services/opsbffsrv/infrastructure/mongo/__init__.py +1 -0
  407. cancan_microstack/services/opsbffsrv/infrastructure/mongo/log_query_repository.py +87 -0
  408. cancan_microstack/services/opsbffsrv/interface/__init__.py +0 -0
  409. cancan_microstack/services/opsbffsrv/interface/api/__init__.py +0 -0
  410. cancan_microstack/services/opsbffsrv/interface/api/async_operation_api.py +137 -0
  411. cancan_microstack/services/opsbffsrv/interface/api/auth_api.py +113 -0
  412. cancan_microstack/services/opsbffsrv/interface/api/caddy/__init__.py +3 -0
  413. cancan_microstack/services/opsbffsrv/interface/api/caddy/access_log_api.py +174 -0
  414. cancan_microstack/services/opsbffsrv/interface/api/caddy/certificate_api.py +235 -0
  415. cancan_microstack/services/opsbffsrv/interface/api/caddy/rate_limit_api.py +302 -0
  416. cancan_microstack/services/opsbffsrv/interface/api/caddy/route_api.py +250 -0
  417. cancan_microstack/services/opsbffsrv/interface/api/caddy/stats_api.py +243 -0
  418. cancan_microstack/services/opsbffsrv/interface/api/db_admin_api.py +62 -0
  419. cancan_microstack/services/opsbffsrv/interface/api/db_init_api.py +109 -0
  420. cancan_microstack/services/opsbffsrv/interface/api/instance_management_api.py +165 -0
  421. cancan_microstack/services/opsbffsrv/interface/api/log_query_api.py +41 -0
  422. cancan_microstack/services/opsbffsrv/interface/api/mongo_express_proxy_api.py +181 -0
  423. cancan_microstack/services/opsbffsrv/interface/api/pgweb_proxy_api.py +154 -0
  424. cancan_microstack/services/opsbffsrv/interface/api/rabbitmq_mgmt_proxy_api.py +518 -0
  425. cancan_microstack/services/opsbffsrv/interface/api/redis_commander_proxy_api.py +133 -0
  426. cancan_microstack/services/opsbffsrv/interface/api/service_config.py +146 -0
  427. cancan_microstack/services/opsbffsrv/interface/api/service_logs_api.py +81 -0
  428. cancan_microstack/services/opsbffsrv/interface/api/service_registry.py +66 -0
  429. cancan_microstack/services/opsbffsrv/interface/api/workflow_ops_api.py +413 -0
  430. cancan_microstack/services/opsbffsrv/interface/middleware/__init__.py +0 -0
  431. cancan_microstack/services/opsbffsrv/interface/middleware/auth_middleware.py +52 -0
  432. cancan_microstack/services/opsbffsrv/router.py +901 -0
  433. cancan_microstack/utils/__init__.py +1 -0
  434. cancan_microstack/utils/container_env.py +218 -0
  435. cancan_microstack-0.0.1.dist-info/METADATA +155 -0
  436. cancan_microstack-0.0.1.dist-info/RECORD +440 -0
  437. cancan_microstack-0.0.1.dist-info/WHEEL +5 -0
  438. cancan_microstack-0.0.1.dist-info/entry_points.txt +2 -0
  439. cancan_microstack-0.0.1.dist-info/licenses/LICENSE +21 -0
  440. cancan_microstack-0.0.1.dist-info/top_level.txt +1 -0
@@ -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
+
@@ -0,0 +1,303 @@
1
+ # Caddy with Coraza WAF - 部署指南
2
+
3
+ ## 🚀 快速启动(推荐)
4
+
5
+ ```bash
6
+ # 一键启动 Caddy(自动构建镜像)
7
+ cd /path/to/your/project
8
+ ./caddy/start.sh
9
+ ```
10
+
11
+ ---
12
+
13
+ ## 📦 手动部署步骤
14
+
15
+ ### 1. 准备环境
16
+
17
+ ```bash
18
+ # 创建必要的目录
19
+ mkdir -p caddy/{logs,data,config,geoip,waf}
20
+ ```
21
+
22
+ ### 2. 下载 GeoIP 数据库(可选)
23
+
24
+ ```bash
25
+ # 下载 GeoLite2-City 数据库
26
+ cd caddy/geoip
27
+ wget https://git.io/GeoLite2-City.mmdb
28
+ # 或从 MaxMind 官网下载: https://dev.maxmind.com/geoip/geolite2-free-geolocation-data
29
+ ```
30
+
31
+ ### 3. 构建 Caddy 镜像
32
+
33
+ ```bash
34
+ # 构建包含 Coraza WAF 的 Caddy 镜像
35
+ docker-compose build caddy.service
36
+ ```
37
+
38
+ 这个过程会:
39
+ - 使用 `xcaddy` 构建 Caddy
40
+ - 集成 `coraza-caddy/v2` WAF 模块
41
+ - 集成 `caddy-dns/cloudflare` DNS 插件
42
+ - 构建时间约 3-5 分钟
43
+
44
+ ### 4. 启动服务
45
+
46
+ ```bash
47
+ # 启动 Caddy
48
+ docker-compose up -d caddy.service
49
+
50
+ # 查看日志
51
+ docker-compose logs -f caddy.service
52
+ ```
53
+
54
+ ### 5. 验证部署
55
+
56
+ ```bash
57
+ # 检查服务状态
58
+ docker-compose ps caddy.service
59
+
60
+ # 测试健康检查
61
+ curl http://localhost/health
62
+
63
+ # 测试 WAF(应该返回 403)
64
+ curl "http://localhost/v1/besrv/api?id=1' OR '1'='1"
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 🛡️ WAF 功能验证
70
+
71
+ ### SQL 注入防护测试
72
+
73
+ ```bash
74
+ # 应该被阻止(403 Forbidden)
75
+ curl -v "http://localhost/v1/besrv/api?id=1' OR '1'='1"
76
+ curl -v "http://localhost/v1/besrv/api?name=admin'--"
77
+ curl -v "http://localhost/v1/besrv/api?q=SELECT * FROM users"
78
+
79
+ # 正常请求应该成功(200 OK)
80
+ curl -v "http://localhost/v1/besrv/api?id=123"
81
+ ```
82
+
83
+ ### XSS 防护测试
84
+
85
+ ```bash
86
+ # 应该被阻止(403 Forbidden)
87
+ curl -v "http://localhost/v1/besrv/api?name=<script>alert(1)</script>"
88
+ curl -v "http://localhost/v1/besrv/api?html=<iframe src=evil.com>"
89
+ curl -v "http://localhost/v1/besrv/api?js=javascript:alert(1)"
90
+
91
+ # 正常请求应该成功
92
+ curl -v "http://localhost/v1/besrv/api?name=John"
93
+ ```
94
+
95
+ ### 路径遍历防护测试
96
+
97
+ ```bash
98
+ # 应该被阻止(403 Forbidden)
99
+ curl -v "http://localhost/.env"
100
+ curl -v "http://localhost/.git/config"
101
+ curl -v "http://localhost/backup/database.sql"
102
+ curl -v "http://localhost/phpMyAdmin/"
103
+
104
+ # 正常请求应该成功
105
+ curl -v "http://localhost/v1/besrv/api"
106
+ ```
107
+
108
+ ### Content-Type 验证测试
109
+
110
+ ```bash
111
+ # POST 请求没有正确的 Content-Type 会被拒绝(400 Bad Request)
112
+ curl -X POST "http://localhost/v1/besrv/api" \
113
+ -d "data=test"
114
+
115
+ # 正确的请求(200 OK)
116
+ curl -X POST "http://localhost/v1/besrv/api" \
117
+ -H "Content-Type: application/json" \
118
+ -d '{"key":"value"}'
119
+ ```
120
+
121
+ ---
122
+
123
+ ## 📊 监控和日志
124
+
125
+ ### 查看 WAF 审计日志
126
+
127
+ ```bash
128
+ # 实时查看 WAF 拦截记录
129
+ docker exec cancan_caddy tail -f /var/log/caddy/waf-audit.log
130
+ ```
131
+
132
+ ### 查看访问日志
133
+
134
+ ```bash
135
+ # JSON 格式访问日志
136
+ docker exec cancan_caddy tail -f /var/log/caddy/access.json
137
+
138
+ # 人类可读的访问日志
139
+ docker exec cancan_caddy tail -f /var/log/caddy/access.log
140
+ ```
141
+
142
+ ### 查看 Caddy 日志
143
+
144
+ ```bash
145
+ # 容器日志
146
+ docker-compose logs -f caddy.service
147
+
148
+ # 进入容器查看详细日志
149
+ docker exec -it cancan_caddy sh
150
+ ls -lh /var/log/caddy/
151
+ ```
152
+
153
+ ---
154
+
155
+ ## ⚙️ 配置调整
156
+
157
+ ### 修改 WAF 偏执级别
158
+
159
+ 编辑 `caddy/waf/coraza.conf`:
160
+
161
+ ```conf
162
+ # 偏执级别:1=宽松, 2=标准, 3=严格, 4=极端
163
+ setvar:tx.paranoia_level=2
164
+ ```
165
+
166
+ 修改后重启:
167
+ ```bash
168
+ docker-compose restart caddy.service
169
+ ```
170
+
171
+ ### 添加 IP 白名单
172
+
173
+ 编辑 `caddy/waf/coraza.conf`,添加:
174
+
175
+ ```conf
176
+ # 允许特定 IP 绕过 WAF
177
+ SecRule REMOTE_ADDR "@ipMatch 192.168.1.0/24" \
178
+ "id:900401,phase:1,pass,nolog,ctl:ruleEngine=Off"
179
+ ```
180
+
181
+ ### 禁用特定 WAF 规则
182
+
183
+ 如果遇到误报,可以禁用特定规则:
184
+
185
+ ```conf
186
+ # 禁用规则 ID 900510(SQL 注入检测)
187
+ SecRuleRemoveById 900510
188
+ ```
189
+
190
+ ---
191
+
192
+ ## 🔧 故障排查
193
+
194
+ ### Caddy 无法启动
195
+
196
+ ```bash
197
+ # 查看详细错误
198
+ docker-compose logs caddy.service
199
+
200
+ # 常见问题:
201
+ # 1. 端口 80/443 被占用
202
+ # 2. Caddyfile 语法错误
203
+ # 3. WAF 配置文件路径不正确
204
+ ```
205
+
206
+ ### WAF 误报(阻止正常请求)
207
+
208
+ 1. **查看审计日志**找到触发的规则 ID:
209
+ ```bash
210
+ docker exec cancan_caddy tail -100 /var/log/caddy/waf-audit.log
211
+ ```
212
+
213
+ 2. **临时禁用规则**(在 `coraza.conf` 中):
214
+ ```conf
215
+ SecRuleRemoveById <规则ID>
216
+ ```
217
+
218
+ 3. **降低偏执级别**(改为 1)
219
+
220
+ ### 验证 Coraza 模块是否加载
221
+
222
+ ```bash
223
+ # 进入容器
224
+ docker exec -it cancan_caddy sh
225
+
226
+ # 列出所有模块
227
+ /usr/bin/caddy list-modules | grep coraza
228
+
229
+ # 应该看到:
230
+ # http.handlers.coraza_waf
231
+ ```
232
+
233
+ ---
234
+
235
+ ## 📈 性能建议
236
+
237
+ ### 生产环境优化
238
+
239
+ 1. **关闭调试日志**:
240
+ ```conf
241
+ SecDebugLogLevel 3 # 改为 3(仅警告)
242
+ ```
243
+
244
+ 2. **限制审计日志**:
245
+ ```conf
246
+ SecAuditEngine RelevantOnly
247
+ SecAuditLogRelevantStatus "^(?:5|4(?!04))"
248
+ ```
249
+
250
+ 3. **关闭响应体检查**(已默认关闭):
251
+ ```conf
252
+ SecResponseBodyAccess Off
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 🌐 完整 OWASP CRS(可选)
258
+
259
+ 如果需要使用完整的 OWASP Core Rule Set:
260
+
261
+ ```bash
262
+ # 下载 OWASP CRS
263
+ cd caddy/waf
264
+ wget https://github.com/coreruleset/coreruleset/archive/v4.0.0.tar.gz
265
+ tar -xzf v4.0.0.tar.gz
266
+ mv coreruleset-4.0.0 owasp-crs
267
+
268
+ # 复制配置文件
269
+ cp owasp-crs/crs-setup.conf.example owasp-crs/crs-setup.conf
270
+
271
+ # 更新 coraza.conf,添加:
272
+ # Include /etc/caddy/waf/owasp-crs/crs-setup.conf
273
+ # Include /etc/caddy/waf/owasp-crs/rules/*.conf
274
+
275
+ # 重新构建和启动
276
+ docker-compose build caddy.service
277
+ docker-compose up -d caddy.service
278
+ ```
279
+
280
+ ---
281
+
282
+ ## 📚 相关文档
283
+
284
+ - [Caddy 完整配置说明](./README.md)
285
+ - [API 文档 v3.0](../OPSBFFSRV_API_DOCUMENTATION_V3.md)
286
+ - [Coraza WAF 官方文档](https://coraza.io/docs/)
287
+ - [OWASP CRS 文档](https://coreruleset.org/docs/)
288
+
289
+ ---
290
+
291
+ ## ⚠️ 安全提醒
292
+
293
+ 1. ✅ **定期更新** WAF 规则和 Caddy 版本
294
+ 2. ✅ **监控日志** 每日检查 WAF 审计日志
295
+ 3. ✅ **测试先行** 在测试环境验证配置后再应用到生产
296
+ 4. ✅ **备份配置** 修改前先备份配置文件
297
+ 5. ✅ **调整规则** 根据业务需求调整 WAF 规则,避免误报
298
+
299
+ ---
300
+
301
+ **部署完成!**
302
+
303
+ 现在您的 API 网关已经启用了企业级的 WAF 防护 🛡️
@@ -0,0 +1,46 @@
1
+ # Caddy with Coraza WAF
2
+ # 使用 xcaddy 构建包含 Coraza WAF 模块的 Caddy
3
+
4
+ FROM caddy:2-builder-alpine AS builder
5
+
6
+ # Go module download mirrors for restricted networks (override via build args).
7
+ # 受限网络下的 Go 模块代理(可通过 build args 覆盖)。
8
+ ARG GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct
9
+ ARG GOSUMDB=sum.golang.google.cn
10
+ ENV GOPROXY=${GOPROXY}
11
+ ENV GOSUMDB=${GOSUMDB}
12
+
13
+ # 使用 xcaddy 构建带有 Coraza WAF 的 Caddy
14
+ RUN xcaddy build \
15
+ --with github.com/corazawaf/coraza-caddy/v2 \
16
+ --with github.com/mholt/caddy-ratelimit \
17
+ --with github.com/caddy-dns/cloudflare
18
+
19
+ # 最终镜像
20
+ FROM alpine:latest
21
+
22
+ # 安装运行时依赖
23
+ RUN apk add --no-cache \
24
+ ca-certificates \
25
+ mailcap \
26
+ curl \
27
+ wget
28
+
29
+ # 从 builder 阶段复制编译好的 Caddy
30
+ COPY --from=builder /usr/bin/caddy /usr/bin/caddy
31
+
32
+ # 创建必要的目录
33
+ RUN mkdir -p /etc/caddy /data /config /var/log/caddy /usr/share/GeoIP /srv/www
34
+
35
+ # 设置工作目录
36
+ WORKDIR /srv
37
+
38
+ # 暴露端口
39
+ EXPOSE 80 443 2019
40
+
41
+ # 健康检查
42
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
43
+ CMD wget --quiet --tries=1 --spider http://localhost:2019/config/ || exit 1
44
+
45
+ # 启动 Caddy
46
+ CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]