docker
Setup Docker Compose local development stack with Postgres, Redis, S3 (RustFS), Mailpit, Meilisearch, Ollama, and Jaeger. Use this skill when the user says "setup docker", "docker compose", "start containers", or "docker local dev".
What this skill does
# Docker Local Development Stack
Sets up a production-ready local development environment using Docker Compose with health checks, named volumes, and proper service configuration.
## Services Included
| Service | Port | Web UI | Purpose |
|---------|------|--------|---------|
| Postgres 16 + pgvector | 5432 | - | Primary database |
| Redis 7 | 6379 | - | Cache & session store |
| RustFS | 9000, 9001 | http://localhost:9001 | S3-compatible storage |
| Mailpit | 1025, 8025 | http://localhost:8025 | Email testing |
| Meilisearch | 7700 | http://localhost:7700 | Full-text search |
| Ollama | 11434 | - | Local LLM inference |
| Jaeger | 16686, 4318 | http://localhost:16686 | Distributed tracing |
## Setup Steps
### 1. Create docker-compose.yml
Create `docker-compose.yml` in the project root:
```yaml
services:
postgres:
image: pgvector/pgvector:pg16
environment:
POSTGRES_USER: ${POSTGRES_USER:-app}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
POSTGRES_DB: ${POSTGRES_DB:-appdb}
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER:-app}"]
interval: 5s
timeout: 5s
retries: 5
start_period: 60s
restart: unless-stopped
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
start_period: 15s
restart: unless-stopped
s3:
image: rustfs/rustfs:latest
ports:
- "9000:9000"
- "9001:9001"
environment:
RUSTFS_ROOT_USER: ${S3_ACCESS_KEY:-rustfsadmin}
RUSTFS_ROOT_PASSWORD: ${S3_SECRET_KEY:-rustfsadmin}
RUSTFS_ACCESS_KEY: ${S3_ACCESS_KEY:-rustfsadmin}
RUSTFS_SECRET_KEY: ${S3_SECRET_KEY:-rustfsadmin}
volumes:
- s3_data:/data
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
start_period: 30s
restart: unless-stopped
mailpit:
image: axllent/mailpit:latest
ports:
- "1025:1025"
- "8025:8025"
environment:
MP_SMTP_AUTH_ACCEPT_ANY: "true"
MP_SMTP_AUTH_ALLOW_INSECURE: "true"
restart: unless-stopped
meilisearch:
image: getmeili/meilisearch:v1.10
ports:
- "7700:7700"
environment:
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-masterkey}
MEILI_NO_ANALYTICS: "true"
MEILI_ENV: development
volumes:
- meilisearch_data:/meili_data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:7700/health"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
environment:
OLLAMA_HOST: 0.0.0.0
healthcheck:
test: ["CMD", "ollama", "list"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
restart: unless-stopped
# Uncomment for GPU support (NVIDIA)
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "16686:16686" # UI
- "4318:4318" # OTLP HTTP
environment:
COLLECTOR_OTLP_ENABLED: "true"
restart: unless-stopped
volumes:
postgres_data:
redis_data:
s3_data:
meilisearch_data:
ollama_data:
```
### 2. Create .env for Docker Compose
Docker Compose reads variable substitutions from `.env` in the project root (**not** `.env.local`). Create a `.env` file so `docker-compose.yml` can resolve `${VAR:-default}` references:
```env
# Docker Compose variable substitution
POSTGRES_USER=app
POSTGRES_PASSWORD=password
POSTGRES_DB=appdb
S3_ACCESS_KEY=rustfsadmin
S3_SECRET_KEY=rustfsadmin
MEILI_MASTER_KEY=masterkey
```
> **Note:** The defaults in `docker-compose.yml` match these values, so this file is technically optional. But creating it avoids "variable is not set" warnings and makes overrides explicit.
### 3. Create .env.local for the App
Add Docker-specific environment variables to `.env.local` (read by Next.js):
```env
# Database
POSTGRES_USER=app
POSTGRES_PASSWORD=password
POSTGRES_DB=appdb
DATABASE_URL=postgresql://app:password@localhost:5432/appdb
# Redis
REDIS_URL=redis://localhost:6379
# S3 Storage (RustFS)
S3_ENDPOINT=http://localhost:9000
S3_ACCESS_KEY=rustfsadmin
S3_SECRET_KEY=rustfsadmin
S3_BUCKET=uploads
S3_REGION=us-east-1
# Search
MEILI_MASTER_KEY=masterkey
MEILI_URL=http://localhost:7700
# Email
SMTP_HOST=localhost
SMTP_PORT=1025
SMTP_SECURE=false
# AI (Ollama)
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.2
AI_PROVIDER=ollama
# Observability (Jaeger)
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
```
### 4. Start Services
```bash
docker compose up -d
```
## Health Check Best Practices
Health checks ensure services are ready before dependent services start:
- **Postgres**: Uses `pg_isready` with 60s start period for initialization
- **Redis**: Uses `redis-cli ping` with 15s start period
- **RustFS (S3)**: Uses MinIO-compatible health endpoint
- **Meilisearch**: Uses HTTP health endpoint
Use `depends_on` with `condition: service_healthy` when adding an app service:
```yaml
app:
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
```
## Volume Management
- **Named volumes** persist data across restarts
- `docker compose down` preserves volumes
- `docker compose down -v` deletes volumes (data loss!)
- Never use `-v` unless you want to reset data
## Commands Reference
| Command | Description |
|---------|-------------|
| `docker compose up -d` | Start all services |
| `docker compose down` | Stop services (keep data) |
| `docker compose down -v` | Stop and delete all data |
| `docker compose logs -f` | Follow all logs |
| `docker compose logs -f postgres` | Follow specific service |
| `docker compose ps` | List running services |
| `docker compose restart redis` | Restart specific service |
## Service URLs
After starting, access services at:
- **Postgres**: `postgresql://app:password@localhost:5432/appdb`
- **Redis**: `redis://localhost:6379`
- **S3 API**: `http://localhost:9000`
- **S3 Console**: http://localhost:9001 (login: rustfsadmin/rustfsadmin)
- **Mailpit UI**: http://localhost:8025
- **Meilisearch**: http://localhost:7700
- **Ollama API**: http://localhost:11434
- **Jaeger UI**: http://localhost:16686
## Ollama Setup
After starting Ollama, pull models:
```bash
# Pull popular models
docker exec -it $(docker compose ps -q ollama) ollama pull llama3.2
docker exec -it $(docker compose ps -q ollama) ollama pull mistral
docker exec -it $(docker compose ps -q ollama) ollama pull nomic-embed-text
# List available models
docker exec -it $(docker compose ps -q ollama) ollama list
# Test a model
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Hello!",
"stream": false
}'
```
### GPU Support (NVIDIA)
For GPU acceleration, uncomment the `deploy` section in the Ollama service and ensure:
1. NVIDIA drivers are installed
2. NVIDIA Container Toolkit is installed:
```bash
# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-tooRelated in Backend & APIs
jfrog
IncludedInteract with the JFrog Platform via the JFrog CLI and REST/GraphQL APIs. Use this skill when the user wants to manage Artifactory repositories, upload or download artifacts, manage builds, configure permissions, manage users and groups, work with access tokens, configure JFrog CLI servers, search artifacts, manage properties, set up replication, manage JFrog Projects, run security audits or scans, look up CVE details, query exposures scan results from JFrog Advanced Security, manage release bundles and lifecycle operations, aggregate or export platform data, or perform any JFrog Platform administration task. Also use when the user mentions jf, jfrog, artifactory, xray, distribution, evidence, apptrust, onemodel, graphql, workers, mission control, curation, advanced security, exposures, or any JFrog product name.
cupynumeric-migration-readiness
IncludedPre-migration readiness assessor for porting NumPy to cuPyNumeric. Use BEFORE substantial porting work begins when the user asks whether code will scale on GPU, whether they should migrate to cuPyNumeric, which NumPy patterns transfer cleanly, what must be refactored before porting, or mentions pre-port assessment, scaling analysis, or refactor planning. Inspect the user's source code, look up NumPy usage, cross-reference the cuPyNumeric API support manifest, and distinguish distributed-scaling-friendly patterns from blockers such as unsupported APIs, scalar synchronization, host round-trips, Python/object-heavy control flow, shape/data-dependent branching, and in-place mutation hazards. Produce a verdict of READY, LIGHT REFACTOR, SIGNIFICANT REFACTOR, or NOT RECOMMENDED, with concrete refactor pointers.
alibabacloud-data-agent-skill
IncludedInvoke Alibaba Cloud Apsara Data Agent for Analytics via CLI to perform natural language-driven data analysis on enterprise databases. Data Agent for Analytics is an intelligent data analysis agent developed by Alibaba Cloud Database team for enterprise users. It automatically completes requirement analysis, data understanding, analysis insights, and report generation based on natural language descriptions. This tool supports: discovering data resources (instances/databases/tables) managed in DMS, initiating query or deep analysis sessions, real-time progress tracking, and retrieving analysis conclusions and generated reports. Use this Skill when users need to query databases, analyze data trends, generate data reports, ask questions in natural language, or mention "Data Agent", "data analysis", "database query", "SQL analysis", "data insights".
token-optimizer
IncludedReduce OpenClaw token usage and API costs through smart model routing, heartbeat optimization, budget tracking, and native 2026.2.15 features (session pruning, bootstrap size limits, cache TTL alignment). Use when token costs are high, API rate limits are being hit, or hosting multiple agents at scale. The 4 executable scripts (context_optimizer, model_router, heartbeat_optimizer, token_tracker) are local-only — no network requests, no subprocess calls, no system modifications. Reference files (PROVIDERS.md, config-patches.json) document optional multi-provider strategies that require external API keys and network access if you choose to use them. See SECURITY.md for full breakdown.
resend-cli
IncludedUse this skill when the task is specifically about operating Resend from an AI agent, terminal session, or CI job via the official resend CLI: installing/authenticating the CLI, sending/listing/updating/cancelling emails, batch sends, domains and DNS, webhooks and local listeners, inbound receiving, contacts, topics, segments, broadcasts, templates, API keys, profiles, or debugging Resend CLI/API failures. Trigger on mentions of Resend CLI, `resend`, `resend doctor`, `resend emails send`, `resend domains`, `resend webhooks listen`, `resend emails receiving`, or agent-friendly terminal automation.
alibabacloud-odps-maxframe-coding
IncludedUse this skill for MaxFrame SDK development and documentation navigation on Alibaba Cloud MaxCompute (ODPS). Helps answer MaxFrame API, concept, official example, and supported pandas API questions; create data processing programs; read/write MaxCompute tables; debug jobs (remote or local); and build custom DPE runtime images. Trigger when users mention MaxFrame, MaxCompute with MaxFrame, ODPS table processing, DPE runtime, MaxFrame docs/examples, DataFrame/Tensor operations, or GPU runtime setup. Works for both English and Chinese queries about Alibaba Cloud data processing with MaxFrame.