container-superposition 0.1.1

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 (327) hide show
  1. package/README.md +843 -0
  2. package/dist/scripts/init.d.ts +3 -0
  3. package/dist/scripts/init.d.ts.map +1 -0
  4. package/dist/scripts/init.js +1190 -0
  5. package/dist/scripts/init.js.map +1 -0
  6. package/dist/scripts/migrate-to-manifests.d.ts +12 -0
  7. package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
  8. package/dist/scripts/migrate-to-manifests.js +230 -0
  9. package/dist/scripts/migrate-to-manifests.js.map +1 -0
  10. package/dist/tool/questionnaire/composer.d.ts +6 -0
  11. package/dist/tool/questionnaire/composer.d.ts.map +1 -0
  12. package/dist/tool/questionnaire/composer.js +1232 -0
  13. package/dist/tool/questionnaire/composer.js.map +1 -0
  14. package/dist/tool/readme/markdown-parser.d.ts +30 -0
  15. package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
  16. package/dist/tool/readme/markdown-parser.js +139 -0
  17. package/dist/tool/readme/markdown-parser.js.map +1 -0
  18. package/dist/tool/readme/readme-generator.d.ts +9 -0
  19. package/dist/tool/readme/readme-generator.d.ts.map +1 -0
  20. package/dist/tool/readme/readme-generator.js +422 -0
  21. package/dist/tool/readme/readme-generator.js.map +1 -0
  22. package/dist/tool/schema/custom-loader.d.ts +17 -0
  23. package/dist/tool/schema/custom-loader.d.ts.map +1 -0
  24. package/dist/tool/schema/custom-loader.js +149 -0
  25. package/dist/tool/schema/custom-loader.js.map +1 -0
  26. package/dist/tool/schema/overlay-loader.d.ts +47 -0
  27. package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
  28. package/dist/tool/schema/overlay-loader.js +252 -0
  29. package/dist/tool/schema/overlay-loader.js.map +1 -0
  30. package/dist/tool/schema/types.d.ts +212 -0
  31. package/dist/tool/schema/types.d.ts.map +1 -0
  32. package/dist/tool/schema/types.js +5 -0
  33. package/dist/tool/schema/types.js.map +1 -0
  34. package/docs/README.md +308 -0
  35. package/docs/architecture.md +233 -0
  36. package/docs/creating-overlays.md +549 -0
  37. package/docs/custom-patches.md +540 -0
  38. package/docs/dependencies.md +279 -0
  39. package/docs/examples/custom-patches-example.md +85 -0
  40. package/docs/examples.md +576 -0
  41. package/docs/messaging-comparison.md +265 -0
  42. package/docs/messaging-quick-start.md +385 -0
  43. package/docs/observability-workflow.md +537 -0
  44. package/docs/overlay-manifest-refactoring.md +214 -0
  45. package/docs/overlay-metadata-archive.md +54 -0
  46. package/docs/overlays.md +523 -0
  47. package/docs/presets-architecture.md +498 -0
  48. package/docs/presets.md +366 -0
  49. package/docs/publishing.md +476 -0
  50. package/docs/quick-reference.md +326 -0
  51. package/docs/ux.md +170 -0
  52. package/features/README.md +85 -0
  53. package/features/cross-distro-packages/README.md +146 -0
  54. package/features/cross-distro-packages/devcontainer-feature.json +20 -0
  55. package/features/cross-distro-packages/install.sh +58 -0
  56. package/features/local-secrets-manager/devcontainer-feature.json +18 -0
  57. package/features/local-secrets-manager/install.sh +127 -0
  58. package/features/project-scaffolder/devcontainer-feature.json +24 -0
  59. package/features/project-scaffolder/install.sh +100 -0
  60. package/features/team-conventions/devcontainer-feature.json +24 -0
  61. package/features/team-conventions/install.sh +93 -0
  62. package/overlays/.registry/README.md +14 -0
  63. package/overlays/.registry/base-images.yml +26 -0
  64. package/overlays/.registry/base-templates.yml +7 -0
  65. package/overlays/README.md +155 -0
  66. package/overlays/alertmanager/.env.example +5 -0
  67. package/overlays/alertmanager/README.md +465 -0
  68. package/overlays/alertmanager/alert-rules.yml +56 -0
  69. package/overlays/alertmanager/alertmanager.yml +42 -0
  70. package/overlays/alertmanager/devcontainer.patch.json +12 -0
  71. package/overlays/alertmanager/docker-compose.yml +20 -0
  72. package/overlays/alertmanager/overlay.yml +17 -0
  73. package/overlays/alertmanager/setup.sh +53 -0
  74. package/overlays/alertmanager/verify.sh +31 -0
  75. package/overlays/aws-cli/README.md +473 -0
  76. package/overlays/aws-cli/devcontainer.patch.json +13 -0
  77. package/overlays/aws-cli/overlay.yml +13 -0
  78. package/overlays/azure-cli/README.md +551 -0
  79. package/overlays/azure-cli/devcontainer.patch.json +8 -0
  80. package/overlays/azure-cli/overlay.yml +13 -0
  81. package/overlays/bun/README.md +312 -0
  82. package/overlays/bun/devcontainer.patch.json +41 -0
  83. package/overlays/bun/overlay.yml +16 -0
  84. package/overlays/bun/setup.sh +79 -0
  85. package/overlays/bun/verify.sh +30 -0
  86. package/overlays/codex/README.md +128 -0
  87. package/overlays/codex/devcontainer.patch.json +3 -0
  88. package/overlays/codex/overlay.yml +14 -0
  89. package/overlays/codex/setup.sh +24 -0
  90. package/overlays/codex/verify.sh +30 -0
  91. package/overlays/commitlint/README.md +333 -0
  92. package/overlays/commitlint/devcontainer.patch.json +8 -0
  93. package/overlays/commitlint/overlay.yml +16 -0
  94. package/overlays/commitlint/setup.sh +234 -0
  95. package/overlays/direnv/README.md +504 -0
  96. package/overlays/direnv/devcontainer.patch.json +6 -0
  97. package/overlays/direnv/overlay.yml +13 -0
  98. package/overlays/direnv/setup.sh +139 -0
  99. package/overlays/docker-in-docker/README.md +534 -0
  100. package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
  101. package/overlays/docker-in-docker/overlay.yml +13 -0
  102. package/overlays/docker-sock/README.md +256 -0
  103. package/overlays/docker-sock/devcontainer.patch.json +9 -0
  104. package/overlays/docker-sock/docker-compose.yml +8 -0
  105. package/overlays/docker-sock/overlay.yml +13 -0
  106. package/overlays/dotnet/README.md +147 -0
  107. package/overlays/dotnet/devcontainer.patch.json +51 -0
  108. package/overlays/dotnet/global-tools.txt +24 -0
  109. package/overlays/dotnet/overlay.yml +13 -0
  110. package/overlays/dotnet/setup.sh +51 -0
  111. package/overlays/dotnet/verify.sh +26 -0
  112. package/overlays/gcloud/README.md +269 -0
  113. package/overlays/gcloud/devcontainer.patch.json +14 -0
  114. package/overlays/gcloud/overlay.yml +14 -0
  115. package/overlays/gcloud/verify.sh +52 -0
  116. package/overlays/git-helpers/README.md +168 -0
  117. package/overlays/git-helpers/devcontainer.patch.json +33 -0
  118. package/overlays/git-helpers/overlay.yml +15 -0
  119. package/overlays/git-helpers/setup.sh +91 -0
  120. package/overlays/go/README.md +293 -0
  121. package/overlays/go/devcontainer.patch.json +43 -0
  122. package/overlays/go/overlay.yml +15 -0
  123. package/overlays/go/setup.sh +33 -0
  124. package/overlays/go/verify.sh +40 -0
  125. package/overlays/grafana/.env.example +9 -0
  126. package/overlays/grafana/README.md +462 -0
  127. package/overlays/grafana/dashboard-provider.yml +11 -0
  128. package/overlays/grafana/dashboards/observability-overview.json +263 -0
  129. package/overlays/grafana/devcontainer.patch.json +12 -0
  130. package/overlays/grafana/docker-compose.yml +27 -0
  131. package/overlays/grafana/grafana-datasources.yml +57 -0
  132. package/overlays/grafana/overlay.yml +21 -0
  133. package/overlays/grafana/verify.sh +34 -0
  134. package/overlays/jaeger/.env.example +7 -0
  135. package/overlays/jaeger/README.md +867 -0
  136. package/overlays/jaeger/devcontainer.patch.json +12 -0
  137. package/overlays/jaeger/docker-compose.yml +17 -0
  138. package/overlays/jaeger/overlay.yml +19 -0
  139. package/overlays/java/README.md +267 -0
  140. package/overlays/java/devcontainer.patch.json +44 -0
  141. package/overlays/java/overlay.yml +16 -0
  142. package/overlays/java/setup.sh +41 -0
  143. package/overlays/java/verify.sh +42 -0
  144. package/overlays/just/README.md +443 -0
  145. package/overlays/just/devcontainer.patch.json +3 -0
  146. package/overlays/just/overlay.yml +13 -0
  147. package/overlays/just/setup.sh +182 -0
  148. package/overlays/kubectl-helm/README.md +660 -0
  149. package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
  150. package/overlays/kubectl-helm/overlay.yml +13 -0
  151. package/overlays/loki/.env.example +5 -0
  152. package/overlays/loki/README.md +1156 -0
  153. package/overlays/loki/devcontainer.patch.json +12 -0
  154. package/overlays/loki/docker-compose.yml +18 -0
  155. package/overlays/loki/loki-config.yaml +45 -0
  156. package/overlays/loki/overlay.yml +17 -0
  157. package/overlays/minio/.env.example +9 -0
  158. package/overlays/minio/README.md +639 -0
  159. package/overlays/minio/devcontainer.patch.json +30 -0
  160. package/overlays/minio/docker-compose.yml +28 -0
  161. package/overlays/minio/overlay.yml +18 -0
  162. package/overlays/minio/setup.sh +61 -0
  163. package/overlays/minio/verify.sh +64 -0
  164. package/overlays/mkdocs/README.md +309 -0
  165. package/overlays/mkdocs/devcontainer.patch.json +24 -0
  166. package/overlays/mkdocs/overlay.yml +15 -0
  167. package/overlays/modern-cli-tools/README.md +556 -0
  168. package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
  169. package/overlays/modern-cli-tools/overlay.yml +13 -0
  170. package/overlays/modern-cli-tools/setup.sh +153 -0
  171. package/overlays/mongodb/.env.example +9 -0
  172. package/overlays/mongodb/README.md +481 -0
  173. package/overlays/mongodb/devcontainer.patch.json +32 -0
  174. package/overlays/mongodb/docker-compose.yml +44 -0
  175. package/overlays/mongodb/overlay.yml +17 -0
  176. package/overlays/mongodb/verify.sh +48 -0
  177. package/overlays/mysql/.env.example +11 -0
  178. package/overlays/mysql/README.md +542 -0
  179. package/overlays/mysql/devcontainer.patch.json +34 -0
  180. package/overlays/mysql/docker-compose.yml +55 -0
  181. package/overlays/mysql/overlay.yml +16 -0
  182. package/overlays/mysql/verify.sh +48 -0
  183. package/overlays/nats/.env.example +5 -0
  184. package/overlays/nats/README.md +762 -0
  185. package/overlays/nats/devcontainer.patch.json +24 -0
  186. package/overlays/nats/docker-compose.yml +31 -0
  187. package/overlays/nats/overlay.yml +18 -0
  188. package/overlays/nats/verify.sh +50 -0
  189. package/overlays/ngrok/README.md +503 -0
  190. package/overlays/ngrok/devcontainer.patch.json +3 -0
  191. package/overlays/ngrok/overlay.yml +14 -0
  192. package/overlays/ngrok/setup.sh +125 -0
  193. package/overlays/nodejs/README.md +192 -0
  194. package/overlays/nodejs/devcontainer.patch.json +49 -0
  195. package/overlays/nodejs/global-packages.txt +16 -0
  196. package/overlays/nodejs/overlay.yml +14 -0
  197. package/overlays/nodejs/setup.sh +46 -0
  198. package/overlays/nodejs/verify.sh +32 -0
  199. package/overlays/otel-collector/.env.example +9 -0
  200. package/overlays/otel-collector/README.md +1257 -0
  201. package/overlays/otel-collector/devcontainer.patch.json +28 -0
  202. package/overlays/otel-collector/docker-compose.yml +22 -0
  203. package/overlays/otel-collector/otel-collector-config.yaml +68 -0
  204. package/overlays/otel-collector/overlay.yml +21 -0
  205. package/overlays/otel-collector/setup.sh +49 -0
  206. package/overlays/otel-demo-nodejs/.env.example +2 -0
  207. package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
  208. package/overlays/otel-demo-nodejs/README.md +409 -0
  209. package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
  210. package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
  211. package/overlays/otel-demo-nodejs/overlay.yml +23 -0
  212. package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
  213. package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
  214. package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
  215. package/overlays/otel-demo-nodejs/verify.sh +31 -0
  216. package/overlays/otel-demo-python/.env.example +2 -0
  217. package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
  218. package/overlays/otel-demo-python/README.md +82 -0
  219. package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
  220. package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
  221. package/overlays/otel-demo-python/docker-compose.yml +19 -0
  222. package/overlays/otel-demo-python/overlay.yml +23 -0
  223. package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
  224. package/overlays/otel-demo-python/verify.sh +31 -0
  225. package/overlays/playwright/README.md +629 -0
  226. package/overlays/playwright/devcontainer.patch.json +9 -0
  227. package/overlays/playwright/overlay.yml +13 -0
  228. package/overlays/postgres/.env.example +6 -0
  229. package/overlays/postgres/README.md +602 -0
  230. package/overlays/postgres/devcontainer.patch.json +21 -0
  231. package/overlays/postgres/docker-compose.yml +22 -0
  232. package/overlays/postgres/overlay.yml +15 -0
  233. package/overlays/postgres/verify.sh +45 -0
  234. package/overlays/powershell/README.md +314 -0
  235. package/overlays/powershell/devcontainer.patch.json +22 -0
  236. package/overlays/powershell/overlay.yml +13 -0
  237. package/overlays/powershell/setup.sh +29 -0
  238. package/overlays/powershell/verify.sh +38 -0
  239. package/overlays/pre-commit/README.md +263 -0
  240. package/overlays/pre-commit/devcontainer.patch.json +9 -0
  241. package/overlays/pre-commit/overlay.yml +16 -0
  242. package/overlays/pre-commit/setup.sh +129 -0
  243. package/overlays/presets/docs-site.yml +118 -0
  244. package/overlays/presets/fullstack.yml +181 -0
  245. package/overlays/presets/microservice.yml +118 -0
  246. package/overlays/presets/web-api.yml +109 -0
  247. package/overlays/prometheus/.env.example +5 -0
  248. package/overlays/prometheus/README.md +1246 -0
  249. package/overlays/prometheus/devcontainer.patch.json +12 -0
  250. package/overlays/prometheus/docker-compose.yml +22 -0
  251. package/overlays/prometheus/overlay.yml +17 -0
  252. package/overlays/prometheus/prometheus.yml +12 -0
  253. package/overlays/prometheus/verify.sh +34 -0
  254. package/overlays/promtail/.env.example +2 -0
  255. package/overlays/promtail/README.md +357 -0
  256. package/overlays/promtail/devcontainer.patch.json +5 -0
  257. package/overlays/promtail/docker-compose.yml +16 -0
  258. package/overlays/promtail/overlay.yml +17 -0
  259. package/overlays/promtail/promtail-config.yaml +60 -0
  260. package/overlays/promtail/verify.sh +31 -0
  261. package/overlays/pulumi/README.md +472 -0
  262. package/overlays/pulumi/devcontainer.patch.json +13 -0
  263. package/overlays/pulumi/overlay.yml +14 -0
  264. package/overlays/pulumi/verify.sh +31 -0
  265. package/overlays/python/README.md +919 -0
  266. package/overlays/python/devcontainer.patch.json +41 -0
  267. package/overlays/python/overlay.yml +12 -0
  268. package/overlays/python/requirements-overlay.txt +13 -0
  269. package/overlays/python/setup.sh +47 -0
  270. package/overlays/python/verify.sh +32 -0
  271. package/overlays/rabbitmq/.env.example +7 -0
  272. package/overlays/rabbitmq/README.md +680 -0
  273. package/overlays/rabbitmq/devcontainer.patch.json +28 -0
  274. package/overlays/rabbitmq/docker-compose.yml +30 -0
  275. package/overlays/rabbitmq/overlay.yml +18 -0
  276. package/overlays/rabbitmq/verify.sh +41 -0
  277. package/overlays/redis/.env.example +4 -0
  278. package/overlays/redis/README.md +776 -0
  279. package/overlays/redis/devcontainer.patch.json +21 -0
  280. package/overlays/redis/docker-compose.yml +21 -0
  281. package/overlays/redis/overlay.yml +15 -0
  282. package/overlays/redis/verify.sh +41 -0
  283. package/overlays/redpanda/.env.example +10 -0
  284. package/overlays/redpanda/README.md +703 -0
  285. package/overlays/redpanda/devcontainer.patch.json +37 -0
  286. package/overlays/redpanda/docker-compose.yml +67 -0
  287. package/overlays/redpanda/overlay.yml +21 -0
  288. package/overlays/redpanda/verify.sh +48 -0
  289. package/overlays/rust/README.md +299 -0
  290. package/overlays/rust/devcontainer.patch.json +39 -0
  291. package/overlays/rust/overlay.yml +15 -0
  292. package/overlays/rust/setup.sh +36 -0
  293. package/overlays/rust/verify.sh +51 -0
  294. package/overlays/sqlite/README.md +584 -0
  295. package/overlays/sqlite/devcontainer.patch.json +14 -0
  296. package/overlays/sqlite/overlay.yml +15 -0
  297. package/overlays/sqlite/setup.sh +27 -0
  298. package/overlays/sqlite/verify.sh +43 -0
  299. package/overlays/sqlserver/.env.example +6 -0
  300. package/overlays/sqlserver/README.md +592 -0
  301. package/overlays/sqlserver/devcontainer.patch.json +22 -0
  302. package/overlays/sqlserver/docker-compose.yml +32 -0
  303. package/overlays/sqlserver/overlay.yml +17 -0
  304. package/overlays/sqlserver/verify.sh +30 -0
  305. package/overlays/tempo/.env.example +5 -0
  306. package/overlays/tempo/README.md +273 -0
  307. package/overlays/tempo/devcontainer.patch.json +12 -0
  308. package/overlays/tempo/docker-compose.yml +20 -0
  309. package/overlays/tempo/overlay.yml +20 -0
  310. package/overlays/tempo/tempo-config.yaml +32 -0
  311. package/overlays/tempo/verify.sh +31 -0
  312. package/overlays/terraform/README.md +389 -0
  313. package/overlays/terraform/devcontainer.patch.json +15 -0
  314. package/overlays/terraform/overlay.yml +14 -0
  315. package/overlays/terraform/verify.sh +63 -0
  316. package/package.json +74 -0
  317. package/templates/README.md +285 -0
  318. package/templates/compose/.devcontainer/devcontainer.json +46 -0
  319. package/templates/compose/.devcontainer/docker-compose.yml +12 -0
  320. package/templates/compose/README.md +20 -0
  321. package/templates/plain/.devcontainer/devcontainer.json +35 -0
  322. package/templates/plain/README.md +21 -0
  323. package/tool/README.md +281 -0
  324. package/tool/schema/base-images.schema.json +43 -0
  325. package/tool/schema/base-templates.schema.json +34 -0
  326. package/tool/schema/config.schema.json +71 -0
  327. package/tool/schema/overlay-manifest.schema.json +86 -0
