@deftai/directive-content 0.55.0

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 (250) hide show
  1. package/.agents/skills/deft/SKILL.md +6 -0
  2. package/.agents/skills/deft-directive-article-review/SKILL.md +11 -0
  3. package/.agents/skills/deft-directive-build/SKILL.md +10 -0
  4. package/.agents/skills/deft-directive-cost/SKILL.md +12 -0
  5. package/.agents/skills/deft-directive-debug/SKILL.md +13 -0
  6. package/.agents/skills/deft-directive-gh-arch/SKILL.md +11 -0
  7. package/.agents/skills/deft-directive-gh-slice/SKILL.md +10 -0
  8. package/.agents/skills/deft-directive-glossary/SKILL.md +10 -0
  9. package/.agents/skills/deft-directive-interview/SKILL.md +9 -0
  10. package/.agents/skills/deft-directive-pre-pr/SKILL.md +9 -0
  11. package/.agents/skills/deft-directive-refinement/SKILL.md +10 -0
  12. package/.agents/skills/deft-directive-release/SKILL.md +12 -0
  13. package/.agents/skills/deft-directive-review-cycle/SKILL.md +10 -0
  14. package/.agents/skills/deft-directive-setup/SKILL.md +10 -0
  15. package/.agents/skills/deft-directive-swarm/SKILL.md +10 -0
  16. package/.agents/skills/deft-directive-sync/SKILL.md +9 -0
  17. package/.agents/skills/deft-directive-triage/SKILL.md +9 -0
  18. package/.agents/skills/deft-directive-write-skill/SKILL.md +9 -0
  19. package/LICENSE.md +22 -0
  20. package/QUICK-START.md +167 -0
  21. package/UPGRADING.md +517 -0
  22. package/coding/build-output.md +28 -0
  23. package/coding/coding.md +235 -0
  24. package/coding/debugging.md +110 -0
  25. package/coding/holzmann.md +96 -0
  26. package/coding/hygiene.md +127 -0
  27. package/coding/security.md +158 -0
  28. package/coding/testing.md +162 -0
  29. package/coding/toolchain.md +44 -0
  30. package/commands.md +300 -0
  31. package/context/context.md +57 -0
  32. package/context/deterministic-split.md +67 -0
  33. package/context/examples.md +26 -0
  34. package/context/fractal-summaries.md +69 -0
  35. package/context/long-horizon.md +46 -0
  36. package/context/spec-deltas.md +177 -0
  37. package/context/tool-design.md +34 -0
  38. package/context/working-memory.md +62 -0
  39. package/contracts/boundary-maps.md +65 -0
  40. package/contracts/deterministic-questions.md +59 -0
  41. package/contracts/hierarchy.md +77 -0
  42. package/conventions/content-manifest.json +399 -0
  43. package/conventions/machine-generated-banner.md +130 -0
  44. package/conventions/references.md +120 -0
  45. package/conventions/rule-ownership.json +382 -0
  46. package/conventions/task-caching.md +43 -0
  47. package/conventions/vbrief-filenames.md +70 -0
  48. package/deployments/README.md +37 -0
  49. package/deployments/agentuity/README.md +138 -0
  50. package/deployments/agentuity/via-cli.md +380 -0
  51. package/deployments/agentuity/via-cloud.md +425 -0
  52. package/deployments/agentuity/via-github-actions.md +664 -0
  53. package/deployments/agentuity/via-gravity-network.md +606 -0
  54. package/deployments/agentuity/via-vpc.md +607 -0
  55. package/deployments/aws/README.md +38 -0
  56. package/deployments/aws/via-app-runner.md +612 -0
  57. package/deployments/aws/via-ecs-fargate.md +561 -0
  58. package/deployments/aws/via-elastic-beanstalk.md +628 -0
  59. package/deployments/aws/via-lambda.md +649 -0
  60. package/deployments/azure/README.md +37 -0
  61. package/deployments/azure/via-aks.md +390 -0
  62. package/deployments/azure/via-app-service.md +564 -0
  63. package/deployments/azure/via-container-apps.md +599 -0
  64. package/deployments/azure/via-functions.md +552 -0
  65. package/deployments/cloud-gov/README.md +63 -0
  66. package/deployments/cloud-gov/agents/compliance-docs.md +154 -0
  67. package/deployments/cloud-gov/agents.md +39 -0
  68. package/deployments/cloud-gov/cicd.md +64 -0
  69. package/deployments/cloud-gov/deployment.md +150 -0
  70. package/deployments/cloud-gov/logging.md +43 -0
  71. package/deployments/cloud-gov/manifest.md +121 -0
  72. package/deployments/cloud-gov/overview.md +58 -0
  73. package/deployments/cloud-gov/security.md +46 -0
  74. package/deployments/cloud-gov/services.md +72 -0
  75. package/deployments/cloud-gov/upstream/README.md +18 -0
  76. package/deployments/cloudflare/README.md +33 -0
  77. package/deployments/cloudflare/via-dashboard.md +83 -0
  78. package/deployments/cloudflare/via-git.md +90 -0
  79. package/deployments/cloudflare/via-github-actions.md +185 -0
  80. package/deployments/cloudflare/via-terraform.md +157 -0
  81. package/deployments/cloudflare/via-wrangler.md +165 -0
  82. package/deployments/fly-io/README.md +37 -0
  83. package/deployments/fly-io/via-dockerfile.md +648 -0
  84. package/deployments/fly-io/via-flyctl.md +653 -0
  85. package/deployments/fly-io/via-github-actions.md +695 -0
  86. package/deployments/fly-io/via-multi-region.md +598 -0
  87. package/deployments/google/README.md +34 -0
  88. package/deployments/google/via-app-engine.md +42 -0
  89. package/deployments/google/via-cloud-functions.md +23 -0
  90. package/deployments/google/via-cloud-run.md +330 -0
  91. package/deployments/google/via-gke.md +23 -0
  92. package/deployments/netlify/README.md +99 -0
  93. package/deployments/netlify/via-cli.md +17 -0
  94. package/deployments/netlify/via-functions.md +19 -0
  95. package/deployments/netlify/via-git.md +25 -0
  96. package/deployments/vercel/README.md +90 -0
  97. package/deployments/vercel/via-api.md +16 -0
  98. package/deployments/vercel/via-cli.md +17 -0
  99. package/deployments/vercel/via-git.md +24 -0
  100. package/docs/BROWNFIELD.md +179 -0
  101. package/docs/getting-started.md +137 -0
  102. package/docs/good-agents-md.md +137 -0
  103. package/events/README.md +89 -0
  104. package/events/event-record.schema.json +26 -0
  105. package/events/registry.json +166 -0
  106. package/events/registry.schema.json +71 -0
  107. package/glossary.md +145 -0
  108. package/incidents/README.md +81 -0
  109. package/incidents/_template.md +38 -0
  110. package/interfaces/cli.md +104 -0
  111. package/interfaces/rest.md +212 -0
  112. package/interfaces/tui.md +242 -0
  113. package/interfaces/web.md +123 -0
  114. package/languages/6502-DASM.md +132 -0
  115. package/languages/c.md +235 -0
  116. package/languages/commands.md +23 -0
  117. package/languages/cpp.md +132 -0
  118. package/languages/csharp.md +259 -0
  119. package/languages/dart.md +183 -0
  120. package/languages/delphi.md +218 -0
  121. package/languages/elixir.md +208 -0
  122. package/languages/go.md +78 -0
  123. package/languages/java.md +278 -0
  124. package/languages/javascript.md +163 -0
  125. package/languages/julia.md +175 -0
  126. package/languages/kotlin.md +193 -0
  127. package/languages/markdown.md +168 -0
  128. package/languages/mermaid.md +146 -0
  129. package/languages/officejs.md +392 -0
  130. package/languages/python.md +209 -0
  131. package/languages/r.md +163 -0
  132. package/languages/rust.md +216 -0
  133. package/languages/sql.md +216 -0
  134. package/languages/swift.md +153 -0
  135. package/languages/typescript.md +132 -0
  136. package/languages/vba.md +279 -0
  137. package/languages/vhdl.md +180 -0
  138. package/languages/visual-basic.md +151 -0
  139. package/languages/zig.md +196 -0
  140. package/meta/SOUL.md +27 -0
  141. package/meta/code-field.md +44 -0
  142. package/meta/morals.md +40 -0
  143. package/meta/philosophy.md +39 -0
  144. package/meta/project.md +49 -0
  145. package/meta/ralph.md +223 -0
  146. package/meta/security.md +80 -0
  147. package/meta/versioning.md +326 -0
  148. package/package.json +22 -0
  149. package/packs/lessons/lessons-pack-0.1.json +553 -0
  150. package/packs/patterns/patterns-pack-0.1.json +57 -0
  151. package/packs/rules/rules-pack-0.1.json +4767 -0
  152. package/packs/skills/skills-pack-0.1.json +262 -0
  153. package/packs/strategies/strategies-pack-0.1.json +167 -0
  154. package/packs/swarm-spec/swarm-spec-pack-0.1.json +17 -0
  155. package/patterns/executor-layer-credentials.md +227 -0
  156. package/patterns/llm-app.md +156 -0
  157. package/patterns/multi-agent.md +278 -0
  158. package/patterns/prompt-assembly-layer-ordering.md +154 -0
  159. package/patterns/role-as-overlay.md +179 -0
  160. package/platforms/2600.md +137 -0
  161. package/platforms/unity.md +329 -0
  162. package/references/composer-skill-porting.md +152 -0
  163. package/references/cost-models.md +163 -0
  164. package/references/ip-risk.md +246 -0
  165. package/references/plain-english-ux.md +275 -0
  166. package/resilience/context-pruning.md +67 -0
  167. package/resilience/continue-here.md +62 -0
  168. package/scm/changelog.md +276 -0
  169. package/scm/git.md +139 -0
  170. package/scm/github.md +265 -0
  171. package/secrets/.gitkeep +0 -0
  172. package/skills/deft-build/SKILL.md +20 -0
  173. package/skills/deft-directive-article-review/SKILL.md +156 -0
  174. package/skills/deft-directive-build/SKILL.md +302 -0
  175. package/skills/deft-directive-cost/SKILL.md +201 -0
  176. package/skills/deft-directive-debug/SKILL.md +140 -0
  177. package/skills/deft-directive-decompose/SKILL.md +96 -0
  178. package/skills/deft-directive-gh-arch/SKILL.md +160 -0
  179. package/skills/deft-directive-gh-slice/SKILL.md +199 -0
  180. package/skills/deft-directive-glossary/SKILL.md +118 -0
  181. package/skills/deft-directive-interview/SKILL.md +528 -0
  182. package/skills/deft-directive-pre-pr/SKILL.md +131 -0
  183. package/skills/deft-directive-probe/SKILL.md +127 -0
  184. package/skills/deft-directive-refinement/SKILL.md +403 -0
  185. package/skills/deft-directive-release/SKILL.md +266 -0
  186. package/skills/deft-directive-review-cycle/SKILL.md +401 -0
  187. package/skills/deft-directive-setup/SKILL.md +717 -0
  188. package/skills/deft-directive-swarm/SKILL.md +989 -0
  189. package/skills/deft-directive-sync/SKILL.md +288 -0
  190. package/skills/deft-directive-triage/SKILL.md +137 -0
  191. package/skills/deft-directive-write-skill/SKILL.md +169 -0
  192. package/skills/deft-interview/SKILL.md +16 -0
  193. package/skills/deft-pre-pr/SKILL.md +16 -0
  194. package/skills/deft-review-cycle/SKILL.md +16 -0
  195. package/skills/deft-roadmap-refresh/SKILL.md +16 -0
  196. package/skills/deft-setup/SKILL.md +20 -0
  197. package/skills/deft-swarm/SKILL.md +16 -0
  198. package/skills/deft-sync/SKILL.md +16 -0
  199. package/strategies/README.md +83 -0
  200. package/strategies/artifact-guards.md +85 -0
  201. package/strategies/bdd.md +115 -0
  202. package/strategies/brownfield.md +7 -0
  203. package/strategies/discuss.md +129 -0
  204. package/strategies/emit-hints.md +69 -0
  205. package/strategies/enterprise.md +193 -0
  206. package/strategies/interview.md +551 -0
  207. package/strategies/map.md +179 -0
  208. package/strategies/probe.md +151 -0
  209. package/strategies/rapid.md +155 -0
  210. package/strategies/research.md +155 -0
  211. package/strategies/roadmap.md +9 -0
  212. package/strategies/speckit.md +437 -0
  213. package/strategies/v0-20-contract.md +134 -0
  214. package/strategies/yolo.md +169 -0
  215. package/swarm/swarm.md +300 -0
  216. package/templates/COST-ESTIMATE.md +114 -0
  217. package/templates/PULL_REQUEST_TEMPLATE.md +35 -0
  218. package/templates/agent-prompt-preamble.md +409 -0
  219. package/templates/agents-entry.md +211 -0
  220. package/templates/agents-entry.placeholders.md +75 -0
  221. package/templates/embed.go +20 -0
  222. package/templates/embed_test.go +36 -0
  223. package/templates/make-spec-example.md +9 -0
  224. package/templates/make-spec.md +246 -0
  225. package/templates/project.md.template +52 -0
  226. package/templates/specification.md +1 -0
  227. package/templates/swarm-greptile-poller-prompt.md +556 -0
  228. package/templates/user.md.template +31 -0
  229. package/tools/RWLDL.md +80 -0
  230. package/tools/greptile.md +141 -0
  231. package/tools/installer.md +23 -0
  232. package/tools/taskfile-migration.md +32 -0
  233. package/tools/taskfile.md +185 -0
  234. package/tools/telemetry.md +285 -0
  235. package/vbrief/schemas/cache-meta.schema.json +137 -0
  236. package/vbrief/schemas/candidates.schema.json +130 -0
  237. package/vbrief/schemas/codebase-map.schema.json +213 -0
  238. package/vbrief/schemas/lessons-pack.schema.json +134 -0
  239. package/vbrief/schemas/patterns-pack.schema.json +84 -0
  240. package/vbrief/schemas/rules-pack.schema.json +105 -0
  241. package/vbrief/schemas/skills-pack.schema.json +94 -0
  242. package/vbrief/schemas/slices.schema.json +87 -0
  243. package/vbrief/schemas/strategies-pack.schema.json +89 -0
  244. package/vbrief/schemas/swarm-spec-pack.schema.json +84 -0
  245. package/vbrief/schemas/vbrief-core.schema.json +1022 -0
  246. package/vbrief/vbrief.md +684 -0
  247. package/verification/integration.md +76 -0
  248. package/verification/plan-checking.md +85 -0
  249. package/verification/uat.md +60 -0
  250. package/verification/verification.md +117 -0
