container-superposition 0.1.7 → 0.1.9
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.
- package/README.md +24 -15
- package/dist/scripts/init.js +1 -1537
- package/dist/scripts/init.js.map +1 -1
- package/dist/tool/cli/args.d.ts +20 -0
- package/dist/tool/cli/args.d.ts.map +1 -0
- package/dist/tool/cli/args.js +325 -0
- package/dist/tool/cli/args.js.map +1 -0
- package/dist/tool/cli/run.d.ts +2 -0
- package/dist/tool/cli/run.d.ts.map +1 -0
- package/dist/tool/cli/run.js +318 -0
- package/dist/tool/cli/run.js.map +1 -0
- package/dist/tool/commands/adopt.js +1 -1
- package/dist/tool/commands/adopt.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +1 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -1
- package/dist/tool/commands/doctor.js +1510 -78
- package/dist/tool/commands/doctor.js.map +1 -1
- package/dist/tool/commands/explain.d.ts.map +1 -1
- package/dist/tool/commands/explain.js +9 -0
- package/dist/tool/commands/explain.js.map +1 -1
- package/dist/tool/commands/migrate.d.ts +7 -0
- package/dist/tool/commands/migrate.d.ts.map +1 -0
- package/dist/tool/commands/migrate.js +52 -0
- package/dist/tool/commands/migrate.js.map +1 -0
- package/dist/tool/questionnaire/answers.d.ts +16 -0
- package/dist/tool/questionnaire/answers.d.ts.map +1 -0
- package/dist/tool/questionnaire/answers.js +102 -0
- package/dist/tool/questionnaire/answers.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -4
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +778 -45
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/questionnaire/presets.d.ts +60 -0
- package/dist/tool/questionnaire/presets.d.ts.map +1 -0
- package/dist/tool/questionnaire/presets.js +165 -0
- package/dist/tool/questionnaire/presets.js.map +1 -0
- package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
- package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
- package/dist/tool/questionnaire/questionnaire.js +582 -0
- package/dist/tool/questionnaire/questionnaire.js.map +1 -0
- package/dist/tool/schema/manifest-migrations.d.ts +5 -0
- package/dist/tool/schema/manifest-migrations.d.ts.map +1 -1
- package/dist/tool/schema/manifest-migrations.js +45 -0
- package/dist/tool/schema/manifest-migrations.js.map +1 -1
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
- package/dist/tool/schema/overlay-loader.js +24 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/project-config.d.ts +13 -1
- package/dist/tool/schema/project-config.d.ts.map +1 -1
- package/dist/tool/schema/project-config.js +188 -10
- package/dist/tool/schema/project-config.js.map +1 -1
- package/dist/tool/schema/target-rules.d.ts +78 -0
- package/dist/tool/schema/target-rules.d.ts.map +1 -0
- package/dist/tool/schema/target-rules.js +367 -0
- package/dist/tool/schema/target-rules.js.map +1 -0
- package/dist/tool/schema/types.d.ts +42 -3
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/parameters.d.ts +76 -0
- package/dist/tool/utils/parameters.d.ts.map +1 -0
- package/dist/tool/utils/parameters.js +125 -0
- package/dist/tool/utils/parameters.js.map +1 -0
- package/dist/tool/utils/paths.d.ts +2 -0
- package/dist/tool/utils/paths.d.ts.map +1 -0
- package/dist/tool/utils/paths.js +31 -0
- package/dist/tool/utils/paths.js.map +1 -0
- package/docs/deployment-targets.md +88 -56
- package/docs/examples.md +20 -17
- package/docs/filesystem-contract.md +5 -0
- package/docs/minimal-and-editor.md +65 -5
- package/docs/overlay-imports.md +92 -14
- package/docs/overlays.md +231 -135
- package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
- package/docs/specs/002-superposition-config-file/spec.md +5 -12
- package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
- package/docs/specs/004-doctor-fix/spec.md +1 -8
- package/docs/specs/005-cuda-overlay/spec.md +2 -9
- package/docs/specs/006-rocm-overlay/spec.md +3 -10
- package/docs/specs/007-target-aware-generation/spec.md +119 -0
- package/docs/specs/008-project-file-canonical/spec.md +82 -0
- package/docs/specs/009-project-env/spec.md +140 -0
- package/docs/specs/010-compose-env-materialization/spec.md +123 -0
- package/docs/specs/011-overlay-parameters/spec.md +228 -0
- package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
- package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
- package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
- package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
- package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
- package/docs/specs/017-doctor-dry-run/spec.md +276 -0
- package/docs/specs/018-init-project-file/spec.md +59 -0
- package/docs/specs/taxonomy.md +186 -0
- package/overlays/.presets/full-observability.yml +113 -0
- package/overlays/.presets/k8s-dev.yml +174 -0
- package/overlays/.presets/local-llm.yml +105 -0
- package/overlays/.presets/vector-ai.yml +150 -0
- package/overlays/.shared/README.md +27 -2
- package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
- package/overlays/.shared/vscode/js-ts-settings.json +19 -0
- package/overlays/.shared/vscode/markdown-extensions.json +8 -0
- package/overlays/alertmanager/devcontainer.patch.json +0 -1
- package/overlays/alertmanager/docker-compose.yml +8 -0
- package/overlays/alertmanager/overlay.yml +1 -0
- package/overlays/amp/devcontainer.patch.json +4 -1
- package/overlays/bun/devcontainer.patch.json +1 -10
- package/overlays/bun/overlay.yml +8 -1
- package/overlays/claude-code/devcontainer.patch.json +6 -1
- package/overlays/codex/devcontainer.patch.json +5 -0
- package/overlays/comfyui/.env.example +34 -0
- package/overlays/comfyui/README.md +342 -0
- package/overlays/comfyui/devcontainer.patch.json +15 -0
- package/overlays/comfyui/docker-compose.yml +40 -0
- package/overlays/comfyui/overlay.yml +24 -0
- package/overlays/comfyui/setup.sh +36 -0
- package/overlays/comfyui/verify.sh +103 -0
- package/overlays/commitlint/devcontainer.patch.json +1 -6
- package/overlays/docker-sock/overlay.yml +1 -0
- package/overlays/dotnet/overlay.yml +4 -1
- package/overlays/fuseki/.env.example +5 -0
- package/overlays/fuseki/README.md +173 -0
- package/overlays/fuseki/devcontainer.patch.json +18 -0
- package/overlays/fuseki/docker-compose.yml +29 -0
- package/overlays/fuseki/overlay.yml +42 -0
- package/overlays/fuseki/verify.sh +58 -0
- package/overlays/gemini-cli/devcontainer.patch.json +4 -1
- package/overlays/go/overlay.yml +6 -1
- package/overlays/grafana/devcontainer.patch.json +0 -1
- package/overlays/grafana/docker-compose.yml +8 -2
- package/overlays/grafana/overlay.yml +6 -1
- package/overlays/jaeger/.env.example +11 -0
- package/overlays/jaeger/README.md +33 -4
- package/overlays/jaeger/devcontainer.patch.json +9 -1
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +1 -12
- package/overlays/java/overlay.yml +6 -1
- package/overlays/jupyter/docker-compose.yml +1 -0
- package/overlays/jupyter/overlay.yml +1 -0
- package/overlays/k3d/README.md +201 -0
- package/overlays/k3d/devcontainer.patch.json +9 -0
- package/overlays/k3d/overlay.yml +19 -0
- package/overlays/k3d/setup.sh +34 -0
- package/overlays/k3d/verify.sh +38 -0
- package/overlays/keycloak/devcontainer.patch.json +0 -1
- package/overlays/keycloak/docker-compose.yml +1 -0
- package/overlays/keycloak/overlay.yml +15 -0
- package/overlays/localstack/docker-compose.yml +1 -0
- package/overlays/localstack/overlay.yml +19 -1
- package/overlays/loki/devcontainer.patch.json +0 -1
- package/overlays/loki/docker-compose.yml +8 -0
- package/overlays/loki/overlay.yml +1 -0
- package/overlays/mailpit/docker-compose.yml +1 -0
- package/overlays/mailpit/overlay.yml +1 -0
- package/overlays/minio/devcontainer.patch.json +1 -1
- package/overlays/minio/docker-compose.yml +1 -0
- package/overlays/minio/overlay.yml +23 -2
- package/overlays/mkdocs/devcontainer.patch.json +1 -5
- package/overlays/mkdocs/overlay.yml +3 -1
- package/overlays/mkdocs2/devcontainer.patch.json +1 -5
- package/overlays/mkdocs2/overlay.yml +2 -0
- package/overlays/mongodb/docker-compose.yml +2 -0
- package/overlays/mongodb/overlay.yml +26 -2
- package/overlays/mysql/docker-compose.yml +2 -0
- package/overlays/mysql/overlay.yml +36 -2
- package/overlays/nats/docker-compose.yml +1 -0
- package/overlays/nats/overlay.yml +18 -2
- package/overlays/nodejs/devcontainer.patch.json +1 -12
- package/overlays/nodejs/overlay.yml +8 -1
- package/overlays/ollama/.env.example +14 -0
- package/overlays/ollama/README.md +326 -0
- package/overlays/ollama/devcontainer.patch.json +14 -0
- package/overlays/ollama/docker-compose.yml +25 -0
- package/overlays/ollama/overlay.yml +27 -0
- package/overlays/ollama/verify.sh +76 -0
- package/overlays/ollama-cli/README.md +90 -0
- package/overlays/ollama-cli/devcontainer.patch.json +3 -0
- package/overlays/ollama-cli/overlay.yml +19 -0
- package/overlays/ollama-cli/setup.sh +103 -0
- package/overlays/ollama-cli/verify.sh +49 -0
- package/overlays/open-webui/.env.example +5 -0
- package/overlays/open-webui/README.md +162 -0
- package/overlays/open-webui/devcontainer.patch.json +14 -0
- package/overlays/open-webui/docker-compose.yml +24 -0
- package/overlays/open-webui/overlay.yml +45 -0
- package/overlays/opencode/devcontainer.patch.json +4 -1
- package/overlays/otel-collector/README.md +4 -0
- package/overlays/otel-collector/devcontainer.patch.json +4 -1
- package/overlays/otel-collector/docker-compose.yml +8 -4
- package/overlays/otel-collector/overlay.yml +1 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
- package/overlays/otel-demo-nodejs/overlay.yml +9 -1
- package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-python/docker-compose.yml +1 -0
- package/overlays/otel-demo-python/overlay.yml +6 -1
- package/overlays/pandoc/README.md +10 -0
- package/overlays/pandoc/devcontainer.patch.json +0 -5
- package/overlays/pandoc/overlay.yml +2 -0
- package/overlays/pandoc/setup.sh +10 -0
- package/overlays/pgvector/.env.example +6 -0
- package/overlays/pgvector/README.md +215 -0
- package/overlays/pgvector/devcontainer.patch.json +29 -0
- package/overlays/pgvector/docker-compose.yml +33 -0
- package/overlays/pgvector/overlay.yml +47 -0
- package/overlays/playwright/devcontainer.patch.json +0 -5
- package/overlays/playwright/overlay.yml +2 -1
- package/overlays/postgres/.env.example +5 -5
- package/overlays/postgres/devcontainer.patch.json +4 -4
- package/overlays/postgres/docker-compose.yml +11 -6
- package/overlays/postgres/overlay.yml +23 -2
- package/overlays/pre-commit/devcontainer.patch.json +1 -7
- package/overlays/prometheus/devcontainer.patch.json +0 -1
- package/overlays/prometheus/docker-compose.yml +8 -0
- package/overlays/prometheus/overlay.yml +1 -0
- package/overlays/promtail/devcontainer.patch.json +1 -2
- package/overlays/promtail/docker-compose.yml +8 -0
- package/overlays/promtail/overlay.yml +1 -0
- package/overlays/qdrant/.env.example +4 -0
- package/overlays/qdrant/README.md +216 -0
- package/overlays/qdrant/devcontainer.patch.json +20 -0
- package/overlays/qdrant/docker-compose.yml +26 -0
- package/overlays/qdrant/overlay.yml +44 -0
- package/overlays/rabbitmq/docker-compose.yml +1 -0
- package/overlays/rabbitmq/overlay.yml +25 -2
- package/overlays/redis/docker-compose.yml +7 -0
- package/overlays/redis/overlay.yml +15 -1
- package/overlays/redpanda/docker-compose.yml +1 -0
- package/overlays/redpanda/overlay.yml +15 -3
- package/overlays/rocm/overlay.yml +2 -1
- package/overlays/rust/overlay.yml +3 -1
- package/overlays/skaffold/README.md +256 -0
- package/overlays/skaffold/devcontainer.patch.json +9 -0
- package/overlays/skaffold/overlay.yml +20 -0
- package/overlays/skaffold/setup.sh +33 -0
- package/overlays/skaffold/verify.sh +24 -0
- package/overlays/sqlserver/docker-compose.yml +1 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/tempo/devcontainer.patch.json +0 -1
- package/overlays/tempo/docker-compose.yml +8 -0
- package/overlays/tempo/overlay.yml +1 -0
- package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
- package/package.json +3 -2
- package/tool/schema/config.schema.json +31 -1
- package/tool/schema/overlay-manifest.schema.json +33 -0
- package/overlays/.shared/otel/otel-base-config.yaml +0 -30
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Qdrant Overlay
|
|
2
|
+
|
|
3
|
+
Adds [Qdrant](https://qdrant.tech) as a Docker Compose service, providing a high-performance vector database for similarity search and embedding-based retrieval.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Qdrant vector database** — Store, index, and query high-dimensional embedding vectors at scale
|
|
8
|
+
- **REST API on port 6333** — Full-featured HTTP API for collections, points, and search
|
|
9
|
+
- **gRPC API on port 6334** — High-throughput binary protocol for production workloads
|
|
10
|
+
- **Persistent storage** — Named Docker volume preserves data across container rebuilds
|
|
11
|
+
- **Pre-configured `QDRANT_URL`** — Container environment variable set for easy SDK usage
|
|
12
|
+
- **Health check** — Compose readiness check against `/readyz` before dependent services start
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
Qdrant runs as a Docker Compose service alongside your devcontainer. The devcontainer connects to it using the hostname `qdrant` on port `6333` (REST) or `6334` (gRPC).
|
|
17
|
+
|
|
18
|
+
**Service configuration:**
|
|
19
|
+
|
|
20
|
+
- Image: `qdrant/qdrant:latest`
|
|
21
|
+
- Network: `devnet` (shared with the dev container)
|
|
22
|
+
- Ports: `6333` (REST API), `6334` (gRPC)
|
|
23
|
+
- Volume: `qdrant-data` for persistent vector storage
|
|
24
|
+
|
|
25
|
+
The following environment variables are pre-set in the devcontainer:
|
|
26
|
+
|
|
27
|
+
| Variable | Value |
|
|
28
|
+
| ------------- | -------------------- |
|
|
29
|
+
| `QDRANT_HOST` | `qdrant` |
|
|
30
|
+
| `QDRANT_PORT` | `6333` |
|
|
31
|
+
| `QDRANT_URL` | `http://qdrant:6333` |
|
|
32
|
+
|
|
33
|
+
## Common Commands
|
|
34
|
+
|
|
35
|
+
### REST API
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Health check
|
|
39
|
+
curl http://qdrant:6333/healthz
|
|
40
|
+
|
|
41
|
+
# Create a collection
|
|
42
|
+
curl -X PUT http://qdrant:6333/collections/my_collection \
|
|
43
|
+
-H "Content-Type: application/json" \
|
|
44
|
+
-d '{
|
|
45
|
+
"vectors": {
|
|
46
|
+
"size": 1536,
|
|
47
|
+
"distance": "Cosine"
|
|
48
|
+
}
|
|
49
|
+
}'
|
|
50
|
+
|
|
51
|
+
# Insert points
|
|
52
|
+
curl -X PUT http://qdrant:6333/collections/my_collection/points \
|
|
53
|
+
-H "Content-Type: application/json" \
|
|
54
|
+
-d '{
|
|
55
|
+
"points": [
|
|
56
|
+
{
|
|
57
|
+
"id": 1,
|
|
58
|
+
"vector": [0.1, 0.2, 0.3],
|
|
59
|
+
"payload": {"text": "example document"}
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}'
|
|
63
|
+
|
|
64
|
+
# Search for similar vectors
|
|
65
|
+
curl -X POST http://qdrant:6333/collections/my_collection/points/search \
|
|
66
|
+
-H "Content-Type: application/json" \
|
|
67
|
+
-d '{
|
|
68
|
+
"vector": [0.1, 0.2, 0.3],
|
|
69
|
+
"limit": 5
|
|
70
|
+
}'
|
|
71
|
+
|
|
72
|
+
# List collections
|
|
73
|
+
curl http://qdrant:6333/collections
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Python SDK
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pip install qdrant-client
|
|
80
|
+
|
|
81
|
+
python - <<'EOF'
|
|
82
|
+
from qdrant_client import QdrantClient
|
|
83
|
+
from qdrant_client.models import Distance, VectorParams, PointStruct
|
|
84
|
+
|
|
85
|
+
client = QdrantClient(url="http://qdrant:6333")
|
|
86
|
+
|
|
87
|
+
# Create collection
|
|
88
|
+
client.create_collection(
|
|
89
|
+
collection_name="my_collection",
|
|
90
|
+
vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Insert vectors
|
|
94
|
+
client.upsert(
|
|
95
|
+
collection_name="my_collection",
|
|
96
|
+
points=[
|
|
97
|
+
PointStruct(id=1, vector=[0.1] * 1536, payload={"text": "hello"})
|
|
98
|
+
],
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# Search
|
|
102
|
+
results = client.search(
|
|
103
|
+
collection_name="my_collection",
|
|
104
|
+
query_vector=[0.1] * 1536,
|
|
105
|
+
limit=5,
|
|
106
|
+
)
|
|
107
|
+
print(results)
|
|
108
|
+
EOF
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Node.js SDK
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npm install @qdrant/js-client-rest
|
|
115
|
+
|
|
116
|
+
node - <<'EOF'
|
|
117
|
+
import { QdrantClient } from "@qdrant/js-client-rest";
|
|
118
|
+
|
|
119
|
+
const client = new QdrantClient({ url: "http://qdrant:6333" });
|
|
120
|
+
|
|
121
|
+
await client.createCollection("my_collection", {
|
|
122
|
+
vectors: { size: 1536, distance: "Cosine" },
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
const results = await client.search("my_collection", {
|
|
126
|
+
vector: Array(1536).fill(0.1),
|
|
127
|
+
limit: 5,
|
|
128
|
+
});
|
|
129
|
+
console.log(results);
|
|
130
|
+
EOF
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Configuration
|
|
134
|
+
|
|
135
|
+
### Environment Variables
|
|
136
|
+
|
|
137
|
+
| Variable | Default | Description |
|
|
138
|
+
| ------------------ | -------- | ----------------------- |
|
|
139
|
+
| `QDRANT_VERSION` | `latest` | Qdrant Docker image tag |
|
|
140
|
+
| `QDRANT_PORT` | `6333` | Host port for REST API |
|
|
141
|
+
| `QDRANT_GRPC_PORT` | `6334` | Host port for gRPC API |
|
|
142
|
+
|
|
143
|
+
### Port Customization
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# .devcontainer/.env
|
|
147
|
+
QDRANT_PORT=6335
|
|
148
|
+
QDRANT_GRPC_PORT=6336
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Use Cases
|
|
152
|
+
|
|
153
|
+
- **RAG (Retrieval-Augmented Generation)** — Store embeddings for document chunks; retrieve context for LLM queries
|
|
154
|
+
- **Semantic search** — Find similar documents, images, or code snippets by embedding similarity
|
|
155
|
+
- **Recommendation systems** — Surface similar items based on learned embeddings
|
|
156
|
+
- **Anomaly detection** — Identify outliers in high-dimensional embedding spaces
|
|
157
|
+
- **Local AI pipelines** — Pair with `ollama` for fully offline embedding + retrieval workflows
|
|
158
|
+
|
|
159
|
+
**Integrates well with:**
|
|
160
|
+
|
|
161
|
+
- `ollama` — Generate embeddings locally (`ollama pull nomic-embed-text`)
|
|
162
|
+
- `python` — LangChain, LlamaIndex, or raw `qdrant-client` integrations
|
|
163
|
+
- `nodejs` — `@qdrant/js-client-rest` for JavaScript embeddings workflows
|
|
164
|
+
|
|
165
|
+
## Troubleshooting
|
|
166
|
+
|
|
167
|
+
### Service Not Ready
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Check service status
|
|
171
|
+
docker compose ps qdrant
|
|
172
|
+
|
|
173
|
+
# View Qdrant logs
|
|
174
|
+
docker compose logs qdrant
|
|
175
|
+
|
|
176
|
+
# Test health endpoint
|
|
177
|
+
curl http://qdrant:6333/healthz
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Port Conflict
|
|
181
|
+
|
|
182
|
+
If ports 6333 or 6334 are already in use:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# .devcontainer/.env
|
|
186
|
+
QDRANT_PORT=6335
|
|
187
|
+
QDRANT_GRPC_PORT=6336
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Data Persistence
|
|
191
|
+
|
|
192
|
+
Qdrant data is stored in the `qdrant-data` named Docker volume. It persists across container rebuilds but is scoped to the Docker environment:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Inspect the volume
|
|
196
|
+
docker volume inspect qdrant-data
|
|
197
|
+
|
|
198
|
+
# Backup data
|
|
199
|
+
docker run --rm -v qdrant-data:/data -v $(pwd):/backup alpine \
|
|
200
|
+
tar czf /backup/qdrant-backup.tar.gz /data
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## References
|
|
204
|
+
|
|
205
|
+
- [Qdrant Documentation](https://qdrant.tech/documentation/)
|
|
206
|
+
- [Qdrant REST API Reference](https://qdrant.github.io/qdrant/redoc/index.html)
|
|
207
|
+
- [Qdrant Docker Hub](https://hub.docker.com/r/qdrant/qdrant)
|
|
208
|
+
- [Python SDK](https://python-client.qdrant.tech/)
|
|
209
|
+
- [JavaScript SDK](https://github.com/qdrant/qdrant-js)
|
|
210
|
+
|
|
211
|
+
**Related Overlays:**
|
|
212
|
+
|
|
213
|
+
- [`pgvector`](../pgvector/README.md) — PostgreSQL-native vector storage (alternative; conflicts with `postgres`)
|
|
214
|
+
- [`ollama`](../ollama/README.md) — Local LLM and embedding generation
|
|
215
|
+
- [`python`](../python/README.md) — Python development environment
|
|
216
|
+
- [`nodejs`](../nodejs/README.md) — Node.js development environment
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"runServices": ["qdrant"],
|
|
4
|
+
"forwardPorts": [6333, 6334],
|
|
5
|
+
"portsAttributes": {
|
|
6
|
+
"6333": {
|
|
7
|
+
"label": "Qdrant REST API",
|
|
8
|
+
"onAutoForward": "notify"
|
|
9
|
+
},
|
|
10
|
+
"6334": {
|
|
11
|
+
"label": "Qdrant gRPC",
|
|
12
|
+
"onAutoForward": "ignore"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"containerEnv": {
|
|
16
|
+
"QDRANT_HOST": "qdrant",
|
|
17
|
+
"QDRANT_PORT": "6333",
|
|
18
|
+
"QDRANT_URL": "http://qdrant:6333"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
version: '3.8'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
qdrant:
|
|
5
|
+
image: qdrant/qdrant:${QDRANT_VERSION:-{{cs.QDRANT_VERSION}}}
|
|
6
|
+
restart: unless-stopped
|
|
7
|
+
volumes:
|
|
8
|
+
- qdrant-data:/qdrant/storage
|
|
9
|
+
ports:
|
|
10
|
+
- '${QDRANT_PORT:-{{cs.QDRANT_PORT}}}:6333'
|
|
11
|
+
- '${QDRANT_GRPC_PORT:-{{cs.QDRANT_GRPC_PORT}}}:6334'
|
|
12
|
+
networks:
|
|
13
|
+
- devnet
|
|
14
|
+
healthcheck:
|
|
15
|
+
test: ['CMD-SHELL', 'curl -sf http://localhost:6333/readyz || exit 1']
|
|
16
|
+
interval: 10s
|
|
17
|
+
timeout: 5s
|
|
18
|
+
retries: 5
|
|
19
|
+
start_period: 10s
|
|
20
|
+
|
|
21
|
+
volumes:
|
|
22
|
+
qdrant-data:
|
|
23
|
+
|
|
24
|
+
networks:
|
|
25
|
+
devnet:
|
|
26
|
+
name: devnet
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
id: qdrant
|
|
2
|
+
name: Qdrant
|
|
3
|
+
description: High-performance vector database for similarity search and embeddings
|
|
4
|
+
category: database
|
|
5
|
+
supports:
|
|
6
|
+
- compose
|
|
7
|
+
requires: []
|
|
8
|
+
suggests:
|
|
9
|
+
- ollama
|
|
10
|
+
- python
|
|
11
|
+
- nodejs
|
|
12
|
+
- prometheus
|
|
13
|
+
- grafana
|
|
14
|
+
- otel-collector
|
|
15
|
+
conflicts: []
|
|
16
|
+
serviceOrder: 0
|
|
17
|
+
tags:
|
|
18
|
+
- database
|
|
19
|
+
- vector
|
|
20
|
+
- embeddings
|
|
21
|
+
- search
|
|
22
|
+
- qdrant
|
|
23
|
+
ports:
|
|
24
|
+
- port: 6333
|
|
25
|
+
service: qdrant
|
|
26
|
+
protocol: http
|
|
27
|
+
description: Qdrant REST API
|
|
28
|
+
onAutoForward: notify
|
|
29
|
+
connectionStringTemplate: 'http://{host}:{port}'
|
|
30
|
+
- port: 6334
|
|
31
|
+
service: qdrant
|
|
32
|
+
protocol: grpc
|
|
33
|
+
description: Qdrant gRPC API
|
|
34
|
+
onAutoForward: ignore
|
|
35
|
+
parameters:
|
|
36
|
+
QDRANT_VERSION:
|
|
37
|
+
description: Qdrant Docker image tag
|
|
38
|
+
default: v1.9.0
|
|
39
|
+
QDRANT_PORT:
|
|
40
|
+
description: Host port mapped to Qdrant REST API (6333 inside container)
|
|
41
|
+
default: '6333'
|
|
42
|
+
QDRANT_GRPC_PORT:
|
|
43
|
+
description: Host port mapped to Qdrant gRPC API (6334 inside container)
|
|
44
|
+
default: '6334'
|
|
@@ -1,12 +1,35 @@
|
|
|
1
1
|
id: rabbitmq
|
|
2
2
|
name: RabbitMQ
|
|
3
3
|
description: Message broker with AMQP protocol and management UI
|
|
4
|
-
category:
|
|
4
|
+
category: messaging
|
|
5
5
|
supports:
|
|
6
6
|
- compose
|
|
7
7
|
requires: []
|
|
8
|
-
suggests:
|
|
8
|
+
suggests:
|
|
9
|
+
- prometheus
|
|
10
|
+
- grafana
|
|
9
11
|
conflicts: []
|
|
12
|
+
serviceOrder: 0
|
|
13
|
+
parameters:
|
|
14
|
+
RABBITMQ_VERSION:
|
|
15
|
+
description: RabbitMQ image version tag (management variant used)
|
|
16
|
+
default: 3-management
|
|
17
|
+
RABBITMQ_PORT:
|
|
18
|
+
description: Host port mapped to AMQP (5672 inside container)
|
|
19
|
+
default: '5672'
|
|
20
|
+
RABBITMQ_MANAGEMENT_PORT:
|
|
21
|
+
description: Host port mapped to management UI (15672 inside container)
|
|
22
|
+
default: '15672'
|
|
23
|
+
RABBITMQ_USER:
|
|
24
|
+
description: RabbitMQ default username
|
|
25
|
+
default: guest
|
|
26
|
+
RABBITMQ_PASSWORD:
|
|
27
|
+
description: RabbitMQ default password
|
|
28
|
+
default: guest
|
|
29
|
+
sensitive: true
|
|
30
|
+
RABBITMQ_VHOST:
|
|
31
|
+
description: RabbitMQ default virtual host
|
|
32
|
+
default: /
|
|
10
33
|
tags:
|
|
11
34
|
- database
|
|
12
35
|
- messaging
|
|
@@ -13,9 +13,16 @@ services:
|
|
|
13
13
|
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
|
|
14
14
|
networks:
|
|
15
15
|
- devnet
|
|
16
|
+
healthcheck:
|
|
17
|
+
test: ['CMD', 'redis-cli', 'ping']
|
|
18
|
+
interval: 10s
|
|
19
|
+
timeout: 5s
|
|
20
|
+
retries: 5
|
|
21
|
+
start_period: 10s
|
|
16
22
|
|
|
17
23
|
volumes:
|
|
18
24
|
redis-data:
|
|
19
25
|
|
|
20
26
|
networks:
|
|
21
27
|
devnet:
|
|
28
|
+
name: devnet
|
|
@@ -5,8 +5,22 @@ category: database
|
|
|
5
5
|
supports:
|
|
6
6
|
- compose
|
|
7
7
|
requires: []
|
|
8
|
-
suggests:
|
|
8
|
+
suggests:
|
|
9
|
+
- prometheus
|
|
10
|
+
- grafana
|
|
9
11
|
conflicts: []
|
|
12
|
+
serviceOrder: 0
|
|
13
|
+
parameters:
|
|
14
|
+
REDIS_VERSION:
|
|
15
|
+
description: Redis image version tag
|
|
16
|
+
default: '7'
|
|
17
|
+
REDIS_PORT:
|
|
18
|
+
description: Host port mapped to Redis (6379 inside container)
|
|
19
|
+
default: '6379'
|
|
20
|
+
REDIS_PASSWORD:
|
|
21
|
+
description: Redis password (leave empty to disable authentication)
|
|
22
|
+
default: ''
|
|
23
|
+
sensitive: true
|
|
10
24
|
tags:
|
|
11
25
|
- database
|
|
12
26
|
- cache
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
id: redpanda
|
|
2
2
|
name: Redpanda
|
|
3
3
|
description: Kafka-compatible event streaming with web console
|
|
4
|
-
category:
|
|
4
|
+
category: messaging
|
|
5
5
|
supports:
|
|
6
6
|
- compose
|
|
7
7
|
requires: []
|
|
8
|
-
suggests:
|
|
9
|
-
|
|
8
|
+
suggests:
|
|
9
|
+
- prometheus
|
|
10
|
+
- grafana
|
|
11
|
+
conflicts:
|
|
12
|
+
- mysql
|
|
13
|
+
- mongodb
|
|
14
|
+
- nodejs
|
|
15
|
+
- bun
|
|
16
|
+
- go
|
|
17
|
+
- java
|
|
18
|
+
- dotnet
|
|
19
|
+
- otel-demo-nodejs
|
|
20
|
+
- otel-demo-python
|
|
21
|
+
serviceOrder: 0
|
|
10
22
|
tags:
|
|
11
23
|
- database
|
|
12
24
|
- messaging
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# Skaffold Overlay
|
|
2
|
+
|
|
3
|
+
Installs [Skaffold](https://skaffold.dev), Google's command-line tool for continuous development on Kubernetes — handling the build, push, and deploy lifecycle automatically as source files change.
|
|
4
|
+
|
|
5
|
+
> **Note:** This overlay conflicts with `tilt` because both tools serve the same "continuous Kubernetes development" role. Choose `skaffold` for a configuration-file-driven, CI-friendly pipeline, or `tilt` for a more interactive, UI-driven workflow.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **`skaffold dev`** — Watch source files and automatically rebuild, push, and redeploy on changes
|
|
10
|
+
- **`skaffold run`** — One-shot build and deploy pipeline for CI/CD integration
|
|
11
|
+
- **Declarative config** — `skaffold.yaml` defines the entire build-test-deploy pipeline as code
|
|
12
|
+
- **Multiple builders** — Docker, Buildpacks, Bazel, Jib (Maven/Gradle), and more
|
|
13
|
+
- **Multiple deployers** — `kubectl`, Helm, Kustomize, and Cloud Run
|
|
14
|
+
- **Test integration** — Container Structure Tests and custom test steps built in
|
|
15
|
+
- **Profile support** — Swap out configs per environment (dev, staging, prod)
|
|
16
|
+
|
|
17
|
+
## How It Works
|
|
18
|
+
|
|
19
|
+
Skaffold is installed as a static binary in the devcontainer during `setup.sh`. It orchestrates the build-push-deploy cycle against whichever Kubernetes cluster is active in your `kubeconfig` (e.g. a k3d or kind cluster).
|
|
20
|
+
|
|
21
|
+
**Suggested overlays:**
|
|
22
|
+
|
|
23
|
+
- `kubectl-helm` — Kubernetes CLI and Helm used as Skaffold deployers
|
|
24
|
+
- `kind` — Full-conformance local Kubernetes cluster
|
|
25
|
+
- `k3d` — Lightweight local Kubernetes cluster
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
Skaffold is installed automatically during devcontainer creation via `setup.sh`:
|
|
30
|
+
|
|
31
|
+
- Downloads the Skaffold binary for your architecture (amd64/arm64)
|
|
32
|
+
- Installs to `/usr/local/bin/skaffold`
|
|
33
|
+
- Verifies the installation
|
|
34
|
+
|
|
35
|
+
## Common Commands
|
|
36
|
+
|
|
37
|
+
### Development Workflow
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Continuous development — rebuild and redeploy on file changes
|
|
41
|
+
skaffold dev
|
|
42
|
+
|
|
43
|
+
# One-shot build + deploy
|
|
44
|
+
skaffold run
|
|
45
|
+
|
|
46
|
+
# Delete all resources deployed by Skaffold
|
|
47
|
+
skaffold delete
|
|
48
|
+
|
|
49
|
+
# Preview what Skaffold would deploy (dry run)
|
|
50
|
+
skaffold render
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Build and Test
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Build images only (no deploy)
|
|
57
|
+
skaffold build
|
|
58
|
+
|
|
59
|
+
# Run tests only
|
|
60
|
+
skaffold test
|
|
61
|
+
|
|
62
|
+
# Build and push to a registry
|
|
63
|
+
skaffold build --push
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Profiles
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Use a specific profile
|
|
70
|
+
skaffold dev --profile staging
|
|
71
|
+
|
|
72
|
+
# Combine multiple profiles
|
|
73
|
+
skaffold run --profile prod --profile feature-flag
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Debugging
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Enable port-forwarding for services
|
|
80
|
+
skaffold dev --port-forward
|
|
81
|
+
|
|
82
|
+
# Verbose output
|
|
83
|
+
skaffold dev -v debug
|
|
84
|
+
|
|
85
|
+
# Show rendered manifests
|
|
86
|
+
skaffold render --output manifests.yaml
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Configuration
|
|
90
|
+
|
|
91
|
+
### skaffold.yaml
|
|
92
|
+
|
|
93
|
+
Create a `skaffold.yaml` in your project root:
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
apiVersion: skaffold/v4beta11
|
|
97
|
+
kind: Config
|
|
98
|
+
metadata:
|
|
99
|
+
name: my-app
|
|
100
|
+
build:
|
|
101
|
+
artifacts:
|
|
102
|
+
- image: my-app
|
|
103
|
+
docker:
|
|
104
|
+
dockerfile: Dockerfile
|
|
105
|
+
deploy:
|
|
106
|
+
kubectl:
|
|
107
|
+
manifests:
|
|
108
|
+
- k8s/*.yaml
|
|
109
|
+
test:
|
|
110
|
+
- image: my-app
|
|
111
|
+
structureTests:
|
|
112
|
+
- ./structure-test.yaml
|
|
113
|
+
profiles:
|
|
114
|
+
- name: prod
|
|
115
|
+
deploy:
|
|
116
|
+
helm:
|
|
117
|
+
releases:
|
|
118
|
+
- name: my-app
|
|
119
|
+
chartPath: helm/my-app
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Common Builders
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
# Docker (default)
|
|
126
|
+
build:
|
|
127
|
+
artifacts:
|
|
128
|
+
- image: my-app
|
|
129
|
+
docker:
|
|
130
|
+
dockerfile: Dockerfile
|
|
131
|
+
|
|
132
|
+
# Buildpacks (no Dockerfile needed)
|
|
133
|
+
build:
|
|
134
|
+
artifacts:
|
|
135
|
+
- image: my-app
|
|
136
|
+
buildpacks:
|
|
137
|
+
builder: gcr.io/buildpacks/builder:v1
|
|
138
|
+
|
|
139
|
+
# Jib (Java/Maven)
|
|
140
|
+
build:
|
|
141
|
+
artifacts:
|
|
142
|
+
- image: my-app
|
|
143
|
+
jib:
|
|
144
|
+
project: my-module
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Common Deployers
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
# kubectl (plain manifests)
|
|
151
|
+
deploy:
|
|
152
|
+
kubectl:
|
|
153
|
+
manifests:
|
|
154
|
+
- k8s/**/*.yaml
|
|
155
|
+
|
|
156
|
+
# Helm
|
|
157
|
+
deploy:
|
|
158
|
+
helm:
|
|
159
|
+
releases:
|
|
160
|
+
- name: my-app
|
|
161
|
+
chartPath: helm/my-app
|
|
162
|
+
valuesFiles:
|
|
163
|
+
- helm/values.yaml
|
|
164
|
+
|
|
165
|
+
# Kustomize
|
|
166
|
+
deploy:
|
|
167
|
+
kustomize:
|
|
168
|
+
paths:
|
|
169
|
+
- k8s/overlays/dev
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Benefits vs Tilt
|
|
173
|
+
|
|
174
|
+
| Feature | Skaffold (this overlay) | Tilt |
|
|
175
|
+
| --------------------- | --------------------------------- | -------------------------------- |
|
|
176
|
+
| **Primary interface** | ✅ CLI + skaffold.yaml config | Interactive UI (port 10350) |
|
|
177
|
+
| **CI/CD suitability** | ✅ First-class CI support | ⚠️ UI-oriented, less CI-friendly |
|
|
178
|
+
| **Config format** | ✅ Declarative YAML | Starlark/Python (Tiltfile) |
|
|
179
|
+
| **Build systems** | ✅ Docker, Buildpacks, Jib, Bazel | Docker, Buildpacks |
|
|
180
|
+
| **Deploy targets** | ✅ kubectl, Helm, Kustomize, Run | kubectl, Helm |
|
|
181
|
+
| **Learning curve** | Lower (declarative YAML) | Programmable (more flexible) |
|
|
182
|
+
| **Debugging support** | ✅ Built-in debug mode | ✅ Built-in live updates |
|
|
183
|
+
|
|
184
|
+
**Choose Skaffold when:**
|
|
185
|
+
|
|
186
|
+
- You want a declarative, portable, config-file-driven pipeline
|
|
187
|
+
- CI/CD integration is a priority
|
|
188
|
+
- You need support for multiple build systems (Jib, Buildpacks, Bazel)
|
|
189
|
+
|
|
190
|
+
**Choose Tilt when:**
|
|
191
|
+
|
|
192
|
+
- You prefer an interactive browser UI for development
|
|
193
|
+
- You want fine-grained control over the update pipeline via a Tiltfile
|
|
194
|
+
|
|
195
|
+
## Use Cases
|
|
196
|
+
|
|
197
|
+
- **Inner loop acceleration** — Rebuild and redeploy Kubernetes workloads on save, without manual `docker build && kubectl apply`
|
|
198
|
+
- **Multi-service applications** — Manage build and deploy of multiple microservices from a single `skaffold.yaml`
|
|
199
|
+
- **CI/CD integration** — Use `skaffold run` in pipelines for consistent build-test-deploy flows
|
|
200
|
+
- **Helm chart development** — Iterate on Helm charts with live cluster feedback
|
|
201
|
+
- **GitOps preview environments** — Render manifests for inspection or PR previews
|
|
202
|
+
|
|
203
|
+
**Integrates well with:**
|
|
204
|
+
|
|
205
|
+
- `kubectl-helm` — Used by Skaffold's deploy pipeline
|
|
206
|
+
- `k3d` — Lightweight local cluster for development
|
|
207
|
+
- `kind` — Full-conformance local cluster for testing
|
|
208
|
+
|
|
209
|
+
## Troubleshooting
|
|
210
|
+
|
|
211
|
+
### No kubeconfig Found
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Ensure kubectl is configured (kubectl-helm overlay must be selected)
|
|
215
|
+
kubectl cluster-info
|
|
216
|
+
|
|
217
|
+
# If using k3d, merge cluster config
|
|
218
|
+
k3d kubeconfig merge dev --kubeconfig-merge-default
|
|
219
|
+
|
|
220
|
+
# If using kind, kubeconfig is set automatically on cluster creation
|
|
221
|
+
kind create cluster --name dev
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Build Failures
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
# Check Docker is accessible
|
|
228
|
+
docker info
|
|
229
|
+
|
|
230
|
+
# Run with verbose logging
|
|
231
|
+
skaffold dev -v debug
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Deploy Failures
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# View Kubernetes events
|
|
238
|
+
kubectl get events --sort-by='.lastTimestamp'
|
|
239
|
+
|
|
240
|
+
# Tail pod logs
|
|
241
|
+
kubectl logs -f deployment/my-app
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## References
|
|
245
|
+
|
|
246
|
+
- [Skaffold Documentation](https://skaffold.dev/docs/)
|
|
247
|
+
- [Skaffold GitHub](https://github.com/GoogleContainerTools/skaffold)
|
|
248
|
+
- [skaffold.yaml Reference](https://skaffold.dev/docs/references/yaml/)
|
|
249
|
+
- [Kubernetes Documentation](https://kubernetes.io/docs/)
|
|
250
|
+
|
|
251
|
+
**Related Overlays:**
|
|
252
|
+
|
|
253
|
+
- [`kubectl-helm`](../kubectl-helm/README.md) — Kubernetes CLI and Helm (recommended with Skaffold)
|
|
254
|
+
- [`kind`](../kind/README.md) — Full-conformance local Kubernetes cluster
|
|
255
|
+
- [`k3d`](../k3d/README.md) — Lightweight local Kubernetes cluster
|
|
256
|
+
- [`tilt`](../tilt/README.md) — Alternative interactive Kubernetes development tool (conflicts)
|