@oktis-works/cms 0.2.0 → 0.3.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 (85) hide show
  1. package/dist/assets.d.ts +23 -6
  2. package/dist/assets.d.ts.map +1 -1
  3. package/dist/assets.js +262 -87
  4. package/dist/assets.js.map +1 -1
  5. package/dist/bluegreen.d.ts.map +1 -1
  6. package/dist/bluegreen.js +75 -52
  7. package/dist/bluegreen.js.map +1 -1
  8. package/dist/commands.d.ts.map +1 -1
  9. package/dist/commands.js +269 -131
  10. package/dist/commands.js.map +1 -1
  11. package/dist/config-wizard.js +34 -36
  12. package/dist/config-wizard.js.map +1 -1
  13. package/dist/deploy-target.d.ts +20 -0
  14. package/dist/deploy-target.d.ts.map +1 -0
  15. package/dist/deploy-target.js +90 -0
  16. package/dist/deploy-target.js.map +1 -0
  17. package/dist/deploy.d.ts +20 -0
  18. package/dist/deploy.d.ts.map +1 -0
  19. package/dist/deploy.js +154 -0
  20. package/dist/deploy.js.map +1 -0
  21. package/dist/docker.d.ts +16 -0
  22. package/dist/docker.d.ts.map +1 -1
  23. package/dist/docker.js +25 -0
  24. package/dist/docker.js.map +1 -1
  25. package/dist/docs-updater.d.ts +10 -0
  26. package/dist/docs-updater.d.ts.map +1 -0
  27. package/dist/docs-updater.js +45 -0
  28. package/dist/docs-updater.js.map +1 -0
  29. package/dist/doctor.js +12 -12
  30. package/dist/doctor.js.map +1 -1
  31. package/dist/env-file.js +1 -1
  32. package/dist/env-file.js.map +1 -1
  33. package/dist/env-schema.d.ts.map +1 -1
  34. package/dist/env-schema.js +64 -64
  35. package/dist/env-schema.js.map +1 -1
  36. package/dist/extension-scaffold.js +5 -5
  37. package/dist/extension-scaffold.js.map +1 -1
  38. package/dist/guards.js +8 -8
  39. package/dist/guards.js.map +1 -1
  40. package/dist/history.d.ts +48 -0
  41. package/dist/history.d.ts.map +1 -0
  42. package/dist/history.js +104 -0
  43. package/dist/history.js.map +1 -0
  44. package/dist/installer.js +9 -9
  45. package/dist/installer.js.map +1 -1
  46. package/dist/npm-registry.js +1 -1
  47. package/dist/npm-registry.js.map +1 -1
  48. package/dist/pm2.d.ts +18 -0
  49. package/dist/pm2.d.ts.map +1 -0
  50. package/dist/pm2.js +179 -0
  51. package/dist/pm2.js.map +1 -0
  52. package/dist/project-config.js +1 -1
  53. package/dist/project-config.js.map +1 -1
  54. package/dist/prompt.d.ts +27 -4
  55. package/dist/prompt.d.ts.map +1 -1
  56. package/dist/prompt.js +254 -29
  57. package/dist/prompt.js.map +1 -1
  58. package/dist/redeploy.d.ts +6 -1
  59. package/dist/redeploy.d.ts.map +1 -1
  60. package/dist/redeploy.js +137 -74
  61. package/dist/redeploy.js.map +1 -1
  62. package/dist/rollback.d.ts +15 -0
  63. package/dist/rollback.d.ts.map +1 -0
  64. package/dist/rollback.js +170 -0
  65. package/dist/rollback.js.map +1 -0
  66. package/dist/scaffold-docs.d.ts +5 -0
  67. package/dist/scaffold-docs.d.ts.map +1 -1
  68. package/dist/scaffold-docs.js +61 -19
  69. package/dist/scaffold-docs.js.map +1 -1
  70. package/dist/scaffold.d.ts +3 -1
  71. package/dist/scaffold.d.ts.map +1 -1
  72. package/dist/scaffold.js +25 -16
  73. package/dist/scaffold.js.map +1 -1
  74. package/dist/simple.d.ts +31 -0
  75. package/dist/simple.d.ts.map +1 -0
  76. package/dist/simple.js +200 -0
  77. package/dist/simple.js.map +1 -0
  78. package/dist/start.js +1 -1
  79. package/dist/theme-build.js +3 -3
  80. package/dist/theme-build.js.map +1 -1
  81. package/dist/update.d.ts +23 -15
  82. package/dist/update.d.ts.map +1 -1
  83. package/dist/update.js +211 -66
  84. package/dist/update.js.map +1 -1
  85. package/package.json +7 -7