@@ -0,0 +1,155 @@
1
+ # Overlays
2
+
3
+ Overlays are composable configuration fragments that add specific capabilities to your base devcontainer template.
4
+
5
+ ## Structure
6
+
7
+ Each overlay directory contains:
8
+
9
+ - `devcontainer.patch.json` - Partial devcontainer configuration to merge
10
+ - `docker-compose.yml` (optional) - Service definitions for Docker Compose
11
+ - `.env.example` (optional) - Environment variables for this overlay
12
+ - Additional configuration files as needed (e.g., `otel-collector.yml`, config directories)
13
+
14
+ ## Available Overlays
15
+
16
+ ### Language & Framework
17
+
18
+ - **dotnet** - .NET 10 SDK with C# DevKit, testing tools, and build essentials
19
+ - **nodejs** - Node.js LTS with TypeScript, ESLint, Prettier, and npm tools
20
+ - **python** - Python 3.12 with Pylance, Black formatter, and Ruff linter
21
+ - **mkdocs** - Python with MkDocs and Material theme for documentation
22
+
23
+ ### Databases & Storage
24
+
25
+ - **postgres** - PostgreSQL 16 with client tools and environment variables
26
+ - **redis** - Redis 7 with redis-tools and persistence
27
+ - **mongodb** - MongoDB 8 with Mongo Express web UI
28
+ - **mysql** - MySQL 8 with phpMyAdmin web UI
29
+ - **sqlserver** - SQL Server 2022 for Linux
30
+ - **sqlite** - SQLite with litecli and VS Code extensions
31
+ - **minio** - S3-compatible object storage with web console
32
+
33
+ ### Messaging & Streaming
34
+
35
+ - **rabbitmq** - RabbitMQ message broker with AMQP protocol and management UI
36
+ - **redpanda** - Kafka-compatible event streaming with web console (lighter than Kafka)
37
+ - **nats** - NATS messaging with JetStream for pub/sub and streaming
38
+
39
+ ### Observability
40
+
41
+ - **otel-collector** - OpenTelemetry Collector for traces, metrics, and logs
42
+ - **jaeger** - Jaeger all-in-one for distributed tracing with OTLP support
43
+ - **prometheus** - Prometheus for metrics collection and monitoring
44
+ - **grafana** - Grafana for visualization with pre-configured data sources
45
+ - **loki** - Loki for log aggregation and querying
46
+
47
+ ### Cloud Tools
48
+
49
+ - **aws-cli** - AWS command-line tools
50
+ - **azure-cli** - Azure command-line tools
51
+ - **kubectl-helm** - Kubernetes CLI and Helm package manager
52
+
53
+ ### Dev Tools
54
+
55
+ - **docker-in-docker** - Docker daemon inside container (conflicts with docker-sock)
56
+ - **docker-sock** - Docker socket mounting (conflicts with docker-in-docker)
57
+ - **playwright** - Browser automation with Chromium installed
58
+ - **codex** - AI-powered code assistant
59
+
60
+ ## Environment Variables
61
+
62
+ Each overlay can provide its own `.env.example` file with relevant environment variables. The init tool automatically merges all `.env.example` files from selected overlays into a single `.env.example` in your project.
63
+
64
+ ### PostgreSQL Variables
65
+
66
+ - `POSTGRES_VERSION` - PostgreSQL version (default: 16)
67
+ - `POSTGRES_DB` - Database name (default: devdb)
68
+ - `POSTGRES_USER` - Database user (default: postgres)
69
+ - `POSTGRES_PASSWORD` - Database password (default: postgres)
70
+ - `POSTGRES_PORT` - Port mapping (default: 5432)
71
+
72
+ ### Redis Variables
73
+
74
+ - `REDIS_VERSION` - Redis version (default: 7)
75
+ - `REDIS_PORT` - Port mapping (default: 6379)
76
+ - `REDIS_PASSWORD` - Optional password for Redis authentication
77
+
78
+ ### Observability Variables
79
+
80
+ #### OpenTelemetry Collector
81
+
82
+ - `OTEL_COLLECTOR_VERSION` - Collector version (default: latest)
83
+
84
+ #### Jaeger
85
+
86
+ - `JAEGER_VERSION` - Jaeger version (default: latest)
87
+
88
+ #### Prometheus
89
+
90
+ - `PROMETHEUS_VERSION` - Prometheus version (default: latest)
91
+
92
+ #### Grafana
93
+
94
+ - `GRAFANA_VERSION` - Grafana version (default: latest)
95
+ - `GRAFANA_ADMIN_USER` - Admin username (default: admin)
96
+ - `GRAFANA_ADMIN_PASSWORD` - Admin password (default: admin)
97
+
98
+ #### Loki
99
+
100
+ - `LOKI_VERSION` - Loki version (default: latest)
101
+
102
+ ### Using .env
103
+
104
+ 1. Run the init tool to generate `.env.example` with your selected overlays
105
+ 2. Copy `.env.example` to `.env` in your project root
106
+ 3. Customize values as needed
107
+ 4. Restart your dev container
108
+
109
+ Example `.env`:
110
+
111
+ ```bash
112
+ POSTGRES_PASSWORD=my-secure-password
113
+ REDIS_PASSWORD=another-secure-password
114
+ POSTGRES_VERSION=15
115
+ ```
116
+
117
+ The `.env` file should be added to `.gitignore` to keep secrets out of version control.
118
+
119
+ ## How Overlays Work
120
+
121
+ The init tool merges overlay configurations with your base template:
122
+
123
+ 1. **JSON Merging**: Features are deep-merged (package lists concatenated)
124
+ 2. **Environment Variables**: Added to devcontainer configuration
125
+ 3. **Port Configuration**: Ports appended to forwardPorts, attributes merged for labeled ports
126
+ 4. **Docker Compose**: Service files copied as `docker-compose.{overlay}.yml`
127
+ 5. **Additional Files**: Any extra files (configs, scripts) are copied to output directory
128
+ 6. **Environment Examples**: All `.env.example` files merged into single file
129
+
130
+ ### File Handling
131
+
132
+ - `devcontainer.patch.json` - Merged into devcontainer.json
133
+ - `docker-compose.yml` - Copied as `docker-compose.{overlay}.yml`
134
+ - `.env.example` - Merged into combined `.env.example`
135
+ - Other files/directories - Copied as-is to output (e.g., `otel-collector.yml`, config folders)
136
+
137
+ ## Adding New Overlays
138
+
139
+ To add a new overlay:
140
+
141
+ 1. Create a directory under `overlays/`
142
+ 2. Add `overlay.yml` manifest with metadata (category, dependencies, conflicts)
143
+ 3. Add `devcontainer.patch.json` with the partial configuration
144
+ 4. Optionally add `docker-compose.yml` for services
145
+ 5. Optionally add `.env.example` with environment variables
146
+ 6. Optionally add `README.md` with usage documentation
147
+ 7. Add any additional config files (e.g., `otel-collector.yml`, config directories)
148
+
149
+ See [Creating Overlays Guide](../docs/creating-overlays.md) for complete documentation.
150
+
151
+ ## Presets (Meta-Overlays)
152
+
153
+ Presets are special meta-overlays that select combinations of overlays for common scenarios (web-api, microservice, docs-site, fullstack). They're located in `overlays/presets/*.yml`.
154
+
155
+ See [Presets Guide](../docs/presets.md) and [Presets Architecture](../docs/presets-architecture.md) for detailed documentation on creating and using presets.
@@ -0,0 +1,5 @@
1
+ # Alertmanager version
2
+ ALERTMANAGER_VERSION=latest
3
+
4
+ # Alertmanager port
5
+ ALERTMANAGER_PORT=9093
@@ -0,0 +1,465 @@
1
+ # Alertmanager Overlay
2
+
3
+ Alert routing, grouping, and notification management for Prometheus alerts.
4
+
5
+ ## Features
6
+
7
+ - **Prometheus Alertmanager** - Handles alerts from Prometheus server
8
+ - **Alert grouping** - Groups similar alerts to reduce noise
9
+ - **Alert routing** - Routes alerts to different receivers based on labels
10
+ - **Deduplication** - Prevents duplicate alert notifications
11
+ - **Silencing** - Temporarily mute specific alerts
12
+ - **Inhibition rules** - Suppress alerts based on other active alerts
13
+ - **Web UI** - Manage alerts, silences, and receivers
14
+
15
+ ## How It Works
16
+
17
+ Alertmanager receives alerts from Prometheus, groups them, applies routing rules, and sends notifications to configured receivers (email, Slack, webhook, etc.).
18
+
19
+ **Architecture:**
20
+
21
+ ```mermaid
22
+ graph TD
23
+ A[Prometheus<br/>Evaluates alert rules<br/>Sends alerts to AM] -->|HTTP POST| B[Alertmanager<br/>Receives alerts<br/>Groups similar alerts<br/>Deduplicates<br/>Applies routing rules<br/>Sends to receivers<br/>UI http://localhost:9093]
24
+ B --> C[Email]
25
+ B --> D[Slack]
26
+ B --> E[Webhook]
27
+ B --> F[PagerDuty]
28
+ ```
29
+
30
+ **Alert Flow:**
31
+
32
+ 1. **Evaluation:** Prometheus evaluates alert rules every 15 seconds
33
+ 2. **Firing:** When condition is true, Prometheus sends alert to Alertmanager
34
+ 3. **Grouping:** Alertmanager groups alerts by labels (alertname, cluster, service)
35
+ 4. **Routing:** Routes are matched against alert labels
36
+ 5. **Notification:** Alerts sent to configured receivers
37
+ 6. **Resolution:** When condition becomes false, resolved notification sent
38
+
39
+ ## Configuration
40
+
41
+ ### Ports
42
+
43
+ - `9093` - Alertmanager web UI and API
44
+
45
+ ### Environment Variables
46
+
47
+ The overlay includes a `.env.example` file. Copy it to `.env` and customize:
48
+
49
+ ```bash
50
+ cd .devcontainer
51
+ cp .env.example .env
52
+ ```
53
+
54
+ **Available variables:**
55
+
56
+ ```bash
57
+ # Alertmanager version
58
+ ALERTMANAGER_VERSION=latest
59
+
60
+ # Alertmanager port
61
+ ALERTMANAGER_PORT=9093
62
+ ```
63
+
64
+ ### Prometheus Integration
65
+
66
+ The overlay includes a setup script that automatically configures Prometheus to send alerts to Alertmanager.
67
+
68
+ **Manual configuration (if needed):**
69
+
70
+ Edit `.devcontainer/prometheus-prometheus.yml`:
71
+
72
+ ```yaml
73
+ # Add to Prometheus config
74
+ alerting:
75
+ alertmanagers:
76
+ - static_configs:
77
+ - targets: ['alertmanager:9093']
78
+
79
+ rule_files:
80
+ - '/etc/prometheus/alert-rules.yml'
81
+ ```
82
+
83
+ ### Alert Rules
84
+
85
+ Sample alert rules are provided in `alert-rules.yml`. Copy to your Prometheus overlay and customize:
86
+
87
+ ```yaml
88
+ groups:
89
+ - name: my_alerts
90
+ interval: 30s
91
+ rules:
92
+ - alert: HighCPU
93
+ expr: cpu_usage > 80
94
+ for: 5m
95
+ labels:
96
+ severity: warning
97
+ annotations:
98
+ summary: 'High CPU on {{ $labels.instance }}'
99
+ ```
100
+
101
+ Mount in Prometheus docker-compose.yml:
102
+
103
+ ```yaml
104
+ services:
105
+ prometheus:
106
+ volumes:
107
+ - ./alert-rules-alertmanager.yml:/etc/prometheus/alert-rules.yml:ro
108
+ ```
109
+
110
+ ### Receivers Configuration
111
+
112
+ Edit `alertmanager.yml` to configure notification channels:
113
+
114
+ **Email receiver:**
115
+
116
+ ```yaml
117
+ receivers:
118
+ - name: 'email'
119
+ email_configs:
120
+ - to: 'team@example.com'
121
+ from: 'alertmanager@example.com'
122
+ smarthost: 'smtp.example.com:587'
123
+ auth_username: 'alertmanager'
124
+ auth_password: 'password'
125
+ ```
126
+
127
+ **Slack receiver:**
128
+
129
+ ```yaml
130
+ receivers:
131
+ - name: 'slack'
132
+ slack_configs:
133
+ - api_url: 'https://hooks.slack.com/services/XXX'
134
+ channel: '#alerts'
135
+ title: 'Alert: {{ .GroupLabels.alertname }}'
136
+ text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
137
+ ```
138
+
139
+ **Webhook receiver:**
140
+
141
+ ```yaml
142
+ receivers:
143
+ - name: 'webhook'
144
+ webhook_configs:
145
+ - url: 'http://my-webhook-server:5001/alerts'
146
+ send_resolved: true
147
+ ```
148
+
149
+ ## Common Commands
150
+
151
+ ### Accessing Alertmanager UI
152
+
153
+ Open your browser to: http://localhost:9093
154
+
155
+ **UI Features:**
156
+
157
+ - **Alerts:** View active alerts
158
+ - **Silences:** Create/manage silences
159
+ - **Status:** View configuration and runtime info
160
+
161
+ ### Creating Silences
162
+
163
+ **Via UI:**
164
+
165
+ 1. Navigate to http://localhost:9093/#/silences
166
+ 2. Click "New Silence"
167
+ 3. Add matchers (e.g., `alertname="HighCPU"`)
168
+ 4. Set duration and comment
169
+ 5. Click "Create"
170
+
171
+ **Via API:**
172
+
173
+ ```bash
174
+ # Create a silence for 1 hour
175
+ curl -X POST http://alertmanager:9093/api/v2/silences \
176
+ -H 'Content-Type: application/json' \
177
+ -d '{
178
+ "matchers": [
179
+ {
180
+ "name": "alertname",
181
+ "value": "HighCPU",
182
+ "isRegex": false
183
+ }
184
+ ],
185
+ "startsAt": "2024-01-15T10:00:00Z",
186
+ "endsAt": "2024-01-15T11:00:00Z",
187
+ "createdBy": "admin",
188
+ "comment": "Planned maintenance"
189
+ }'
190
+ ```
191
+
192
+ ### Viewing Alerts
193
+
194
+ **Via UI:**
195
+ Navigate to http://localhost:9093/#/alerts
196
+
197
+ **Via API:**
198
+
199
+ ```bash
200
+ # Get all alerts
201
+ curl http://alertmanager:9093/api/v2/alerts
202
+
203
+ # Get alerts with specific label
204
+ curl http://alertmanager:9093/api/v2/alerts?filter={severity="critical"}
205
+ ```
206
+
207
+ ### Testing Alerts
208
+
209
+ **Trigger a test alert from Prometheus:**
210
+
211
+ ```bash
212
+ # Send test alert to Alertmanager
213
+ curl -X POST http://prometheus:9090/-/reload
214
+
215
+ # Or manually POST an alert
216
+ curl -X POST http://alertmanager:9093/api/v1/alerts \
217
+ -H 'Content-Type: application/json' \
218
+ -d '[
219
+ {
220
+ "labels": {
221
+ "alertname": "TestAlert",
222
+ "severity": "warning"
223
+ },
224
+ "annotations": {
225
+ "summary": "This is a test alert"
226
+ }
227
+ }
228
+ ]'
229
+ ```
230
+
231
+ ### Managing Configuration
232
+
233
+ **Reload configuration without restart:**
234
+
235
+ ```bash
236
+ # Send SIGHUP to Alertmanager
237
+ docker exec alertmanager killall -HUP alertmanager
238
+
239
+ # Or use API
240
+ curl -X POST http://alertmanager:9093/-/reload
241
+ ```
242
+
243
+ **Validate configuration:**
244
+
245
+ ```bash
246
+ # Check config in running container
247
+ docker exec alertmanager amtool check-config /etc/alertmanager/alertmanager.yml
248
+ ```
249
+
250
+ ## Use Cases
251
+
252
+ - **Alert routing** - Send critical alerts to PagerDuty, warnings to Slack
253
+ - **Development testing** - Test alert rules and notification channels
254
+ - **Alert deduplication** - Prevent alert storms from overwhelming channels
255
+ - **Maintenance windows** - Silence alerts during planned maintenance
256
+ - **Multi-team notifications** - Route alerts to different teams based on labels
257
+
258
+ **Integrates well with:**
259
+
260
+ - Prometheus (required) - Source of alerts
261
+ - Grafana (optional) - View alerts in dashboards
262
+ - OTel Collector (optional) - Additional metrics sources
263
+
264
+ ## Alert Best Practices
265
+
266
+ ### Writing Alert Rules
267
+
268
+ **Good alerts are:**
269
+
270
+ 1. **Actionable** - Alert on problems you can fix
271
+ 2. **Meaningful** - Include context in annotations
272
+ 3. **Tuned** - Set appropriate thresholds and durations
273
+ 4. **Tested** - Verify alerts work before depending on them
274
+
275
+ **Example of good alert:**
276
+
277
+ ```yaml
278
+ - alert: HighErrorRate
279
+ expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
280
+ for: 5m
281
+ labels:
282
+ severity: critical
283
+ service: '{{ $labels.service }}'
284
+ annotations:
285
+ summary: 'High error rate on {{ $labels.service }}'
286
+ description: '{{ $labels.service }} has {{ $value | humanizePercentage }} error rate'
287
+ runbook_url: 'https://wiki.example.com/runbooks/high-error-rate'
288
+ dashboard_url: 'http://grafana:3000/d/errors?var-service={{ $labels.service }}'
289
+ ```
290
+
291
+ ### Grouping Strategy
292
+
293
+ **Group related alerts:**
294
+
295
+ ```yaml
296
+ route:
297
+ group_by: ['alertname', 'cluster', 'service']
298
+ group_wait: 10s # Wait before sending first notification
299
+ group_interval: 5m # Wait before sending updates
300
+ repeat_interval: 4h # Wait before resending same alert
301
+ ```
302
+
303
+ **Separate critical from warnings:**
304
+
305
+ ```yaml
306
+ routes:
307
+ - match:
308
+ severity: critical
309
+ receiver: pagerduty
310
+ group_interval: 1m
311
+
312
+ - match:
313
+ severity: warning
314
+ receiver: slack
315
+ group_interval: 10m
316
+ ```
317
+
318
+ ### Inhibition Rules
319
+
320
+ **Suppress child alerts when parent is firing:**
321
+
322
+ ```yaml
323
+ inhibit_rules:
324
+ # Don't alert on service down if entire cluster is down
325
+ - source_match:
326
+ alertname: 'ClusterDown'
327
+ target_match:
328
+ alertname: 'ServiceDown'
329
+ equal: ['cluster']
330
+
331
+ # Don't warn about high latency if service has errors
332
+ - source_match:
333
+ severity: 'critical'
334
+ target_match:
335
+ severity: 'warning'
336
+ equal: ['service']
337
+ ```
338
+
339
+ ## Troubleshooting
340
+
341
+ ### Issue: Alerts Not Appearing
342
+
343
+ **Symptoms:**
344
+
345
+ - Prometheus firing alerts but not in Alertmanager
346
+
347
+ **Solutions:**
348
+
349
+ ```bash
350
+ # Check Prometheus is sending to Alertmanager
351
+ curl http://prometheus:9090/api/v1/alertmanagers
352
+
353
+ # Check Alertmanager received alerts
354
+ curl http://alertmanager:9093/api/v2/alerts
355
+
356
+ # Check Prometheus logs
357
+ docker logs prometheus | grep alertmanager
358
+
359
+ # Check Alertmanager logs
360
+ docker logs alertmanager
361
+ ```
362
+
363
+ ### Issue: Notifications Not Sent
364
+
365
+ **Symptoms:**
366
+
367
+ - Alerts in Alertmanager but no notifications received
368
+
369
+ **Solutions:**
370
+
371
+ ```bash
372
+ # Check receiver configuration
373
+ curl http://alertmanager:9093/api/v2/status
374
+
375
+ # Check for silences
376
+ curl http://alertmanager:9093/api/v2/silences
377
+
378
+ # Test receiver manually (for webhook)
379
+ curl -X POST http://my-webhook:5001/alerts \
380
+ -H 'Content-Type: application/json' \
381
+ -d '{"alerts": [{"labels": {"test": "true"}}]}'
382
+
383
+ # Check Alertmanager logs for errors
384
+ docker logs alertmanager | grep -i error
385
+ ```
386
+
387
+ ### Issue: Too Many Notifications
388
+
389
+ **Symptoms:**
390
+
391
+ - Getting flooded with alert notifications
392
+
393
+ **Solutions:**
394
+
395
+ ```yaml
396
+ # Increase group_interval in alertmanager.yml
397
+ route:
398
+ group_interval: 10m # Increase from default
399
+ repeat_interval: 12h # Reduce notification frequency
400
+
401
+ # Add inhibition rules to suppress related alerts
402
+ inhibit_rules:
403
+ - source_match:
404
+ severity: critical
405
+ target_match:
406
+ severity: warning
407
+ equal: ['service']
408
+ ```
409
+
410
+ ### Issue: Configuration Errors
411
+
412
+ **Symptoms:**
413
+
414
+ - Alertmanager fails to start or reload
415
+
416
+ **Solution:**
417
+
418
+ ```bash
419
+ # Validate configuration
420
+ docker exec alertmanager amtool check-config /etc/alertmanager/alertmanager.yml
421
+
422
+ # Check for YAML syntax errors
423
+ yamllint .devcontainer/alertmanager-alertmanager.yml
424
+ ```
425
+
426
+ ## Security Considerations
427
+
428
+ ⚠️ **Development Configuration:** This overlay uses basic configuration suitable for development.
429
+
430
+ **For production:**
431
+
432
+ - **Enable TLS** for Alertmanager API
433
+ - **Protect secrets** in receiver configs (use environment variables or secret management)
434
+ - **Restrict access** to Alertmanager UI (add authentication)
435
+ - **Secure webhooks** with HMAC signatures or mutual TLS
436
+ - **Rate limit** API endpoints to prevent abuse
437
+
438
+ **Webhook security example:**
439
+
440
+ ```yaml
441
+ receivers:
442
+ - name: 'secure-webhook'
443
+ webhook_configs:
444
+ - url: 'https://webhook:443/alerts'
445
+ http_config:
446
+ tls_config:
447
+ ca_file: /etc/ssl/certs/ca.crt
448
+ basic_auth:
449
+ username: alertmanager
450
+ password_file: /run/secrets/webhook_password
451
+ ```
452
+
453
+ ## References
454
+
455
+ - [Official Alertmanager Documentation](https://prometheus.io/docs/alerting/latest/alertmanager/)
456
+ - [Alertmanager Configuration](https://prometheus.io/docs/alerting/latest/configuration/)
457
+ - [Alert Routing](https://prometheus.io/docs/alerting/latest/alertmanager/#route)
458
+ - [Prometheus Alerting Rules](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/)
459
+ - [amtool CLI](https://github.com/prometheus/alertmanager#amtool)
460
+
461
+ **Related Overlays:**
462
+
463
+ - `prometheus` - Required alert source
464
+ - `grafana` - Optional visualization of alerts
465
+ - `otel-collector` - Optional additional metrics
@@ -0,0 +1,56 @@
1
+ # Sample Prometheus alert rules
2
+ # Copy this file to prometheus overlay and reference in prometheus.yml
3
+
4
+ groups:
5
+ - name: example_alerts
6
+ interval: 30s
7
+ rules:
8
+ # Container down alert
9
+ - alert: ContainerDown
10
+ expr: up == 0
11
+ for: 1m
12
+ labels:
13
+ severity: critical
14
+ annotations:
15
+ summary: 'Container {{ $labels.instance }} is down'
16
+ description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute.'
17
+
18
+ # High CPU usage
19
+ - alert: HighCPUUsage
20
+ expr: rate(container_cpu_usage_seconds_total[5m]) > 0.8
21
+ for: 5m
22
+ labels:
23
+ severity: warning
24
+ annotations:
25
+ summary: 'High CPU usage on {{ $labels.container }}'
26
+ description: 'Container {{ $labels.container }} CPU usage is above 80% for 5 minutes.'
27
+
28
+ # High memory usage
29
+ - alert: HighMemoryUsage
30
+ expr: (container_memory_usage_bytes / container_spec_memory_limit_bytes) > 0.9
31
+ for: 5m
32
+ labels:
33
+ severity: warning
34
+ annotations:
35
+ summary: 'High memory usage on {{ $labels.container }}'
36
+ description: 'Container {{ $labels.container }} memory usage is above 90% for 5 minutes.'
37
+
38
+ # Too many HTTP 500 errors
39
+ - alert: HighErrorRate
40
+ expr: rate(http_requests_total{status="500"}[5m]) > 0.05
41
+ for: 5m
42
+ labels:
43
+ severity: critical
44
+ annotations:
45
+ summary: 'High error rate on {{ $labels.service }}'
46
+ description: 'Service {{ $labels.service }} has more than 5% 5xx errors for 5 minutes.'
47
+
48
+ # Slow HTTP requests
49
+ - alert: SlowRequests
50
+ expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) > 1.0
51
+ for: 10m
52
+ labels:
53
+ severity: warning
54
+ annotations:
55
+ summary: 'Slow requests on {{ $labels.service }}'
56
+ description: 'Service {{ $labels.service }} p99 latency is above 1 second for 10 minutes.'