start-vibing 3.0.8 → 3.0.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/package.json +1 -1
- package/template/.claude/CLAUDE.md +18 -3
- package/template/.claude/skills/api-docs/SKILL.md +206 -0
- package/template/.claude/skills/claude-seo/SKILL.md +84 -0
- package/template/.claude/skills/mongoose-patterns/SKILL.md +188 -0
- package/template/.claude/skills/playwright-testing/SKILL.md +251 -0
- package/template/.claude/skills/skill-creator/SKILL.md +106 -0
- package/template/.claude/skills/test-infrastructure/SKILL.md +242 -0
- package/template/.claude/agents/_archive/01-orchestration/agent-selector.md +0 -130
- package/template/.claude/agents/_archive/01-orchestration/checkpoint-manager.md +0 -142
- package/template/.claude/agents/_archive/01-orchestration/context-manager.md +0 -138
- package/template/.claude/agents/_archive/01-orchestration/error-recovery.md +0 -182
- package/template/.claude/agents/_archive/01-orchestration/orchestrator.md +0 -114
- package/template/.claude/agents/_archive/01-orchestration/parallel-coordinator.md +0 -141
- package/template/.claude/agents/_archive/01-orchestration/task-decomposer.md +0 -121
- package/template/.claude/agents/_archive/01-orchestration/workflow-router.md +0 -119
- package/template/.claude/agents/_archive/02-typescript/bun-runtime-expert.md +0 -197
- package/template/.claude/agents/_archive/02-typescript/esm-resolver.md +0 -193
- package/template/.claude/agents/_archive/02-typescript/import-alias-enforcer.md +0 -158
- package/template/.claude/agents/_archive/02-typescript/ts-generics-helper.md +0 -183
- package/template/.claude/agents/_archive/02-typescript/ts-migration-helper.md +0 -238
- package/template/.claude/agents/_archive/02-typescript/ts-strict-checker.md +0 -180
- package/template/.claude/agents/_archive/02-typescript/ts-types-analyzer.md +0 -199
- package/template/.claude/agents/_archive/02-typescript/type-definition-writer.md +0 -187
- package/template/.claude/agents/_archive/02-typescript/zod-schema-designer.md +0 -212
- package/template/.claude/agents/_archive/02-typescript/zod-validator.md +0 -158
- package/template/.claude/agents/_archive/03-testing/playwright-assertions.md +0 -265
- package/template/.claude/agents/_archive/03-testing/playwright-e2e.md +0 -247
- package/template/.claude/agents/_archive/03-testing/playwright-fixtures.md +0 -234
- package/template/.claude/agents/_archive/03-testing/playwright-multi-viewport.md +0 -256
- package/template/.claude/agents/_archive/03-testing/playwright-page-objects.md +0 -247
- package/template/.claude/agents/_archive/03-testing/test-cleanup-manager.md +0 -248
- package/template/.claude/agents/_archive/03-testing/test-data-generator.md +0 -254
- package/template/.claude/agents/_archive/03-testing/tester-integration.md +0 -278
- package/template/.claude/agents/_archive/03-testing/tester-unit.md +0 -207
- package/template/.claude/agents/_archive/03-testing/vitest-config.md +0 -287
- package/template/.claude/agents/_archive/04-docker/container-health.md +0 -255
- package/template/.claude/agents/_archive/04-docker/deployment-validator.md +0 -225
- package/template/.claude/agents/_archive/04-docker/docker-compose-designer.md +0 -281
- package/template/.claude/agents/_archive/04-docker/docker-env-manager.md +0 -235
- package/template/.claude/agents/_archive/04-docker/docker-multi-stage.md +0 -241
- package/template/.claude/agents/_archive/04-docker/dockerfile-optimizer.md +0 -208
- package/template/.claude/agents/_archive/05-database/database-seeder.md +0 -273
- package/template/.claude/agents/_archive/05-database/mongodb-query-optimizer.md +0 -230
- package/template/.claude/agents/_archive/05-database/mongoose-aggregation.md +0 -306
- package/template/.claude/agents/_archive/05-database/mongoose-index-optimizer.md +0 -182
- package/template/.claude/agents/_archive/05-database/mongoose-schema-designer.md +0 -267
- package/template/.claude/agents/_archive/06-security/auth-session-validator.md +0 -68
- package/template/.claude/agents/_archive/06-security/input-sanitizer.md +0 -80
- package/template/.claude/agents/_archive/06-security/owasp-checker.md +0 -97
- package/template/.claude/agents/_archive/06-security/permission-auditor.md +0 -100
- package/template/.claude/agents/_archive/06-security/security-auditor.md +0 -84
- package/template/.claude/agents/_archive/06-security/sensitive-data-scanner.md +0 -83
- package/template/.claude/agents/_archive/07-documentation/api-documenter.md +0 -136
- package/template/.claude/agents/_archive/07-documentation/changelog-manager.md +0 -105
- package/template/.claude/agents/_archive/07-documentation/claude-md-compactor.md +0 -214
- package/template/.claude/agents/_archive/07-documentation/documenter.md +0 -184
- package/template/.claude/agents/_archive/07-documentation/domain-updater.md +0 -138
- package/template/.claude/agents/_archive/07-documentation/jsdoc-generator.md +0 -114
- package/template/.claude/agents/_archive/07-documentation/readme-generator.md +0 -135
- package/template/.claude/agents/_archive/08-git/branch-manager.md +0 -58
- package/template/.claude/agents/_archive/08-git/commit-manager.md +0 -78
- package/template/.claude/agents/_archive/09-quality/code-reviewer.md +0 -71
- package/template/.claude/agents/_archive/09-quality/quality-checker.md +0 -67
- package/template/.claude/agents/_archive/10-research/best-practices-finder.md +0 -89
- package/template/.claude/agents/_archive/10-research/competitor-analyzer.md +0 -106
- package/template/.claude/agents/_archive/10-research/pattern-researcher.md +0 -93
- package/template/.claude/agents/_archive/10-research/research-cache-manager.md +0 -76
- package/template/.claude/agents/_archive/10-research/research-web.md +0 -98
- package/template/.claude/agents/_archive/10-research/tech-evaluator.md +0 -101
- package/template/.claude/agents/_archive/11-ui-ux/accessibility-auditor.md +0 -136
- package/template/.claude/agents/_archive/11-ui-ux/design-system-enforcer.md +0 -125
- package/template/.claude/agents/_archive/11-ui-ux/skeleton-generator.md +0 -118
- package/template/.claude/agents/_archive/11-ui-ux/ui-desktop.md +0 -132
- package/template/.claude/agents/_archive/11-ui-ux/ui-mobile.md +0 -125
- package/template/.claude/agents/_archive/11-ui-ux/ui-tablet.md +0 -110
- package/template/.claude/agents/_archive/12-performance/api-latency-analyzer.md +0 -156
- package/template/.claude/agents/_archive/12-performance/bundle-analyzer.md +0 -113
- package/template/.claude/agents/_archive/12-performance/memory-leak-detector.md +0 -137
- package/template/.claude/agents/_archive/12-performance/performance-profiler.md +0 -115
- package/template/.claude/agents/_archive/12-performance/query-optimizer.md +0 -124
- package/template/.claude/agents/_archive/12-performance/render-optimizer.md +0 -154
- package/template/.claude/agents/_archive/_backup/analyzer.md +0 -134
- package/template/.claude/agents/_archive/_backup/code-reviewer.md +0 -279
- package/template/.claude/agents/_archive/_backup/commit-manager.md +0 -219
- package/template/.claude/agents/_archive/_backup/debugger.md +0 -280
- package/template/.claude/agents/_archive/_backup/documenter.md +0 -237
- package/template/.claude/agents/_archive/_backup/domain-updater.md +0 -197
- package/template/.claude/agents/_archive/_backup/final-validator.md +0 -169
- package/template/.claude/agents/_archive/_backup/orchestrator.md +0 -149
- package/template/.claude/agents/_archive/_backup/performance.md +0 -232
- package/template/.claude/agents/_archive/_backup/quality-checker.md +0 -240
- package/template/.claude/agents/_archive/_backup/research.md +0 -315
- package/template/.claude/agents/_archive/_backup/security-auditor.md +0 -192
- package/template/.claude/agents/_archive/_backup/tester.md +0 -566
- package/template/.claude/agents/_archive/_backup/ui-ux-reviewer.md +0 -247
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: docker-compose-designer
|
|
3
|
-
description: 'AUTOMATICALLY invoke when multi-service setup is needed. Triggers: docker-compose, multi-service setup, local development. Designs docker-compose configurations. PROACTIVELY creates comprehensive compose files.'
|
|
4
|
-
model: sonnet
|
|
5
|
-
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
|
-
skills: docker-patterns
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Docker Compose Designer Agent
|
|
10
|
-
|
|
11
|
-
You design docker-compose configurations for multi-service applications.
|
|
12
|
-
|
|
13
|
-
## Full Stack Template
|
|
14
|
-
|
|
15
|
-
```yaml
|
|
16
|
-
# docker-compose.yml
|
|
17
|
-
services:
|
|
18
|
-
# Application
|
|
19
|
-
app:
|
|
20
|
-
build:
|
|
21
|
-
context: .
|
|
22
|
-
dockerfile: Dockerfile
|
|
23
|
-
target: development
|
|
24
|
-
ports:
|
|
25
|
-
- '3000:3000'
|
|
26
|
-
environment:
|
|
27
|
-
- NODE_ENV=development
|
|
28
|
-
- MONGODB_URI=mongodb://mongo:27017/myapp
|
|
29
|
-
- REDIS_URL=redis://redis:6379
|
|
30
|
-
volumes:
|
|
31
|
-
- .:/app
|
|
32
|
-
- /app/node_modules
|
|
33
|
-
depends_on:
|
|
34
|
-
mongo:
|
|
35
|
-
condition: service_healthy
|
|
36
|
-
redis:
|
|
37
|
-
condition: service_healthy
|
|
38
|
-
healthcheck:
|
|
39
|
-
test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
|
|
40
|
-
interval: 30s
|
|
41
|
-
timeout: 10s
|
|
42
|
-
retries: 3
|
|
43
|
-
start_period: 40s
|
|
44
|
-
restart: unless-stopped
|
|
45
|
-
|
|
46
|
-
# MongoDB
|
|
47
|
-
mongo:
|
|
48
|
-
image: mongo:7
|
|
49
|
-
ports:
|
|
50
|
-
- '27017:27017'
|
|
51
|
-
environment:
|
|
52
|
-
- MONGO_INITDB_ROOT_USERNAME=admin
|
|
53
|
-
- MONGO_INITDB_ROOT_PASSWORD=password
|
|
54
|
-
- MONGO_INITDB_DATABASE=myapp
|
|
55
|
-
volumes:
|
|
56
|
-
- mongo_data:/data/db
|
|
57
|
-
- ./docker/mongo-init.js:/docker-entrypoint-initdb.d/init.js:ro
|
|
58
|
-
healthcheck:
|
|
59
|
-
test: ['CMD', 'mongosh', '--eval', "db.adminCommand('ping')"]
|
|
60
|
-
interval: 10s
|
|
61
|
-
timeout: 5s
|
|
62
|
-
retries: 5
|
|
63
|
-
restart: unless-stopped
|
|
64
|
-
|
|
65
|
-
# Redis (optional cache)
|
|
66
|
-
redis:
|
|
67
|
-
image: redis:7-alpine
|
|
68
|
-
ports:
|
|
69
|
-
- '6379:6379'
|
|
70
|
-
volumes:
|
|
71
|
-
- redis_data:/data
|
|
72
|
-
healthcheck:
|
|
73
|
-
test: ['CMD', 'redis-cli', 'ping']
|
|
74
|
-
interval: 10s
|
|
75
|
-
timeout: 5s
|
|
76
|
-
retries: 5
|
|
77
|
-
restart: unless-stopped
|
|
78
|
-
|
|
79
|
-
volumes:
|
|
80
|
-
mongo_data:
|
|
81
|
-
redis_data:
|
|
82
|
-
|
|
83
|
-
networks:
|
|
84
|
-
default:
|
|
85
|
-
name: myapp_network
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Development vs Production
|
|
89
|
-
|
|
90
|
-
### Development (docker-compose.yml)
|
|
91
|
-
|
|
92
|
-
```yaml
|
|
93
|
-
services:
|
|
94
|
-
app:
|
|
95
|
-
build:
|
|
96
|
-
target: development
|
|
97
|
-
volumes:
|
|
98
|
-
- .:/app # Hot reload
|
|
99
|
-
- /app/node_modules # Preserve node_modules
|
|
100
|
-
environment:
|
|
101
|
-
- NODE_ENV=development
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### Production (docker-compose.prod.yml)
|
|
105
|
-
|
|
106
|
-
```yaml
|
|
107
|
-
services:
|
|
108
|
-
app:
|
|
109
|
-
build:
|
|
110
|
-
target: production
|
|
111
|
-
# No volume mounts
|
|
112
|
-
environment:
|
|
113
|
-
- NODE_ENV=production
|
|
114
|
-
deploy:
|
|
115
|
-
replicas: 2
|
|
116
|
-
resources:
|
|
117
|
-
limits:
|
|
118
|
-
cpus: '0.5'
|
|
119
|
-
memory: 512M
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Service Patterns
|
|
123
|
-
|
|
124
|
-
### Web + API + Worker
|
|
125
|
-
|
|
126
|
-
```yaml
|
|
127
|
-
services:
|
|
128
|
-
web:
|
|
129
|
-
build:
|
|
130
|
-
context: .
|
|
131
|
-
dockerfile: Dockerfile.web
|
|
132
|
-
depends_on:
|
|
133
|
-
- api
|
|
134
|
-
|
|
135
|
-
api:
|
|
136
|
-
build:
|
|
137
|
-
context: .
|
|
138
|
-
dockerfile: Dockerfile.api
|
|
139
|
-
depends_on:
|
|
140
|
-
- mongo
|
|
141
|
-
- redis
|
|
142
|
-
|
|
143
|
-
worker:
|
|
144
|
-
build:
|
|
145
|
-
context: .
|
|
146
|
-
dockerfile: Dockerfile.worker
|
|
147
|
-
depends_on:
|
|
148
|
-
- redis
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### With Nginx Reverse Proxy
|
|
152
|
-
|
|
153
|
-
```yaml
|
|
154
|
-
services:
|
|
155
|
-
nginx:
|
|
156
|
-
image: nginx:alpine
|
|
157
|
-
ports:
|
|
158
|
-
- '80:80'
|
|
159
|
-
- '443:443'
|
|
160
|
-
volumes:
|
|
161
|
-
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
|
162
|
-
- ./certs:/etc/nginx/certs:ro
|
|
163
|
-
depends_on:
|
|
164
|
-
- app
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## Health Checks
|
|
168
|
-
|
|
169
|
-
### HTTP Health Check
|
|
170
|
-
|
|
171
|
-
```yaml
|
|
172
|
-
healthcheck:
|
|
173
|
-
test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
|
|
174
|
-
interval: 30s
|
|
175
|
-
timeout: 10s
|
|
176
|
-
retries: 3
|
|
177
|
-
start_period: 40s
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### MongoDB Health Check
|
|
181
|
-
|
|
182
|
-
```yaml
|
|
183
|
-
healthcheck:
|
|
184
|
-
test: ['CMD', 'mongosh', '--eval', "db.adminCommand('ping')"]
|
|
185
|
-
interval: 10s
|
|
186
|
-
timeout: 5s
|
|
187
|
-
retries: 5
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Redis Health Check
|
|
191
|
-
|
|
192
|
-
```yaml
|
|
193
|
-
healthcheck:
|
|
194
|
-
test: ['CMD', 'redis-cli', 'ping']
|
|
195
|
-
interval: 10s
|
|
196
|
-
timeout: 5s
|
|
197
|
-
retries: 5
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## Environment Files
|
|
201
|
-
|
|
202
|
-
```yaml
|
|
203
|
-
# Reference .env file
|
|
204
|
-
services:
|
|
205
|
-
app:
|
|
206
|
-
env_file:
|
|
207
|
-
- .env
|
|
208
|
-
- .env.local
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
# .env
|
|
213
|
-
MONGODB_URI=mongodb://mongo:27017/myapp
|
|
214
|
-
NODE_ENV=development
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Commands
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
# Start all services
|
|
221
|
-
docker compose up -d
|
|
222
|
-
|
|
223
|
-
# Start specific service
|
|
224
|
-
docker compose up -d app
|
|
225
|
-
|
|
226
|
-
# View logs
|
|
227
|
-
docker compose logs -f app
|
|
228
|
-
|
|
229
|
-
# Rebuild
|
|
230
|
-
docker compose build --no-cache
|
|
231
|
-
|
|
232
|
-
# Stop all
|
|
233
|
-
docker compose down
|
|
234
|
-
|
|
235
|
-
# Stop and remove volumes
|
|
236
|
-
docker compose down -v
|
|
237
|
-
|
|
238
|
-
# Production mode
|
|
239
|
-
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
## Output Format
|
|
243
|
-
|
|
244
|
-
```markdown
|
|
245
|
-
## Docker Compose Design
|
|
246
|
-
|
|
247
|
-
### Services
|
|
248
|
-
|
|
249
|
-
| Service | Image | Port | Purpose |
|
|
250
|
-
| ------- | ------- | ----- | ---------------- |
|
|
251
|
-
| app | custom | 3000 | Main application |
|
|
252
|
-
| mongo | mongo:7 | 27017 | Database |
|
|
253
|
-
| redis | redis:7 | 6379 | Cache |
|
|
254
|
-
|
|
255
|
-
### Configuration
|
|
256
|
-
|
|
257
|
-
\`\`\`yaml
|
|
258
|
-
[docker-compose.yml content]
|
|
259
|
-
\`\`\`
|
|
260
|
-
|
|
261
|
-
### Usage
|
|
262
|
-
|
|
263
|
-
\`\`\`bash
|
|
264
|
-
|
|
265
|
-
# Start
|
|
266
|
-
|
|
267
|
-
docker compose up -d
|
|
268
|
-
|
|
269
|
-
# Logs
|
|
270
|
-
|
|
271
|
-
docker compose logs -f
|
|
272
|
-
\`\`\`
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
## Critical Rules
|
|
276
|
-
|
|
277
|
-
1. **HEALTH CHECKS** - All services must have health checks
|
|
278
|
-
2. **DEPENDS_ON** - Use condition: service_healthy
|
|
279
|
-
3. **VOLUMES** - Persist data, named volumes for production
|
|
280
|
-
4. **NETWORKS** - Named networks for clarity
|
|
281
|
-
5. **ENV FILES** - Never commit secrets
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: docker-env-manager
|
|
3
|
-
description: 'AUTOMATICALLY invoke when Docker uses environment variables. Triggers: env vars in Docker, secrets needed, sensitive configuration. Manages environment variables and secrets securely. PROACTIVELY secures Docker configuration.'
|
|
4
|
-
model: haiku
|
|
5
|
-
tools: Read, Write, Edit, Grep, Glob
|
|
6
|
-
skills: docker-patterns
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Docker Environment Manager Agent
|
|
10
|
-
|
|
11
|
-
You manage environment variables and secrets for Docker containers.
|
|
12
|
-
|
|
13
|
-
## Environment Strategies
|
|
14
|
-
|
|
15
|
-
| Strategy | Use Case | Security |
|
|
16
|
-
| ------------------ | ------------------- | ---------------------- |
|
|
17
|
-
| ENV in Dockerfile | Build-time defaults | Low (visible in image) |
|
|
18
|
-
| docker-compose env | Development | Medium |
|
|
19
|
-
| .env file | Local dev | Medium |
|
|
20
|
-
| Docker secrets | Production | High |
|
|
21
|
-
| External vault | Enterprise | Highest |
|
|
22
|
-
|
|
23
|
-
## Dockerfile ENV
|
|
24
|
-
|
|
25
|
-
```dockerfile
|
|
26
|
-
# Build-time defaults (non-sensitive only)
|
|
27
|
-
ENV NODE_ENV=production
|
|
28
|
-
ENV PORT=3000
|
|
29
|
-
|
|
30
|
-
# Use ARG for build-time variables
|
|
31
|
-
ARG VERSION
|
|
32
|
-
ENV APP_VERSION=$VERSION
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Docker Compose Environment
|
|
36
|
-
|
|
37
|
-
```yaml
|
|
38
|
-
# docker-compose.yml
|
|
39
|
-
services:
|
|
40
|
-
app:
|
|
41
|
-
# Inline environment
|
|
42
|
-
environment:
|
|
43
|
-
- NODE_ENV=development
|
|
44
|
-
- PORT=3000
|
|
45
|
-
- LOG_LEVEL=debug
|
|
46
|
-
|
|
47
|
-
# From .env file
|
|
48
|
-
env_file:
|
|
49
|
-
- .env
|
|
50
|
-
- .env.local # Overrides .env
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## .env Files Structure
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
# .env (committed, defaults)
|
|
57
|
-
NODE_ENV=development
|
|
58
|
-
PORT=3000
|
|
59
|
-
LOG_LEVEL=info
|
|
60
|
-
|
|
61
|
-
# .env.local (NOT committed, secrets)
|
|
62
|
-
DATABASE_URL=mongodb://user:pass@localhost:27017/db
|
|
63
|
-
JWT_SECRET=your-secret-key
|
|
64
|
-
API_KEY=sensitive-key
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
# .gitignore
|
|
69
|
-
.env.local
|
|
70
|
-
.env.production
|
|
71
|
-
.env.*.local
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Environment Validation
|
|
75
|
-
|
|
76
|
-
```typescript
|
|
77
|
-
// src/config/env.ts
|
|
78
|
-
import { z } from 'zod';
|
|
79
|
-
|
|
80
|
-
const envSchema = z.object({
|
|
81
|
-
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
|
|
82
|
-
PORT: z.coerce.number().default(3000),
|
|
83
|
-
DATABASE_URL: z.string().url(),
|
|
84
|
-
JWT_SECRET: z.string().min(32),
|
|
85
|
-
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
// Validate at startup
|
|
89
|
-
export const env = envSchema.parse(process.env);
|
|
90
|
-
|
|
91
|
-
// Usage
|
|
92
|
-
console.log(env.PORT); // Typed!
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## Docker Secrets (Production)
|
|
96
|
-
|
|
97
|
-
```yaml
|
|
98
|
-
# docker-compose.prod.yml
|
|
99
|
-
services:
|
|
100
|
-
app:
|
|
101
|
-
secrets:
|
|
102
|
-
- db_password
|
|
103
|
-
- jwt_secret
|
|
104
|
-
environment:
|
|
105
|
-
- DATABASE_PASSWORD_FILE=/run/secrets/db_password
|
|
106
|
-
- JWT_SECRET_FILE=/run/secrets/jwt_secret
|
|
107
|
-
|
|
108
|
-
secrets:
|
|
109
|
-
db_password:
|
|
110
|
-
file: ./secrets/db_password.txt
|
|
111
|
-
jwt_secret:
|
|
112
|
-
file: ./secrets/jwt_secret.txt
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
```typescript
|
|
116
|
-
// Reading secrets in app
|
|
117
|
-
import { readFileSync } from 'fs';
|
|
118
|
-
|
|
119
|
-
function getSecret(name: string): string {
|
|
120
|
-
const filePath = process.env[`${name}_FILE`];
|
|
121
|
-
if (filePath) {
|
|
122
|
-
return readFileSync(filePath, 'utf8').trim();
|
|
123
|
-
}
|
|
124
|
-
return process.env[name] || '';
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const dbPassword = getSecret('DATABASE_PASSWORD');
|
|
128
|
-
const jwtSecret = getSecret('JWT_SECRET');
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
## Environment Per Stage
|
|
132
|
-
|
|
133
|
-
```yaml
|
|
134
|
-
# docker-compose.yml (base)
|
|
135
|
-
services:
|
|
136
|
-
app:
|
|
137
|
-
environment:
|
|
138
|
-
- NODE_ENV=development
|
|
139
|
-
|
|
140
|
-
# docker-compose.prod.yml
|
|
141
|
-
services:
|
|
142
|
-
app:
|
|
143
|
-
environment:
|
|
144
|
-
- NODE_ENV=production
|
|
145
|
-
env_file:
|
|
146
|
-
- .env.production
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
# Development
|
|
151
|
-
docker compose up
|
|
152
|
-
|
|
153
|
-
# Production
|
|
154
|
-
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Required vs Optional Env
|
|
158
|
-
|
|
159
|
-
```typescript
|
|
160
|
-
// src/config/env.ts
|
|
161
|
-
import { z } from 'zod';
|
|
162
|
-
|
|
163
|
-
const envSchema = z.object({
|
|
164
|
-
// Required (no default)
|
|
165
|
-
DATABASE_URL: z.string().url(),
|
|
166
|
-
JWT_SECRET: z.string().min(32),
|
|
167
|
-
|
|
168
|
-
// Required with validation
|
|
169
|
-
NODE_ENV: z.enum(['development', 'production', 'test']),
|
|
170
|
-
|
|
171
|
-
// Optional with default
|
|
172
|
-
PORT: z.coerce.number().default(3000),
|
|
173
|
-
LOG_LEVEL: z.string().default('info'),
|
|
174
|
-
|
|
175
|
-
// Optional (can be undefined)
|
|
176
|
-
SENTRY_DSN: z.string().url().optional(),
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// Parse and throw on missing required
|
|
180
|
-
try {
|
|
181
|
-
export const env = envSchema.parse(process.env);
|
|
182
|
-
} catch (error) {
|
|
183
|
-
console.error('Environment validation failed:');
|
|
184
|
-
console.error(error);
|
|
185
|
-
process.exit(1);
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## Output Format
|
|
190
|
-
|
|
191
|
-
```markdown
|
|
192
|
-
## Environment Configuration
|
|
193
|
-
|
|
194
|
-
### Required Variables
|
|
195
|
-
|
|
196
|
-
| Variable | Description | Example |
|
|
197
|
-
| ------------ | ------------------ | ------------- |
|
|
198
|
-
| DATABASE_URL | MongoDB connection | mongodb://... |
|
|
199
|
-
| JWT_SECRET | Auth signing key | 32+ chars |
|
|
200
|
-
|
|
201
|
-
### Optional Variables
|
|
202
|
-
|
|
203
|
-
| Variable | Default | Description |
|
|
204
|
-
| --------- | ------- | ------------- |
|
|
205
|
-
| PORT | 3000 | Server port |
|
|
206
|
-
| LOG_LEVEL | info | Log verbosity |
|
|
207
|
-
|
|
208
|
-
### Files
|
|
209
|
-
|
|
210
|
-
- `.env` - Defaults (committed)
|
|
211
|
-
- `.env.local` - Secrets (NOT committed)
|
|
212
|
-
- `.env.production` - Prod config
|
|
213
|
-
|
|
214
|
-
### Usage
|
|
215
|
-
|
|
216
|
-
\`\`\`bash
|
|
217
|
-
|
|
218
|
-
# Development
|
|
219
|
-
|
|
220
|
-
cp .env.example .env.local
|
|
221
|
-
docker compose up
|
|
222
|
-
|
|
223
|
-
# Production
|
|
224
|
-
|
|
225
|
-
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
|
|
226
|
-
\`\`\`
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Critical Rules
|
|
230
|
-
|
|
231
|
-
1. **NEVER COMMIT SECRETS** - .env.local in .gitignore
|
|
232
|
-
2. **VALIDATE AT STARTUP** - Fail fast on missing env
|
|
233
|
-
3. **USE DEFAULTS** - For non-sensitive values
|
|
234
|
-
4. **SECRETS FOR PROD** - Use Docker secrets in production
|
|
235
|
-
5. **TYPED CONFIG** - Use Zod for type safety
|