package/dist/assets.js CHANGED
@@ -28,50 +28,51 @@ export const ASSET_MIRROR = {
28
28
  * quatro builds idênticos consumindo o mesmo node_modules.
29
29
  */
30
30
  export const DOCKERFILE = `# syntax=docker/dockerfile:1
31
- # @oktis-works - Imagem única do OkCMS (entrypoints: api | admin | web | worker)
31
+ # @oktis-works - Single OkCMS image (entrypoints: api | admin | web | worker)
32
32
  #
33
- # Gerada pelo scaffold da CLI. Canônica em
34
- # infrastructure/docker/Dockerfile neste monorepo.
33
+ # Generated by the CLI scaffold. Canonical at
34
+ # infrastructure/docker/Dockerfile in this monorepo.
35
35
  #
36
- # SEGURANÇA: a ferramenta de linha de comando NÃO entra nesta imagem. O
37
- # container expõe apenas os processos da aplicação — sem instalador de
38
- # pacotes, sem acesso ao socket do Docker, sem capacidade de alterar o
39
- # próprio estado. Deploy e configuração sempre rodam no host.
36
+ # SECURITY: the command-line tool never enters this image. The container
37
+ # exposes only the application processes — no package installer, no Docker
38
+ # socket access, no way to change its own state. Deploy and configuration
39
+ # always run on the host.
40
40
  FROM oven/bun:1-alpine AS base
41
41
  WORKDIR /app
42
42
  ENV NODE_ENV=production
43
43
 
44
- # --- dependências -----------------------------------------------------------
45
- # Manifest + lock primeiro: trocar só o código não invalida este \`install\`.
44
+ # --- dependencies -----------------------------------------------------------
45
+ # Manifest + lock first: changing just the code does not invalidate
46
+ # this \`install\`.
46
47
  FROM base AS deps
47
48
  COPY package.json bun.lock* package-lock.json* yarn.lock* pnpm-lock.yaml* ./
48
- # Fallbacks: lock ausente/divergente (npm/yarn) ou bun antigo sem --production
49
+ # Fallbacks: missing/divergent lock (npm/yarn) or old bun without --production
49
50
  RUN bun install --production --frozen-lockfile \\
50
51
  || bun install --production \\
51
52
  || bun install
52
53
 
53
54
  # --- runtime ----------------------------------------------------------------
54
55
  FROM base AS runtime
55
- # 1. código do projeto (.dockerignore remove .env, node_modules e .data)
56
+ # 1. project code (.dockerignore drops .env, node_modules and .data)
56
57
  COPY . .
57
- # 2. node_modules limpo do estágio de deps, por cima — nunca o do host
58
+ # 2. clean node_modules from the deps stage, on top — never the host's
58
59
  COPY --from=deps /app/node_modules ./node_modules
59
60
 
60
61
  RUN mkdir -p /app/.data/storage /app/.data/cache /app/logs
61
62
 
62
63
  EXPOSE 3000 3001 3011
63
64
 
64
- # \`docker compose ... command: api\` escolhe o papel; ver docker/entrypoint.sh
65
+ # \`docker compose ... command: api\` picks the role; see docker/entrypoint.sh
65
66
  ENTRYPOINT ["/app/docker/entrypoint.sh"]
66
67
  CMD ["api"]
67
68
  `;
68
69
  /** Dispatcher de papéis. Fora da lista, executa o comando literal. */
69
70
  export const ENTRYPOINT_SH = `#!/bin/sh
70
- # @oktis-works - Entrada única da imagem okcms/app
71
+ # @oktis-works - Single entrypoint of the okcms/app image
71
72
  #
72
- # O compose escolhe o papel com \`command: api|web|admin|worker\`. Qualquer
73
- # outro valor é repassado literalmente (\`docker run okcms/app sh\`), o que
74
- # mantem o container inspecionável sem reescrever a imagem.
73
+ # Compose picks the role with \`command: api|web|admin|worker\`. Any other
74
+ # value is passed through literally (\`docker run okcms/app sh\`), which keeps
75
+ # the container inspectable without rewriting the image.
75
76
  set -eu
76
77
 
77
78
  api_entry="node_modules/@oktis-works/api/dist/index.js"
@@ -106,22 +107,23 @@ esac
106
107
  * caros — assinar a imagem com o `.env` real e instalar `node_modules` do host
107
108
  * (arquitetura diferente / código não auditado).
108
109
  */
109
- export const DOCKERIGNORE = `# @oktis-works - build context da imagem okcms/app
110
- # .env NUNCA entra na imagem: ele carrega senha de banco e JWT_SECRET e a
111
- # imagem é distribuída/copiada. Em runtime ele vem do host via env_file.
110
+ export const DOCKERIGNORE = `# @oktis-works - build context of the okcms/app image
111
+ # .env NEVER enters the image: it carries the database password and
112
+ # JWT_SECRET, and the image is distributed/copied. At runtime it comes
113
+ # from the host via env_file.
112
114
 
113
115
  .env
114
116
  .env.*
115
117
  !.env.example
116
118
 
117
- # dependências do host (a imagem instala as suas)
119
+ # host dependencies (the image installs its own)
118
120
  node_modules
119
121
  **/node_modules
120
122
  .tsbuildinfo
121
123
  **/*.tsbuildinfo
122
- # NB: NÃO ignorar dist/ — plugins instalados em plugins/*/dist são runtime.
124
+ # NB: do NOT ignore dist/ — plugins installed in plugins/*/dist are runtime.
123
125
 
124
- # dados e estado local
126
+ # local data and state
125
127
  .data
126
128
  **/.data
127
129
  logs
@@ -130,10 +132,10 @@ logs
130
132
  coverage
131
133
  **/coverage
132
134
 
133
- # montado em runtime, não copiado
135
+ # mounted at runtime, not copied
134
136
  deploy/
135
137
 
136
- # VCS e tooling — não é código de runtime
138
+ # VCS and tooling — not runtime code
137
139
  .git
138
140
  .github
139
141
  .gitignore
@@ -144,7 +146,7 @@ deploy/
144
146
  *.md
145
147
  !README.md
146
148
 
147
- # infraestrutura montada em runtime, não copiada para dentro
149
+ # infrastructure mounted at runtime, not copied inside
148
150
  docker-compose*.yml
149
151
  deploy/nginx/certs
150
152
  `;
@@ -156,12 +158,14 @@ deploy/nginx/certs
156
158
  * projeto PRÓPRIO para que `docker compose -p okcms-blue down` não derrube o
157
159
  * banco junto com a lane antiga.
158
160
  */
159
- export const COMPOSE_INFRA = `# @oktis-works - Infraestrutura compartilhada do deploy em produção
160
- # Gerada pela CLI. Canônica em infrastructure/compose/docker-compose.infra.yml
161
+ export const COMPOSE_INFRA = `# @oktis-works - Shared infrastructure of the production deploy
162
+ # Generated by the CLI. Canonical at
163
+ # infrastructure/compose/docker-compose.infra.yml
161
164
  #
162
- # Projeto Docker PRÓPRIO (okcms): postgres, redis e proxy únicos. As lanes
163
- # blue/green são projetos separados (okcms-blue / okcms-green) que entram
164
- # nesta rede como externa — por isso \`down\` numa lane nunca toca no banco.
165
+ # OWN Docker project (okcms): single postgres, redis and proxy. The
166
+ # blue/green lanes are separate projects (okcms-blue / okcms-green) that
167
+ # join this network as external — so \`down\` of a lane never touches the
168
+ # database.
165
169
  #
166
170
  # docker compose -p okcms -f docker-compose.infra.yml up -d
167
171
  name: okcms
@@ -174,13 +178,14 @@ services:
174
178
  environment:
175
179
  POSTGRES_DB: \${DB_NAME:-okcms}
176
180
  POSTGRES_USER: \${DB_USER:-postgres}
177
- POSTGRES_PASSWORD: \${DB_PASSWORD:?defina DB_PASSWORD no .env}
181
+ POSTGRES_PASSWORD: \${DB_PASSWORD:?set DB_PASSWORD in .env}
178
182
  volumes:
179
183
  - postgres-data:/var/lib/postgresql/data
180
184
  ports:
181
- # Somente loopback: o host consegue rodar \`okcms db:migrate\` e
182
- # \`db:backup\` sem expor o Postgres para a rede. Em produção gerenciada
183
- # remova este bloco e aponte DB_HOST/DATABASE_URL para o provedor.
185
+ # Loopback only: the host can run \`okcms db:migrate\` and
186
+ # \`db:backup\` without exposing Postgres to the network. On managed
187
+ # production remove this block and point DB_HOST/DATABASE_URL at the
188
+ # provider.
184
189
  - "127.0.0.1:\${DB_HOST_PORT:-5432}:5432"
185
190
  healthcheck:
186
191
  test: ["CMD-SHELL", "pg_isready -U $\${POSTGRES_USER} -d $\${POSTGRES_DB}"]
@@ -188,7 +193,7 @@ services:
188
193
  timeout: 5s
189
194
  retries: 10
190
195
  labels:
191
- # classificação lida pelo \`okcms update\`: data = intocável
196
+ # classification read by \`okcms update\`: data = untouchable
192
197
  okcms.role: data
193
198
  networks: [okcms]
194
199
 
@@ -207,7 +212,7 @@ services:
207
212
  else
208
213
  exec redis-server --appendonly yes
209
214
  fi
210
- # Nenhuma porta publicada: só quem está em okcms-net alcança o Redis.
215
+ # no published port: only what is on okcms-net can reach Redis
211
216
  volumes:
212
217
  - redis-data:/data
213
218
  healthcheck:
@@ -227,12 +232,12 @@ services:
227
232
  - "80:80"
228
233
  - "8080:8080"
229
234
  environment:
230
- # entram no envsubst nativo do nginx → gravam conf.d/default.conf
235
+ # fed to the native nginx envsubst → writes conf.d/default.conf
231
236
  SERVER_NAME: \${SERVER_NAME:-_}
232
237
  ADMIN_SERVER_NAME: \${ADMIN_SERVER_NAME:-admin.localhost}
233
238
  volumes:
234
239
  - ./deploy/nginx/templates:/etc/nginx/templates:ro
235
- # conf.d precisa ser gravável: a CLI reescreve 00-upstreams.conf no swap
240
+ # conf.d must be writable: the CLI rewrites 00-upstreams.conf on swap
236
241
  - ./deploy/nginx/conf.d:/etc/nginx/conf.d:rw
237
242
  labels:
238
243
  okcms.role: proxy
@@ -240,7 +245,7 @@ services:
240
245
 
241
246
  networks:
242
247
  okcms:
243
- # nome fixo — as lanes o declaram como external
248
+ # fixed name — the lanes declare it as external
244
249
  name: okcms-net
245
250
 
246
251
  volumes:
@@ -258,29 +263,30 @@ volumes:
258
263
  * `-p okcms-blue` ou `-p okcms-green`. Os containers herdam o prefixo
259
264
  * `okcms-<lane>-`, que é exatamente o que os upstreams do nginx apontam.
260
265
  */
261
- export const COMPOSE_DEPLOY = `# @oktis-works - Lanes blue/green do OkCMS
262
- # Gerada pela CLI. Canônica em infrastructure/compose/docker-compose.deploy.yml
266
+ export const COMPOSE_DEPLOY = `# @oktis-works - OkCMS blue/green lanes
267
+ # Generated by the CLI. Canonical at
268
+ # infrastructure/compose/docker-compose.deploy.yml
263
269
  #
264
- # Um ARQUIVO, DOIS projetos Docker. O lane é o nome do projeto:
270
+ # ONE FILE, TWO Docker projects. The lane is the project name:
265
271
  #
266
272
  # docker compose -p okcms-blue -f docker-compose.deploy.yml up -d --build
267
273
  # docker compose -p okcms-green -f docker-compose.deploy.yml up -d --build
268
274
  #
269
- # Containers ficam okcms-<lane>-<serviço> — os upstreams do nginx apontam
270
- # para esses nomes (gerados em deploy/nginx/conf.d/00-upstreams.conf).
275
+ # Containers are okcms-<lane>-<service> — the nginx upstreams point at
276
+ # those names (generated in deploy/nginx/conf.d/00-upstreams.conf).
271
277
  #
272
- # A rede okcms-net é EXTERNA (criada pelo docker-compose.infra.yml) e os
273
- # serviços de infra NÃO aparecem aqui de propósito: sem isso, \`down\` de uma
274
- # lane derrubaria o banco junto com a lane antiga.
278
+ # The okcms-net network is EXTERNAL (created by docker-compose.infra.yml)
279
+ # and the infra services are NOT listed here on purpose: without that,
280
+ # \`down\` of a lane would take the database down with the old lane.
275
281
  #
276
- # Papéis (label okcms.role, lida pelo \`okcms update\`):
277
- # edge api/web/admin → trocados por completo a cada deploy (blue/green)
278
- # worker fila BullMQ → NUNCA blue/green; drenado com SIGTERM no swap
279
- # data postgres/redis→ intocáveis; moram no docker-compose.infra.yml
282
+ # Roles (label okcms.role, read by \`okcms update\`):
283
+ # edge api/web/admin → fully replaced on each deploy (blue/green)
284
+ # worker BullMQ queue → NEVER blue/green; drained with SIGTERM on swap
285
+ # data postgres/redis→ untouchable; they live in docker-compose.infra.yml
280
286
  #
281
- # NB: o \`down\` de lane derruba CONTAINERS e REDES, mas nunca passa de
282
- # \`\`\` -v \`\`\`: o volume okcms-storage é compartilhado entre blue e green,
283
- # é ele que mantém a mídia viva através dos deploys.
287
+ # NB: a lane \`down\` removes CONTAINERS and NETWORKS, but never passes -v
288
+ # (\`-v\` would wipe the okcms-storage volume shared by blue and green, the
289
+ # one that keeps media alive across deploys).
284
290
 
285
291
  x-app: &app
286
292
  image: okcms/app:\${OKCMS_VERSION:-latest}
@@ -288,7 +294,7 @@ x-app: &app
288
294
  context: .
289
295
  dockerfile: docker/Dockerfile
290
296
  env_file:
291
- # .env primeiro (portas do operador) — o environment abaixo sobrescreve
297
+ # .env first (operator ports) — the environment below overrides
292
298
  - .env
293
299
  restart: unless-stopped
294
300
  networks: [okcms]
@@ -299,7 +305,7 @@ x-app: &app
299
305
  volumes:
300
306
  - ./plugins:/app/plugins
301
307
  - ./themes:/app/themes
302
- # mídia compartilhada entre as duas lanes: deploy não perde arquivo
308
+ # media shared by both lanes: a deploy never loses files
303
309
  - storage-data:/app/.data/storage
304
310
  - cache-data:/app/.data/cache
305
311
 
@@ -326,7 +332,7 @@ x-web-health: &web-health
326
332
  start_period: 25s
327
333
 
328
334
  x-admin-health: &admin-health
329
- # o admin é Astro standalone: serve / e não tem /health dedicado
335
+ # the admin is an Astro standalone: it serves / and has no /health endpoint
330
336
  test:
331
337
  - CMD
332
338
  - bun
@@ -381,8 +387,9 @@ services:
381
387
  healthcheck: *web-health
382
388
 
383
389
  # -------------------------------------------------------------- admin
384
- # admin lê \`PORT\` (astro standalone) e não \`ADMIN_PORT\`: o environment do
385
- # service substitui o do anchor \`<<\`, então os três comuns são repetidos.
390
+ # admin reads \`PORT\` (astro standalone), not \`ADMIN_PORT\`: a service
391
+ # level environment replaces the merged anchor one, so the three shared
392
+ # ones are repeated.
386
393
  admin-blue:
387
394
  <<: *app
388
395
  container_name: okcms-admin-blue
@@ -414,8 +421,9 @@ services:
414
421
  healthcheck: *admin-health
415
422
 
416
423
  # ------------------------------------------------------------- worker
417
- # Uma fila não suporta duas instâncias "fantasma": o worker só sobe depois
418
- # do swap e o da lane antiga drena com SIGTERM (stop_grace_period) antes.
424
+ # a queue cannot take two "ghost" instances: the worker starts only after
425
+ # the swap and the old lane's worker drains with SIGTERM
426
+ # (stop_grace_period) first.
419
427
  worker-blue:
420
428
  <<: *app
421
429
  container_name: okcms-worker-blue
@@ -442,7 +450,142 @@ networks:
442
450
  external: true
443
451
 
444
452
  volumes:
445
- # compartilhado entre blue e green de propósito: mídia sobrevive ao deploy
453
+ # shared between blue and green on purpose: media survives the deploy
454
+ storage-data:
455
+ name: okcms-storage
456
+ cache-data:
457
+ name: okcms-cache
458
+ `;
459
+ // ---------------------------------------------------------------------------
460
+ // Simple container stack (docker-compose.app.yml) — one project, no lanes
461
+ // ---------------------------------------------------------------------------
462
+ /**
463
+ * The non-blue/green path: one Docker project (`okcms-app`) holding api, web,
464
+ * admin and worker without lane suffixes. `up -d --build` recreates only what
465
+ * changed, there is no second lane to keep warm and no proxy swap — the nginx
466
+ * upstreams simply point at `okcms-api` / `okcms-web` / `okcms-admin`.
467
+ *
468
+ * Network and volumes are the same ones the lanes use, so storage (media)
469
+ * survives a switch between simple mode and blue/green.
470
+ */
471
+ export const COMPOSE_APP = `# @oktis-works - Simple container stack of OkCMS
472
+ # Generated by the CLI.
473
+ #
474
+ # One Docker project, no lanes, no swap:
475
+ #
476
+ # docker compose -p okcms-app -f docker-compose.app.yml up -d --build
477
+ #
478
+ # Containers are okcms-api / okcms-web / okcms-admin / okcms-worker — the
479
+ # nginx upstreams (deploy/nginx/conf.d/00-upstreams.conf) point at them.
480
+ # Use \`okcms deploy\` to pick this mode, or blue/green for zero-downtime.
481
+ #
482
+ # Network okcms-net is EXTERNAL (created by docker-compose.infra.yml), so
483
+ # \`down\` of this stack never touches postgres, redis or the proxy.
484
+
485
+ x-app: &app
486
+ image: okcms/app:\${OKCMS_VERSION:-latest}
487
+ build:
488
+ context: .
489
+ dockerfile: docker/Dockerfile
490
+ env_file:
491
+ - .env
492
+ restart: unless-stopped
493
+ networks: [okcms]
494
+ environment:
495
+ NODE_ENV: production
496
+ DB_HOST: postgres
497
+ REDIS_HOST: redis
498
+ volumes:
499
+ - ./plugins:/app/plugins
500
+ - ./themes:/app/themes
501
+ - storage-data:/app/.data/storage
502
+ - cache-data:/app/.data/cache
503
+
504
+ x-api-health: &api-health
505
+ test:
506
+ - CMD
507
+ - bun
508
+ - -e
509
+ - "fetch('http://127.0.0.1:'+(process.env.PORT||3000)+'/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
510
+ interval: 10s
511
+ timeout: 5s
512
+ retries: 12
513
+ start_period: 25s
514
+
515
+ x-web-health: &web-health
516
+ test:
517
+ - CMD
518
+ - bun
519
+ - -e
520
+ - "fetch('http://127.0.0.1:'+(process.env.WEB_PORT||3001)+'/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
521
+ interval: 10s
522
+ timeout: 5s
523
+ retries: 12
524
+ start_period: 25s
525
+
526
+ x-admin-health: &admin-health
527
+ # the admin is an Astro standalone: it serves / and has no /health endpoint
528
+ test:
529
+ - CMD
530
+ - bun
531
+ - -e
532
+ - "fetch('http://127.0.0.1:'+(process.env.PORT||3011)+'/').then(r=>process.exit(r.status<500?0:1)).catch(()=>process.exit(1))"
533
+ interval: 10s
534
+ timeout: 5s
535
+ retries: 12
536
+ start_period: 30s
537
+
538
+ services:
539
+ api:
540
+ <<: *app
541
+ container_name: okcms-api
542
+ command: ["api"]
543
+ labels:
544
+ okcms.role: edge
545
+ okcms.service: api
546
+ healthcheck: *api-health
547
+
548
+ web:
549
+ <<: *app
550
+ container_name: okcms-web
551
+ command: ["web"]
552
+ labels:
553
+ okcms.role: edge
554
+ okcms.service: web
555
+ healthcheck: *web-health
556
+
557
+ # the admin reads \`PORT\` (astro standalone), not \`ADMIN_PORT\`: a service
558
+ # level environment replaces the merged anchor one, so it is repeated here.
559
+ admin:
560
+ <<: *app
561
+ container_name: okcms-admin
562
+ command: ["admin"]
563
+ environment:
564
+ NODE_ENV: production
565
+ DB_HOST: postgres
566
+ REDIS_HOST: redis
567
+ PORT: \${ADMIN_PORT:-3011}
568
+ labels:
569
+ okcms.role: edge
570
+ okcms.service: admin
571
+ healthcheck: *admin-health
572
+
573
+ worker:
574
+ <<: *app
575
+ container_name: okcms-worker
576
+ command: ["worker"]
577
+ stop_grace_period: 30s
578
+ labels:
579
+ okcms.role: worker
580
+ okcms.service: worker
581
+
582
+ networks:
583
+ okcms:
584
+ name: okcms-net
585
+ external: true
586
+
587
+ volumes:
588
+ # same names as the lanes: media survives switching deploy modes
446
589
  storage-data:
447
590
  name: okcms-storage
448
591
  cache-data:
@@ -461,16 +604,19 @@ volumes:
461
604
  * as variáveis em `$host`/`$upstream_*` são do nginx e ficam intactas porque
462
605
  * o envsubst só substitui a lista de variáveis definidas no ambiente.
463
606
  */
464
- export const NGINX_TEMPLATE = `# @oktis-works - Roteamento do proxy OkCMS (template)
465
- # Gerado pela CLI. Canônica em infrastructure/nginx/templates/default.conf.template
607
+ export const NGINX_TEMPLATE = `# @oktis-works - OkCMS proxy routing (template)
608
+ # Generated by the CLI. Canonical at
609
+ # infrastructure/nginx/templates/default.conf.template
466
610
  #
467
- # O nginx oficial processa /etc/nginx/templates/*.template no start, com
468
- # envsubst limitado às variáveis definidas no ambiente (SERVER_NAME e
469
- # ADMIN_SERVER_NAME, vindas do .env). Tudo que for \$host, \$remote_addr ou
470
- # \$upstream_* é do nginx e NÃO é substituído.
611
+ # The official nginx image runs /etc/nginx/templates/*.template on start,
612
+ # with envsubst limited to the variables defined in the environment
613
+ # (SERVER_NAME and ADMIN_SERVER_NAME, coming from the .env). Anything that
614
+ # is \$host, \$remote_addr or \$upstream_* belongs to nginx and is NOT
615
+ # substituted.
471
616
  #
472
- # Os upstreams moram em conf.d/00-upstreams.conf: a CLI os reescreve no swap
473
- # e recarrega com \`nginx -s reload\` — troca de lane sem derrubar conexão.
617
+ # The upstreams live in conf.d/00-upstreams.conf: the CLI rewrites them on
618
+ # swap and reloads with \`nginx -s reload\` — lane switch without dropping
619
+ # connections.
474
620
 
475
621
  map \$http_upgrade \$connection_upgrade {
476
622
  default upgrade;
@@ -478,9 +624,9 @@ map \$http_upgrade \$connection_upgrade {
478
624
  }
479
625
 
480
626
  # ---------------------------------------------------------------- admin ----
481
- # O admin é um Astro standalone servido na RAIZ (não em /admin): ele gera
482
- # URLs /_astro/... e não tem base path configurado, então publicá-lo em
483
- # /admin/ quebraria os assets. Ele precisa de host próprio.
627
+ # The admin is an Astro standalone served at the ROOT (not /admin): it emits
628
+ # /_astro/... URLs and has no configured base path, so publishing it under
629
+ # /admin/ would break the assets. It needs its own host.
484
630
  server {
485
631
  listen 80;
486
632
  server_name \${ADMIN_SERVER_NAME};
@@ -499,7 +645,7 @@ server {
499
645
  }
500
646
  }
501
647
 
502
- # admin por porta — funciona sem DNS nenhum (http://<host>:8080/)
648
+ # admin by port — works without any DNS (http://<host>:8080/)
503
649
  server {
504
650
  listen 8080 default_server;
505
651
  server_name _;
@@ -517,7 +663,7 @@ server {
517
663
  }
518
664
  }
519
665
 
520
- # ---------------------------------------------------------- site público ---
666
+ # ----------------------------------------------------------- public site ---
521
667
  server {
522
668
  listen 80 default_server;
523
669
  server_name \${SERVER_NAME};
@@ -527,7 +673,7 @@ server {
527
673
  gzip_types text/plain text/css application/json application/javascript
528
674
  image/svg+xml;
529
675
 
530
- # healthcheck do edge: sempre no api (é quem fala com o banco)
676
+ # edge healthcheck: always on the api (it is the one talking to the database)
531
677
  location = /health {
532
678
  access_log off;
533
679
  proxy_pass \$upstream_api;
@@ -535,7 +681,7 @@ server {
535
681
  proxy_set_header Host \$host;
536
682
  }
537
683
 
538
- # API + mídia (/api/v1/media/file/<tenant>/<arquivo>)
684
+ # API + media (/api/v1/media/file/<tenant>/<file>)
539
685
  location /api/ {
540
686
  proxy_pass \$upstream_api;
541
687
  proxy_http_version 1.1;
@@ -549,9 +695,9 @@ server {
549
695
  proxy_read_timeout 120s;
550
696
  }
551
697
 
552
- # STORAGE_PUBLIC_BASE=/storage → rota o mesmo arquivo para a API.
553
- # O local driver publica <base>/<tenant>/<arquivo>, que é exatamente o
554
- # formato de /api/v1/media/file/<tenant>/<arquivo>.
698
+ # STORAGE_PUBLIC_BASE=/storage → routes the same file to the API.
699
+ # The local driver publishes <base>/<tenant>/<file>, which is exactly the
700
+ # format of /api/v1/media/file/<tenant>/<file>.
555
701
  location /storage/ {
556
702
  rewrite ^/storage/(.*)\$ /api/v1/media/file/\$1 break;
557
703
  proxy_pass \$upstream_api;
@@ -562,7 +708,7 @@ server {
562
708
  expires 30d;
563
709
  }
564
710
 
565
- # assets de tema servidos pelo web (resolver de path do Theme SDK)
711
+ # theme assets served by the web (Theme SDK path resolver)
566
712
  location /themes/ {
567
713
  proxy_pass \$upstream_web;
568
714
  proxy_http_version 1.1;
@@ -570,7 +716,7 @@ server {
570
716
  proxy_set_header X-Forwarded-Proto \$scheme;
571
717
  }
572
718
 
573
- # SSR do site público
719
+ # SSR of the public site
574
720
  location / {
575
721
  proxy_pass \$upstream_web;
576
722
  proxy_http_version 1.1;
@@ -594,12 +740,13 @@ export const DEFAULT_UPSTREAM_PORTS = { api: 3000, web: 3001, admin: 3011 };
594
740
  * fechar conexão estabelecida.
595
741
  */
596
742
  export function renderUpstreams(lane, ports = DEFAULT_UPSTREAM_PORTS) {
597
- return `# @oktis-works - Upstreams ativos (GERADO pela CLI — não edite à mão)
743
+ return `# @oktis-works - Active upstreams (GENERATED by the CLI — do not edit by hand)
598
744
  #
599
- # Reescrito pelo \`okcms update\` no momento do swap e recarregado com
745
+ # Rewritten by \`okcms update\` at swap time and reloaded with
600
746
  # docker exec okcms-proxy nginx -s reload
601
- # Aponta para containers do projeto Docker okcms-<lane> na rede okcms-net.
602
- # Mídia, cache e banco NÃO são blue/green — moram no projeto \`okcms\`.
747
+ # Points at containers of the Docker project okcms-<lane> on okcms-net.
748
+ # Media, cache and database are NOT blue/green — they live in the \`okcms\`
749
+ # project.
603
750
 
604
751
  map \$host \$upstream_api {
605
752
  default http://okcms-api-${lane}:${ports.api};
@@ -614,6 +761,32 @@ map \$host \$upstream_admin {
614
761
  }
615
762
  `;
616
763
  }
764
+ /**
765
+ * Upstreams for the SIMPLE stack (`okcms deploy --target simple`): the same
766
+ * nginx config, pointing at the lane-less containers. Switching modes is a
767
+ * rewrite of this file plus `nginx -s reload`.
768
+ */
769
+ export function renderSimpleUpstreams(ports = DEFAULT_UPSTREAM_PORTS) {
770
+ return `# @oktis-works - Active upstreams (GENERATED by the CLI — do not edit by hand)
771
+ #
772
+ # Simple mode: one stack only (docker-compose.app.yml), no lanes.
773
+ # Rewritten by \`okcms deploy --target simple\` and reloaded with
774
+ # docker exec okcms-proxy nginx -s reload
775
+ # Points at the okcms-api / okcms-web / okcms-admin containers on okcms-net.
776
+
777
+ map \$host \$upstream_api {
778
+ default http://okcms-api:${ports.api};
779
+ }
780
+
781
+ map \$host \$upstream_web {
782
+ default http://okcms-web:${ports.web};
783
+ }
784
+
785
+ map \$host \$upstream_admin {
786
+ default http://okcms-admin:${ports.admin};
787
+ }
788
+ `;
789
+ }
617
790
  // ---------------------------------------------------------------------------
618
791
  // Caminhos no projeto do operador + montagem dos assets
619
792
  // ---------------------------------------------------------------------------
@@ -623,6 +796,7 @@ export const DEPLOY_PATHS = {
623
796
  entrypoint: 'docker/entrypoint.sh',
624
797
  composeInfra: 'docker-compose.infra.yml',
625
798
  composeDeploy: 'docker-compose.deploy.yml',
799
+ composeApp: 'docker-compose.app.yml',
626
800
  nginxTemplate: 'deploy/nginx/templates/default.conf.template',
627
801
  nginxUpstreams: 'deploy/nginx/conf.d/00-upstreams.conf',
628
802
  };
@@ -664,6 +838,7 @@ export function deployAssets(lane = 'blue', ports = DEFAULT_UPSTREAM_PORTS) {
664
838
  { path: DEPLOY_PATHS.entrypoint, content: ENTRYPOINT_SH, mode: 0o755 },
665
839
  { path: DEPLOY_PATHS.composeInfra, content: COMPOSE_INFRA },
666
840
  { path: DEPLOY_PATHS.composeDeploy, content: COMPOSE_DEPLOY },
841
+ { path: DEPLOY_PATHS.composeApp, content: COMPOSE_APP },
667
842
  { path: DEPLOY_PATHS.nginxTemplate, content: NGINX_TEMPLATE },
668
843
  { path: DEPLOY_PATHS.nginxUpstreams, content: renderUpstreams(lane, ports) },
669
844
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bluegreen.d.ts","sourceRoot":"","sources":["../src/bluegreen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bluegreen.d.ts","sourceRoot":"","sources":["../src/bluegreen.ts"],"names":[],"mappings":"AAwBA,OAAO,EAA8B,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EA0BL,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AAOrB,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAKrD,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,oEAAoE;IACpE,IAAI,EAAE,IAAI,CAAC;IACX,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,gFAAgF;IAChF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,SAAU,IAAI,KAAG,MAAM,EAI/C,CAAC;AACF,eAAO,MAAM,cAAc,SAAU,IAAI,KAAG,MAA0B,CAAC;AAEvE,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,4BAA4B,CAAC;AAmB1D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEjE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,EAAE,CAUV;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAsB,EACnD,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,EAAE,CAGV;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,YAAY,CAYlE;AAMD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,GAAE,MAAsB,GAAG,eAAe,CAuBzE;AAMD,eAAO,MAAM,eAAe,SAAU,IAAI,KAAG,MAAyC,CAAC;AACvF,eAAO,MAAM,kBAAkB,SAAU,IAAI,KAAG,MAAM,EACG,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,cAAc,CActE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIvE;AAiBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA2QhF"}