@@ -0,0 +1,648 @@
1
+ # Deploy via Dockerfile
2
+
3
+ Deploy any containerized application to Fly.io using custom Dockerfiles. Full control over build process, dependencies, and runtime environment.
4
+
5
+ ## Overview
6
+
7
+ Fly.io runs Docker containers, giving you complete flexibility:
8
+ - **Custom Images**: Use any base image
9
+ - **Multi-Stage Builds**: Optimize image size
10
+ - **Build Arguments**: Dynamic build configuration
11
+ - **Layer Caching**: Fast rebuilds
12
+ - **Private Registries**: Pull from your own registry
13
+
14
+ ## Prerequisites
15
+
16
+ - Application with a Dockerfile
17
+ - flyctl CLI installed
18
+ - Docker knowledge (optional for remote builds)
19
+
20
+ ## Quick Start
21
+
22
+ ### 1. Create a Dockerfile
23
+
24
+ ```dockerfile
25
+ # Basic Node.js example
26
+ FROM node:18-alpine
27
+
28
+ WORKDIR /app
29
+
30
+ # Copy package files
31
+ COPY package*.json ./
32
+
33
+ # Install dependencies
34
+ RUN npm ci --production
35
+
36
+ # Copy application code
37
+ COPY . .
38
+
39
+ # Expose port
40
+ EXPOSE 8080
41
+
42
+ # Start application
43
+ CMD ["node", "server.js"]
44
+ ```
45
+
46
+ ### 2. Deploy
47
+
48
+ ```bash
49
+ # Deploy using Dockerfile
50
+ fly deploy
51
+
52
+ # Or specify Dockerfile explicitly
53
+ fly deploy --dockerfile Dockerfile
54
+ ```
55
+
56
+ ## Dockerfile Best Practices
57
+
58
+ ### Multi-Stage Build
59
+
60
+ ```dockerfile
61
+ # Build stage
62
+ FROM node:18-alpine AS builder
63
+
64
+ WORKDIR /app
65
+ COPY package*.json ./
66
+ RUN npm ci
67
+
68
+ COPY . .
69
+ RUN npm run build
70
+
71
+ # Production stage
72
+ FROM node:18-alpine
73
+
74
+ WORKDIR /app
75
+
76
+ # Copy only necessary files from builder
77
+ COPY --from=builder /app/dist ./dist
78
+ COPY --from=builder /app/node_modules ./node_modules
79
+ COPY package.json ./
80
+
81
+ EXPOSE 8080
82
+
83
+ # Run as non-root user
84
+ USER node
85
+
86
+ CMD ["node", "dist/server.js"]
87
+ ```
88
+
89
+ ### Layer Caching Optimization
90
+
91
+ ```dockerfile
92
+ FROM python:3.11-slim
93
+
94
+ WORKDIR /app
95
+
96
+ # Install dependencies first (cached layer)
97
+ COPY requirements.txt .
98
+ RUN pip install --no-cache-dir -r requirements.txt
99
+
100
+ # Copy application code last (changes frequently)
101
+ COPY . .
102
+
103
+ CMD ["python", "app.py"]
104
+ ```
105
+
106
+ ### Minimal Base Images
107
+
108
+ ```dockerfile
109
+ # Use distroless for security
110
+ FROM gcr.io/distroless/nodejs18-debian11
111
+
112
+ WORKDIR /app
113
+
114
+ COPY --chown=nonroot:nonroot package*.json ./
115
+ COPY --chown=nonroot:nonroot dist ./dist
116
+ COPY --chown=nonroot:nonroot node_modules ./node_modules
117
+
118
+ EXPOSE 8080
119
+
120
+ USER nonroot
121
+
122
+ CMD ["dist/server.js"]
123
+ ```
124
+
125
+ ## Language-Specific Examples
126
+
127
+ ### Node.js / TypeScript
128
+
129
+ ```dockerfile
130
+ FROM node:18-alpine AS builder
131
+
132
+ WORKDIR /app
133
+
134
+ # Install dependencies
135
+ COPY package*.json ./
136
+ RUN npm ci
137
+
138
+ # Build TypeScript
139
+ COPY tsconfig.json ./
140
+ COPY src ./src
141
+ RUN npm run build
142
+
143
+ # Production image
144
+ FROM node:18-alpine
145
+
146
+ WORKDIR /app
147
+
148
+ ENV NODE_ENV=production
149
+
150
+ COPY package*.json ./
151
+ RUN npm ci --production
152
+
153
+ COPY --from=builder /app/dist ./dist
154
+
155
+ EXPOSE 8080
156
+
157
+ USER node
158
+
159
+ CMD ["node", "dist/index.js"]
160
+ ```
161
+
162
+ ### Python / Django
163
+
164
+ ```dockerfile
165
+ FROM python:3.11-slim
166
+
167
+ WORKDIR /app
168
+
169
+ # Install system dependencies
170
+ RUN apt-get update && apt-get install -y \
171
+ postgresql-client \
172
+ && rm -rf /var/lib/apt/lists/*
173
+
174
+ # Install Python dependencies
175
+ COPY requirements.txt .
176
+ RUN pip install --no-cache-dir -r requirements.txt
177
+
178
+ # Copy application
179
+ COPY . .
180
+
181
+ # Collect static files
182
+ RUN python manage.py collectstatic --noinput
183
+
184
+ EXPOSE 8000
185
+
186
+ CMD ["gunicorn", "--bind", ":8000", "--workers", "2", "myproject.wsgi:application"]
187
+ ```
188
+
189
+ ### Go
190
+
191
+ ```dockerfile
192
+ # Build stage
193
+ FROM golang:1.21-alpine AS builder
194
+
195
+ WORKDIR /app
196
+
197
+ # Copy go mod files
198
+ COPY go.mod go.sum ./
199
+ RUN go mod download
200
+
201
+ # Copy source
202
+ COPY . .
203
+
204
+ # Build binary
205
+ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
206
+
207
+ # Production stage
208
+ FROM alpine:latest
209
+
210
+ RUN apk --no-cache add ca-certificates
211
+
212
+ WORKDIR /root/
213
+
214
+ COPY --from=builder /app/main .
215
+
216
+ EXPOSE 8080
217
+
218
+ CMD ["./main"]
219
+ ```
220
+
221
+ ### Ruby / Rails
222
+
223
+ ```dockerfile
224
+ FROM ruby:3.2-slim
225
+
226
+ WORKDIR /app
227
+
228
+ # Install dependencies
229
+ RUN apt-get update && apt-get install -y \
230
+ build-essential \
231
+ libpq-dev \
232
+ nodejs \
233
+ && rm -rf /var/lib/apt/lists/*
234
+
235
+ # Install gems
236
+ COPY Gemfile Gemfile.lock ./
237
+ RUN bundle install --without development test
238
+
239
+ # Copy application
240
+ COPY . .
241
+
242
+ # Precompile assets
243
+ RUN RAILS_ENV=production bundle exec rails assets:precompile
244
+
245
+ EXPOSE 3000
246
+
247
+ CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
248
+ ```
249
+
250
+ ### PHP / Laravel
251
+
252
+ ```dockerfile
253
+ FROM php:8.2-fpm-alpine
254
+
255
+ WORKDIR /var/www/html
256
+
257
+ # Install dependencies
258
+ RUN apk add --no-cache \
259
+ nginx \
260
+ postgresql-dev \
261
+ && docker-php-ext-install pdo pdo_pgsql
262
+
263
+ # Install Composer
264
+ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
265
+
266
+ # Install PHP dependencies
267
+ COPY composer.json composer.lock ./
268
+ RUN composer install --no-dev --optimize-autoloader
269
+
270
+ # Copy application
271
+ COPY . .
272
+
273
+ # Set permissions
274
+ RUN chown -R www-data:www-data /var/www/html
275
+
276
+ EXPOSE 8080
277
+
278
+ CMD ["php-fpm"]
279
+ ```
280
+
281
+ ## Advanced Dockerfile Techniques
282
+
283
+ ### Build Arguments
284
+
285
+ ```dockerfile
286
+ ARG NODE_VERSION=18
287
+ FROM node:${NODE_VERSION}-alpine
288
+
289
+ ARG BUILD_ENV=production
290
+ ARG API_URL
291
+
292
+ WORKDIR /app
293
+
294
+ COPY package*.json ./
295
+ RUN npm ci --production=${BUILD_ENV}
296
+
297
+ COPY . .
298
+
299
+ # Use build arg in build
300
+ RUN echo "API_URL=${API_URL}" > .env
301
+
302
+ EXPOSE 8080
303
+
304
+ CMD ["node", "server.js"]
305
+ ```
306
+
307
+ Deploy with build args:
308
+ ```bash
309
+ fly deploy --build-arg NODE_VERSION=20 --build-arg API_URL=https://api.example.com
310
+ ```
311
+
312
+ ### Health Check
313
+
314
+ ```dockerfile
315
+ FROM node:18-alpine
316
+
317
+ WORKDIR /app
318
+
319
+ COPY . .
320
+
321
+ RUN npm ci --production
322
+
323
+ EXPOSE 8080
324
+
325
+ # Add healthcheck
326
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
327
+ CMD node healthcheck.js
328
+
329
+ CMD ["node", "server.js"]
330
+ ```
331
+
332
+ ### Multi-Platform Builds
333
+
334
+ ```dockerfile
335
+ # Supports both amd64 and arm64
336
+ FROM --platform=$BUILDPLATFORM node:18-alpine AS builder
337
+
338
+ ARG TARGETPLATFORM
339
+ ARG BUILDPLATFORM
340
+
341
+ WORKDIR /app
342
+
343
+ COPY package*.json ./
344
+ RUN npm ci
345
+
346
+ COPY . .
347
+ RUN npm run build
348
+
349
+ FROM node:18-alpine
350
+
351
+ WORKDIR /app
352
+
353
+ COPY --from=builder /app/dist ./dist
354
+ COPY --from=builder /app/node_modules ./node_modules
355
+
356
+ EXPOSE 8080
357
+
358
+ CMD ["node", "dist/server.js"]
359
+ ```
360
+
361
+ ### Caching Node Modules
362
+
363
+ ```dockerfile
364
+ FROM node:18-alpine
365
+
366
+ WORKDIR /app
367
+
368
+ # Copy package files first
369
+ COPY package*.json ./
370
+
371
+ # This layer will be cached unless package.json changes
372
+ RUN npm ci --production
373
+
374
+ # Copy rest of application
375
+ COPY . .
376
+
377
+ EXPOSE 8080
378
+
379
+ CMD ["node", "server.js"]
380
+ ```
381
+
382
+ ## fly.toml Configuration
383
+
384
+ ### Specify Dockerfile
385
+
386
+ ```toml
387
+ app = "my-app"
388
+ primary_region = "iad"
389
+
390
+ [build]
391
+ dockerfile = "Dockerfile"
392
+ ignorefile = ".dockerignore"
393
+
394
+ # Build arguments
395
+ [build.args]
396
+ NODE_ENV = "production"
397
+ API_VERSION = "v2"
398
+
399
+ [[services]]
400
+ internal_port = 8080
401
+ protocol = "tcp"
402
+
403
+ [[services.ports]]
404
+ handlers = ["http"]
405
+ port = 80
406
+
407
+ [[services.ports]]
408
+ handlers = ["tls", "http"]
409
+ port = 443
410
+ ```
411
+
412
+ ### Use Different Dockerfiles
413
+
414
+ ```toml
415
+ # fly.production.toml
416
+ [build]
417
+ dockerfile = "Dockerfile.production"
418
+
419
+ # fly.staging.toml
420
+ [build]
421
+ dockerfile = "Dockerfile.staging"
422
+ ```
423
+
424
+ Deploy:
425
+ ```bash
426
+ fly deploy --config fly.production.toml
427
+ fly deploy --config fly.staging.toml
428
+ ```
429
+
430
+ ## .dockerignore
431
+
432
+ Create `.dockerignore` to exclude unnecessary files:
433
+
434
+ ```dockerignore
435
+ # Version control
436
+ .git
437
+ .gitignore
438
+
439
+ # Dependencies
440
+ node_modules
441
+ vendor
442
+
443
+ # Build artifacts
444
+ dist
445
+ build
446
+ *.log
447
+
448
+ # Environment files
449
+ .env
450
+ .env.local
451
+ .env.*.local
452
+
453
+ # IDE
454
+ .vscode
455
+ .idea
456
+ *.swp
457
+
458
+ # OS
459
+ .DS_Store
460
+ Thumbs.db
461
+
462
+ # Documentation
463
+ *.md
464
+ docs/
465
+
466
+ # Tests
467
+ tests/
468
+ *.test.js
469
+ coverage/
470
+
471
+ # CI/CD
472
+ .github
473
+ .gitlab-ci.yml
474
+ ```
475
+
476
+ ## Build Optimization
477
+
478
+ ### Remote Builds (Recommended)
479
+
480
+ ```bash
481
+ # Build on Fly's infrastructure (no local Docker needed)
482
+ fly deploy --remote-only
483
+
484
+ # Faster, uses Fly's build cache
485
+ ```
486
+
487
+ ### Local Builds
488
+
489
+ ```bash
490
+ # Build locally with Docker
491
+ fly deploy --local-only
492
+
493
+ # Useful for testing Dockerfile changes
494
+ ```
495
+
496
+ ### Build with Cache
497
+
498
+ ```bash
499
+ # Use build cache
500
+ fly deploy --remote-only
501
+
502
+ # Clear cache and rebuild
503
+ fly deploy --remote-only --no-cache
504
+ ```
505
+
506
+ ## Deploying Pre-Built Images
507
+
508
+ ### From Docker Hub
509
+
510
+ ```bash
511
+ fly deploy --image nginx:latest
512
+ ```
513
+
514
+ ### From Private Registry
515
+
516
+ ```toml
517
+ # fly.toml
518
+ [build]
519
+ image = "registry.example.com/my-app:v1.2.3"
520
+ ```
521
+
522
+ ```bash
523
+ # Deploy
524
+ fly deploy
525
+ ```
526
+
527
+ ### With Registry Authentication
528
+
529
+ ```bash
530
+ # Set registry credentials
531
+ fly secrets set DOCKER_REGISTRY_TOKEN=your-token
532
+
533
+ # Deploy from private registry
534
+ fly deploy --image registry.example.com/my-app:latest
535
+ ```
536
+
537
+ ## Debugging Docker Builds
538
+
539
+ ### Build Locally for Testing
540
+
541
+ ```bash
542
+ # Build Docker image locally
543
+ docker build -t my-app .
544
+
545
+ # Test locally
546
+ docker run -p 8080:8080 my-app
547
+
548
+ # Then deploy to Fly
549
+ fly deploy --local-only
550
+ ```
551
+
552
+ ### View Build Logs
553
+
554
+ ```bash
555
+ # Deploy with verbose output
556
+ fly deploy --verbose
557
+
558
+ # View build logs
559
+ fly logs --timestamps
560
+ ```
561
+
562
+ ### SSH into Running Container
563
+
564
+ ```bash
565
+ # Access running container
566
+ fly ssh console
567
+
568
+ # Check environment
569
+ fly ssh console -C "env"
570
+
571
+ # Inspect filesystem
572
+ fly ssh console -C "ls -la"
573
+ ```
574
+
575
+ ## Common Issues & Solutions
576
+
577
+ ### Large Image Size
578
+
579
+ ```dockerfile
580
+ # Before: 1GB+
581
+ FROM node:18
582
+ COPY . .
583
+ RUN npm install
584
+
585
+ # After: ~100MB
586
+ FROM node:18-alpine AS builder
587
+ COPY package*.json ./
588
+ RUN npm ci --production
589
+ COPY . .
590
+
591
+ FROM node:18-alpine
592
+ COPY --from=builder /app ./
593
+ CMD ["node", "index.js"]
594
+ ```
595
+
596
+ ### Slow Builds
597
+
598
+ ```dockerfile
599
+ # Order matters! Put stable layers first
600
+
601
+ # ❌ Bad: Code changes rebuild dependencies
602
+ FROM node:18-alpine
603
+ COPY . .
604
+ RUN npm install
605
+
606
+ # ✅ Good: Dependencies cached
607
+ FROM node:18-alpine
608
+ COPY package*.json ./
609
+ RUN npm ci
610
+ COPY . .
611
+ ```
612
+
613
+ ### Permission Errors
614
+
615
+ ```dockerfile
616
+ # Run as non-root user
617
+ FROM node:18-alpine
618
+
619
+ WORKDIR /app
620
+
621
+ # Change ownership
622
+ COPY --chown=node:node . .
623
+
624
+ # Switch to node user
625
+ USER node
626
+
627
+ CMD ["node", "server.js"]
628
+ ```
629
+
630
+ ## Best Practices Summary
631
+
632
+ 1. **Use Multi-Stage Builds**: Reduce final image size
633
+ 2. **Order Layers Wisely**: Put changing content last
634
+ 3. **Use Alpine Images**: Smaller, faster deployments
635
+ 4. **Run as Non-Root**: Better security
636
+ 5. **Include .dockerignore**: Faster builds, smaller context
637
+ 6. **Use Build Cache**: Leverage layer caching
638
+ 7. **Health Checks**: Add HEALTHCHECK instruction
639
+ 8. **Environment Variables**: Use fly secrets, not hardcoded in Dockerfile
640
+ 9. **Remote Builds**: Use `--remote-only` for Fly's build cache
641
+ 10. **Pin Versions**: Specify exact versions for reproducibility
642
+
643
+ ## References
644
+
645
+ - [Fly.io Docker Deployment](https://fly.io/docs/languages-and-frameworks/dockerfile/)
646
+ - [Docker Best Practices](https://docs.docker.com/develop/dev-best-practices/)
647
+ - [Multi-Stage Builds](https://docs.docker.com/build/building/multi-stage/)
648
+ - [Dockerfile Reference](https://docs.docker.com/engine/reference/builder/)