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,639 @@
1
+ # MinIO Overlay
2
+
3
+ MinIO S3-compatible object storage for local development and testing of cloud storage applications.
4
+
5
+ ## Features
6
+
7
+ - **MinIO Server** - High-performance S3-compatible object storage
8
+ - **MinIO Console** - Web-based admin interface (port 9001)
9
+ - **MinIO Client (mc)** - Command-line tool for bucket/object management
10
+ - **S3 API compatibility** - Works with AWS SDK and tools
11
+ - **Docker Compose service** - Runs as separate container
12
+ - **Persistent storage** - Data survives container restarts
13
+ - **Health checks** - Ensures service is ready before use
14
+ - **Pre-configured buckets** - Optional default bucket creation
15
+
16
+ ## How It Works
17
+
18
+ This overlay adds MinIO as a Docker Compose service, providing a local S3-compatible object storage server. The service is accessible from your development container via the hostname `minio`.
19
+
20
+ **Architecture:**
21
+
22
+ ```mermaid
23
+ graph TD
24
+ A[Development Container<br/>Your application code<br/>AWS SDK / mc client<br/>Connects to minio:9000] -->|Docker network devnet| B[MinIO Container<br/>API on port 9000<br/>Console on port 9001<br/>Data volume]
25
+ ```
26
+
27
+ ## Configuration
28
+
29
+ ### Environment Variables
30
+
31
+ The overlay includes a `.env.example` file. Copy it to `.env` and customize:
32
+
33
+ ```bash
34
+ cd .devcontainer
35
+ cp .env.example .env
36
+ ```
37
+
38
+ **Default values (.env.example):**
39
+
40
+ ```bash
41
+ # MinIO Configuration
42
+ MINIO_VERSION=latest
43
+ MINIO_ROOT_USER=minioadmin
44
+ MINIO_ROOT_PASSWORD=minioadmin
45
+ MINIO_API_PORT=9000
46
+ MINIO_CONSOLE_PORT=9001
47
+
48
+ # Default bucket to create (optional)
49
+ MINIO_DEFAULT_BUCKET=my-bucket
50
+ ```
51
+
52
+ ⚠️ **SECURITY:** Change default credentials for production use. The `.env` file is git-ignored.
53
+
54
+ ### Port Configuration
55
+
56
+ Default ports can be changed via the `--port-offset` option when initializing:
57
+
58
+ ```bash
59
+ # Offset all ports by 100
60
+ container-superposition --port-offset 100
61
+
62
+ # MinIO API will be on 9100, Console on 9101
63
+ ```
64
+
65
+ ## Connection Information
66
+
67
+ ### From Development Container
68
+
69
+ ```bash
70
+ # S3 API Endpoint: http://minio:9000
71
+ # Access Key: minioadmin (or value from .env)
72
+ # Secret Key: minioadmin (or value from .env)
73
+ # Region: us-east-1 (default, can be any value)
74
+
75
+ # Environment variables (already set by overlay)
76
+ AWS_ACCESS_KEY_ID=minioadmin
77
+ AWS_SECRET_ACCESS_KEY=minioadmin
78
+ S3_ENDPOINT=http://minio:9000
79
+ AWS_REGION=us-east-1
80
+ ```
81
+
82
+ ### From Host Machine
83
+
84
+ ```bash
85
+ # S3 API Endpoint: http://localhost:9000
86
+ # Access Key: minioadmin
87
+ # Secret Key: minioadmin
88
+ # Region: us-east-1
89
+ ```
90
+
91
+ ### MinIO Console (Web UI)
92
+
93
+ Access the web interface from your host machine:
94
+
95
+ ```
96
+ http://localhost:9001
97
+ ```
98
+
99
+ Login with:
100
+
101
+ - **Username:** minioadmin
102
+ - **Password:** minioadmin
103
+
104
+ ## Common Commands
105
+
106
+ ### Using MinIO Client (mc)
107
+
108
+ ```bash
109
+ # List configured aliases
110
+ mc alias list
111
+
112
+ # List buckets
113
+ mc ls local
114
+
115
+ # Create bucket
116
+ mc mb local/my-bucket
117
+
118
+ # Remove bucket
119
+ mc rb local/my-bucket
120
+
121
+ # List objects in bucket
122
+ mc ls local/my-bucket
123
+
124
+ # Upload file
125
+ mc cp myfile.txt local/my-bucket/
126
+
127
+ # Download file
128
+ mc cp local/my-bucket/myfile.txt ./downloaded.txt
129
+
130
+ # Remove object
131
+ mc rm local/my-bucket/myfile.txt
132
+
133
+ # Mirror directory to bucket
134
+ mc mirror ./mydir local/my-bucket/mydir
135
+
136
+ # Share object (generate presigned URL)
137
+ mc share download local/my-bucket/myfile.txt --expire 24h
138
+ ```
139
+
140
+ ### Bucket Management
141
+
142
+ ```bash
143
+ # Create bucket with versioning
144
+ mc mb local/my-bucket
145
+ mc version enable local/my-bucket
146
+
147
+ # Set bucket policy (public read)
148
+ mc anonymous set download local/my-bucket
149
+
150
+ # Set bucket policy (private)
151
+ mc anonymous set none local/my-bucket
152
+
153
+ # View bucket policy
154
+ mc anonymous get local/my-bucket
155
+
156
+ # Set bucket quota
157
+ mc quota set local/my-bucket --size 1GB
158
+
159
+ # Get bucket info
160
+ mc stat local/my-bucket
161
+ ```
162
+
163
+ ### Object Operations
164
+
165
+ ```bash
166
+ # Upload with metadata
167
+ mc cp --attr "Content-Type=text/html;Cache-Control=max-age=3600" index.html local/my-bucket/
168
+
169
+ # Copy between buckets
170
+ mc cp local/source-bucket/file.txt local/dest-bucket/
171
+
172
+ # Copy recursively
173
+ mc cp --recursive ./mydir/ local/my-bucket/mydir/
174
+
175
+ # Find objects
176
+ mc find local/my-bucket --name "*.jpg"
177
+
178
+ # Cat object content
179
+ mc cat local/my-bucket/file.txt
180
+
181
+ # Diff between buckets
182
+ mc diff local/bucket1 local/bucket2
183
+ ```
184
+
185
+ ### Container Management
186
+
187
+ ```bash
188
+ # Check service status
189
+ docker-compose ps
190
+
191
+ # View MinIO logs
192
+ docker-compose logs -f minio
193
+
194
+ # Restart service
195
+ docker-compose restart minio
196
+
197
+ # Stop service
198
+ docker-compose stop minio
199
+
200
+ # Remove data (WARNING: destroys all data)
201
+ docker-compose down -v
202
+ ```
203
+
204
+ ## Application Integration
205
+
206
+ ### Node.js (AWS SDK v3)
207
+
208
+ ```bash
209
+ # Install AWS SDK
210
+ npm install @aws-sdk/client-s3
211
+ ```
212
+
213
+ ```javascript
214
+ const {
215
+ S3Client,
216
+ PutObjectCommand,
217
+ GetObjectCommand,
218
+ ListBucketsCommand,
219
+ } = require('@aws-sdk/client-s3');
220
+ const fs = require('fs');
221
+
222
+ // Configure S3 client for MinIO
223
+ const s3Client = new S3Client({
224
+ endpoint: 'http://minio:9000',
225
+ region: 'us-east-1',
226
+ credentials: {
227
+ accessKeyId: 'minioadmin',
228
+ secretAccessKey: 'minioadmin',
229
+ },
230
+ forcePathStyle: true, // Required for MinIO
231
+ });
232
+
233
+ // List buckets
234
+ async function listBuckets() {
235
+ const response = await s3Client.send(new ListBucketsCommand({}));
236
+ console.log(response.Buckets);
237
+ }
238
+
239
+ // Upload file
240
+ async function uploadFile() {
241
+ const fileContent = fs.readFileSync('myfile.txt');
242
+ await s3Client.send(
243
+ new PutObjectCommand({
244
+ Bucket: 'my-bucket',
245
+ Key: 'myfile.txt',
246
+ Body: fileContent,
247
+ })
248
+ );
249
+ }
250
+
251
+ // Download file
252
+ async function downloadFile() {
253
+ const response = await s3Client.send(
254
+ new GetObjectCommand({
255
+ Bucket: 'my-bucket',
256
+ Key: 'myfile.txt',
257
+ })
258
+ );
259
+
260
+ const stream = response.Body;
261
+ const chunks = [];
262
+ for await (const chunk of stream) {
263
+ chunks.push(chunk);
264
+ }
265
+ const fileContent = Buffer.concat(chunks);
266
+ fs.writeFileSync('downloaded.txt', fileContent);
267
+ }
268
+ ```
269
+
270
+ ### Python (boto3)
271
+
272
+ ```bash
273
+ # Install boto3
274
+ pip install boto3
275
+ ```
276
+
277
+ ```python
278
+ import boto3
279
+ from botocore.client import Config
280
+
281
+ # Configure S3 client for MinIO
282
+ s3_client = boto3.client(
283
+ 's3',
284
+ endpoint_url='http://minio:9000',
285
+ aws_access_key_id='minioadmin',
286
+ aws_secret_access_key='minioadmin',
287
+ config=Config(signature_version='s3v4'),
288
+ region_name='us-east-1'
289
+ )
290
+
291
+ # List buckets
292
+ response = s3_client.list_buckets()
293
+ for bucket in response['Buckets']:
294
+ print(bucket['Name'])
295
+
296
+ # Upload file
297
+ s3_client.upload_file('myfile.txt', 'my-bucket', 'myfile.txt')
298
+
299
+ # Download file
300
+ s3_client.download_file('my-bucket', 'myfile.txt', 'downloaded.txt')
301
+
302
+ # Upload from string
303
+ s3_client.put_object(
304
+ Bucket='my-bucket',
305
+ Key='text.txt',
306
+ Body='Hello, MinIO!'.encode('utf-8')
307
+ )
308
+
309
+ # Download to string
310
+ response = s3_client.get_object(Bucket='my-bucket', Key='text.txt')
311
+ content = response['Body'].read().decode('utf-8')
312
+ ```
313
+
314
+ ### .NET
315
+
316
+ ```bash
317
+ # Install AWS SDK
318
+ dotnet add package AWSSDK.S3
319
+ ```
320
+
321
+ ```csharp
322
+ using Amazon.S3;
323
+ using Amazon.S3.Model;
324
+ using Amazon.Runtime;
325
+
326
+ var config = new AmazonS3Config
327
+ {
328
+ ServiceURL = "http://minio:9000",
329
+ ForcePathStyle = true,
330
+ };
331
+
332
+ var credentials = new BasicAWSCredentials("minioadmin", "minioadmin");
333
+ var s3Client = new AmazonS3Client(credentials, config);
334
+
335
+ // List buckets
336
+ var bucketsResponse = await s3Client.ListBucketsAsync();
337
+ foreach (var bucket in bucketsResponse.Buckets)
338
+ {
339
+ Console.WriteLine(bucket.BucketName);
340
+ }
341
+
342
+ // Upload file
343
+ await s3Client.PutObjectAsync(new PutObjectRequest
344
+ {
345
+ BucketName = "my-bucket",
346
+ Key = "myfile.txt",
347
+ FilePath = "myfile.txt",
348
+ });
349
+
350
+ // Download file
351
+ await s3Client.GetObjectAsync(new GetObjectRequest
352
+ {
353
+ BucketName = "my-bucket",
354
+ Key = "myfile.txt",
355
+ }, "downloaded.txt");
356
+ ```
357
+
358
+ ### Go
359
+
360
+ ```bash
361
+ # Install MinIO Go SDK
362
+ go get github.com/minio/minio-go/v7
363
+ ```
364
+
365
+ ```go
366
+ package main
367
+
368
+ import (
369
+ "context"
370
+ "log"
371
+ "github.com/minio/minio-go/v7"
372
+ "github.com/minio/minio-go/v7/pkg/credentials"
373
+ )
374
+
375
+ func main() {
376
+ ctx := context.Background()
377
+
378
+ // Initialize MinIO client
379
+ minioClient, err := minio.New("minio:9000", &minio.Options{
380
+ Creds: credentials.NewStaticV4("minioadmin", "minioadmin", ""),
381
+ Secure: false,
382
+ })
383
+ if err != nil {
384
+ log.Fatalln(err)
385
+ }
386
+
387
+ // List buckets
388
+ buckets, _ := minioClient.ListBuckets(ctx)
389
+ for _, bucket := range buckets {
390
+ log.Println(bucket.Name)
391
+ }
392
+
393
+ // Upload file
394
+ _, err = minioClient.FPutObject(ctx, "my-bucket", "myfile.txt", "myfile.txt", minio.PutObjectOptions{})
395
+ if err != nil {
396
+ log.Fatalln(err)
397
+ }
398
+
399
+ // Download file
400
+ err = minioClient.FGetObject(ctx, "my-bucket", "myfile.txt", "downloaded.txt", minio.GetObjectOptions{})
401
+ if err != nil {
402
+ log.Fatalln(err)
403
+ }
404
+ }
405
+ ```
406
+
407
+ ## Use Cases
408
+
409
+ - **Local S3 development** - Test S3 code without AWS costs
410
+ - **File uploads** - Store user-uploaded files (images, documents, media)
411
+ - **Backup storage** - Backup databases and application data
412
+ - **Static asset hosting** - Serve images, videos, downloads
413
+ - **Multi-cloud development** - S3-compatible API works with MinIO, AWS, GCS, etc.
414
+ - **CI/CD testing** - Test storage code in pipelines
415
+ - **Data lakes** - Store large datasets for analysis
416
+ - **Microservices storage** - Shared object storage for distributed apps
417
+
418
+ **Integrates well with:**
419
+
420
+ - Node.js, Python, .NET, Go (AWS SDK support)
421
+ - AWS CLI (aws-cli overlay) - Use AWS CLI with MinIO
422
+ - Any S3-compatible tool or library
423
+
424
+ ## Troubleshooting
425
+
426
+ ### Issue: Cannot connect to MinIO
427
+
428
+ **Symptoms:**
429
+
430
+ - Connection refused errors
431
+ - Timeout when connecting
432
+
433
+ **Solution:**
434
+
435
+ ```bash
436
+ # Check if service is running
437
+ docker-compose ps
438
+
439
+ # Check MinIO logs
440
+ docker-compose logs minio
441
+
442
+ # Wait for health check to pass
443
+ docker-compose ps | grep minio
444
+ # Look for "healthy" status
445
+
446
+ # Test connection
447
+ curl http://minio:9000/minio/health/live
448
+ ```
449
+
450
+ ### Issue: Access Denied
451
+
452
+ **Symptoms:**
453
+
454
+ - "Access Denied" error
455
+ - Authentication failures
456
+
457
+ **Solution:**
458
+
459
+ ```bash
460
+ # Verify credentials in .env file
461
+ cat .devcontainer/.env
462
+
463
+ # Ensure credentials match in your code
464
+ # Access Key: minioadmin
465
+ # Secret Key: minioadmin
466
+
467
+ # Reconfigure mc alias
468
+ mc alias set local http://minio:9000 minioadmin minioadmin
469
+
470
+ # Check bucket policy
471
+ mc anonymous get local/my-bucket
472
+ ```
473
+
474
+ ### Issue: Bucket not found
475
+
476
+ **Symptoms:**
477
+
478
+ - "The specified bucket does not exist"
479
+
480
+ **Solution:**
481
+
482
+ ```bash
483
+ # Create bucket
484
+ mc mb local/my-bucket
485
+
486
+ # List existing buckets
487
+ mc ls local
488
+
489
+ # Check if MINIO_DEFAULT_BUCKET was created during setup
490
+ mc ls local | grep my-bucket
491
+ ```
492
+
493
+ ### Issue: MinIO Console not accessible
494
+
495
+ **Symptoms:**
496
+
497
+ - Cannot access http://localhost:9001
498
+ - Page not loading
499
+
500
+ **Solution:**
501
+
502
+ ```bash
503
+ # Check MinIO logs
504
+ docker-compose logs minio
505
+
506
+ # Verify MinIO is healthy first
507
+ docker-compose ps minio
508
+
509
+ # Restart MinIO
510
+ docker-compose restart minio
511
+
512
+ # Check port forwarding in VS Code
513
+ # Dev Containers: Forward Ports... (port 9001)
514
+ ```
515
+
516
+ ### Issue: Data not persisting
517
+
518
+ **Symptoms:**
519
+
520
+ - Buckets/objects lost after container restart
521
+
522
+ **Solution:**
523
+
524
+ ```bash
525
+ # Verify volumes exist
526
+ docker volume ls | grep minio
527
+
528
+ # Check volume mounts in docker-compose.yml
529
+ docker-compose config
530
+
531
+ # Don't use 'docker-compose down -v' unless you want to delete data
532
+ # Use 'docker-compose down' or 'docker-compose stop' instead
533
+ ```
534
+
535
+ ### Issue: Slow performance
536
+
537
+ **Symptoms:**
538
+
539
+ - Slow uploads/downloads
540
+
541
+ **Solution:**
542
+
543
+ ```bash
544
+ # MinIO is fast locally - check:
545
+ # 1. File size (large files take time)
546
+ # 2. Network (should be Docker network, not internet)
547
+ # 3. Disk I/O (SSD recommended)
548
+
549
+ # Use mc stat to check object info
550
+ mc stat local/my-bucket/myfile.txt
551
+
552
+ # Check MinIO metrics
553
+ curl http://minio:9000/minio/v2/metrics/cluster
554
+ ```
555
+
556
+ ## Security Considerations
557
+
558
+ ⚠️ **Development-only defaults:**
559
+
560
+ - Default credentials (`minioadmin/minioadmin`) are publicly known
561
+ - MinIO is exposed on host port (accessible from host machine)
562
+ - No TLS/SSL encryption by default
563
+
564
+ **For production:**
565
+
566
+ 1. **Change credentials:**
567
+
568
+ ```bash
569
+ # Use strong passwords
570
+ MINIO_ROOT_USER=<strong-username>
571
+ MINIO_ROOT_PASSWORD=<strong-password>
572
+ ```
573
+
574
+ 2. **Create application-specific users:**
575
+
576
+ ```bash
577
+ # Don't use root user for applications
578
+ mc admin user add local myapp <strong-password>
579
+ mc admin policy attach local readwrite --user myapp
580
+ ```
581
+
582
+ 3. **Enable TLS:**
583
+
584
+ ```yaml
585
+ # Generate certificates and mount in docker-compose.yml
586
+ # See: https://min.io/docs/minio/linux/operations/network-encryption.html
587
+ ```
588
+
589
+ 4. **Restrict bucket access:**
590
+
591
+ ```bash
592
+ # Set private bucket policy
593
+ mc anonymous set none local/my-bucket
594
+
595
+ # Use IAM policies for fine-grained access
596
+ mc admin policy create local mypolicy policy.json
597
+ ```
598
+
599
+ 5. **Enable versioning and retention:**
600
+ ```bash
601
+ # Protect against accidental deletion
602
+ mc version enable local/my-bucket
603
+ mc retention set --default GOVERNANCE 30d local/my-bucket
604
+ ```
605
+
606
+ ## Performance Tips
607
+
608
+ 1. **Use multipart uploads** for large files (>5MB)
609
+ 2. **Enable bucket versioning** for data protection
610
+ 3. **Set appropriate content types** for better browser handling
611
+ 4. **Use presigned URLs** for temporary access instead of public buckets
612
+ 5. **Monitor with MinIO Console** - view metrics, storage usage
613
+
614
+ ## Related Overlays
615
+
616
+ - **aws-cli** - AWS CLI works with MinIO (configure with `--endpoint-url`)
617
+ - **nodejs** - Node.js with AWS SDK
618
+ - **python** - Python with boto3
619
+ - **dotnet** - .NET with AWSSDK.S3
620
+ - **grafana** - Visualize MinIO metrics (Prometheus endpoint available)
621
+
622
+ ## Additional Resources
623
+
624
+ - [Official MinIO Documentation](https://min.io/docs/minio/linux/index.html)
625
+ - [MinIO Client Guide](https://min.io/docs/minio/linux/reference/minio-mc.html)
626
+ - [AWS SDK for JavaScript](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)
627
+ - [boto3 Documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
628
+ - [S3 API Reference](https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html)
629
+
630
+ ## Notes
631
+
632
+ - MinIO uses the hostname `minio` (the service name) for container-to-container communication
633
+ - Data is persisted in a Docker volume (`minio-data`)
634
+ - MinIO Console provides web UI for bucket/object management
635
+ - **Massive ROI** - Local S3 development comes up constantly in modern applications
636
+ - S3-compatible API means code works with AWS, GCS, and other cloud providers
637
+ - MinIO Client (mc) is installed automatically during setup
638
+ - Use `forcePathStyle: true` in AWS SDK configuration for MinIO compatibility
639
+ - Default bucket creation is optional via `MINIO_DEFAULT_BUCKET` environment variable
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "features": {
4
+ "./features/cross-distro-packages": {
5
+ "apt": "wget",
6
+ "apk": "wget"
7
+ }
8
+ },
9
+ "runServices": ["minio"],
10
+ "forwardPorts": [9000, 9001],
11
+ "portsAttributes": {
12
+ "9000": {
13
+ "label": "MinIO API",
14
+ "onAutoForward": "notify"
15
+ },
16
+ "9001": {
17
+ "label": "MinIO Console",
18
+ "onAutoForward": "openBrowser"
19
+ }
20
+ },
21
+ "remoteEnv": {
22
+ "MINIO_ENDPOINT": "minio:9000",
23
+ "MINIO_ROOT_USER": "minioadmin",
24
+ "MINIO_ROOT_PASSWORD": "minioadmin",
25
+ "AWS_ACCESS_KEY_ID": "minioadmin",
26
+ "AWS_SECRET_ACCESS_KEY": "minioadmin",
27
+ "AWS_REGION": "us-east-1",
28
+ "S3_ENDPOINT": "http://minio:9000"
29
+ }
30
+ }
@@ -0,0 +1,28 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ minio:
5
+ image: minio/minio:${MINIO_VERSION:-latest}
6
+ restart: unless-stopped
7
+ command: server /data --console-address ":9001"
8
+ volumes:
9
+ - minio-data:/data
10
+ environment:
11
+ MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
12
+ MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin}
13
+ ports:
14
+ - '${MINIO_API_PORT:-9000}:9000'
15
+ - '${MINIO_CONSOLE_PORT:-9001}:9001'
16
+ networks:
17
+ - devnet
18
+ healthcheck:
19
+ test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
20
+ interval: 10s
21
+ timeout: 5s
22
+ retries: 5
23
+
24
+ volumes:
25
+ minio-data:
26
+
27
+ networks:
28
+ devnet:
@@ -0,0 +1,18 @@
1
+ id: minio
2
+ name: MinIO
3
+ description: S3-compatible object storage with web console
4
+ category: database
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests: []
9
+ conflicts: []
10
+ tags:
11
+ - database
12
+ - storage
13
+ - s3
14
+ - object-storage
15
+ - minio
16
+ ports:
17
+ - 9000
18
+ - 9001