@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.
- package/dist/assets.d.ts +23 -6
- package/dist/assets.d.ts.map +1 -1
- package/dist/assets.js +262 -87
- package/dist/assets.js.map +1 -1
- package/dist/bluegreen.d.ts.map +1 -1
- package/dist/bluegreen.js +75 -52
- package/dist/bluegreen.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +269 -131
- package/dist/commands.js.map +1 -1
- package/dist/config-wizard.js +34 -36
- package/dist/config-wizard.js.map +1 -1
- package/dist/deploy-target.d.ts +20 -0
- package/dist/deploy-target.d.ts.map +1 -0
- package/dist/deploy-target.js +90 -0
- package/dist/deploy-target.js.map +1 -0
- package/dist/deploy.d.ts +20 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +154 -0
- package/dist/deploy.js.map +1 -0
- package/dist/docker.d.ts +16 -0
- package/dist/docker.d.ts.map +1 -1
- package/dist/docker.js +25 -0
- package/dist/docker.js.map +1 -1
- package/dist/docs-updater.d.ts +10 -0
- package/dist/docs-updater.d.ts.map +1 -0
- package/dist/docs-updater.js +45 -0
- package/dist/docs-updater.js.map +1 -0
- package/dist/doctor.js +12 -12
- package/dist/doctor.js.map +1 -1
- package/dist/env-file.js +1 -1
- package/dist/env-file.js.map +1 -1
- package/dist/env-schema.d.ts.map +1 -1
- package/dist/env-schema.js +64 -64
- package/dist/env-schema.js.map +1 -1
- package/dist/extension-scaffold.js +5 -5
- package/dist/extension-scaffold.js.map +1 -1
- package/dist/guards.js +8 -8
- package/dist/guards.js.map +1 -1
- package/dist/history.d.ts +48 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +104 -0
- package/dist/history.js.map +1 -0
- package/dist/installer.js +9 -9
- package/dist/installer.js.map +1 -1
- package/dist/npm-registry.js +1 -1
- package/dist/npm-registry.js.map +1 -1
- package/dist/pm2.d.ts +18 -0
- package/dist/pm2.d.ts.map +1 -0
- package/dist/pm2.js +179 -0
- package/dist/pm2.js.map +1 -0
- package/dist/project-config.js +1 -1
- package/dist/project-config.js.map +1 -1
- package/dist/prompt.d.ts +27 -4
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +254 -29
- package/dist/prompt.js.map +1 -1
- package/dist/redeploy.d.ts +6 -1
- package/dist/redeploy.d.ts.map +1 -1
- package/dist/redeploy.js +137 -74
- package/dist/redeploy.js.map +1 -1
- package/dist/rollback.d.ts +15 -0
- package/dist/rollback.d.ts.map +1 -0
- package/dist/rollback.js +170 -0
- package/dist/rollback.js.map +1 -0
- package/dist/scaffold-docs.d.ts +5 -0
- package/dist/scaffold-docs.d.ts.map +1 -1
- package/dist/scaffold-docs.js +61 -19
- package/dist/scaffold-docs.js.map +1 -1
- package/dist/scaffold.d.ts +3 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +25 -16
- package/dist/scaffold.js.map +1 -1
- package/dist/simple.d.ts +31 -0
- package/dist/simple.d.ts.map +1 -0
- package/dist/simple.js +200 -0
- package/dist/simple.js.map +1 -0
- package/dist/start.js +1 -1
- package/dist/theme-build.js +3 -3
- package/dist/theme-build.js.map +1 -1
- package/dist/update.d.ts +23 -15
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +211 -66
- package/dist/update.js.map +1 -1
- 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 -
|
|
31
|
+
# @oktis-works - Single OkCMS image (entrypoints: api | admin | web | worker)
|
|
32
32
|
#
|
|
33
|
-
#
|
|
34
|
-
# infrastructure/docker/Dockerfile
|
|
33
|
+
# Generated by the CLI scaffold. Canonical at
|
|
34
|
+
# infrastructure/docker/Dockerfile in this monorepo.
|
|
35
35
|
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
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
|
-
# ---
|
|
45
|
-
# Manifest + lock
|
|
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
|
|
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.
|
|
56
|
+
# 1. project code (.dockerignore drops .env, node_modules and .data)
|
|
56
57
|
COPY . .
|
|
57
|
-
# 2. node_modules
|
|
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\`
|
|
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 -
|
|
71
|
+
# @oktis-works - Single entrypoint of the okcms/app image
|
|
71
72
|
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
#
|
|
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
|
|
110
|
-
# .env
|
|
111
|
-
#
|
|
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
|
-
#
|
|
119
|
+
# host dependencies (the image installs its own)
|
|
118
120
|
node_modules
|
|
119
121
|
**/node_modules
|
|
120
122
|
.tsbuildinfo
|
|
121
123
|
**/*.tsbuildinfo
|
|
122
|
-
# NB:
|
|
124
|
+
# NB: do NOT ignore dist/ — plugins installed in plugins/*/dist are runtime.
|
|
123
125
|
|
|
124
|
-
#
|
|
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
|
-
#
|
|
135
|
+
# mounted at runtime, not copied
|
|
134
136
|
deploy/
|
|
135
137
|
|
|
136
|
-
# VCS
|
|
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
|
-
#
|
|
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 -
|
|
160
|
-
#
|
|
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
|
-
#
|
|
163
|
-
# blue/green
|
|
164
|
-
#
|
|
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:?
|
|
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
|
-
#
|
|
182
|
-
# \`db:backup\`
|
|
183
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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 -
|
|
262
|
-
#
|
|
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
|
-
#
|
|
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
|
|
270
|
-
#
|
|
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
|
-
#
|
|
273
|
-
#
|
|
274
|
-
# lane
|
|
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
|
-
#
|
|
277
|
-
# edge api/web/admin →
|
|
278
|
-
# worker
|
|
279
|
-
# data postgres/redis→
|
|
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:
|
|
282
|
-
#
|
|
283
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
|
385
|
-
#
|
|
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
|
-
#
|
|
418
|
-
#
|
|
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
|
-
#
|
|
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 -
|
|
465
|
-
#
|
|
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
|
-
#
|
|
468
|
-
# envsubst
|
|
469
|
-
# ADMIN_SERVER_NAME,
|
|
470
|
-
# \$upstream_*
|
|
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
|
-
#
|
|
473
|
-
#
|
|
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
|
-
#
|
|
482
|
-
#
|
|
483
|
-
# /admin/
|
|
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
|
|
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
|
-
#
|
|
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
|
|
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 +
|
|
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 →
|
|
553
|
-
#
|
|
554
|
-
#
|
|
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
|
|
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
|
|
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 -
|
|
743
|
+
return `# @oktis-works - Active upstreams (GENERATED by the CLI — do not edit by hand)
|
|
598
744
|
#
|
|
599
|
-
#
|
|
745
|
+
# Rewritten by \`okcms update\` at swap time and reloaded with
|
|
600
746
|
# docker exec okcms-proxy nginx -s reload
|
|
601
|
-
#
|
|
602
|
-
#
|
|
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
|
];
|
package/dist/assets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,iEAAiE;AACjE,EAAE;AACF,+EAA+E;AAC/E,sEAAsE;AACtE,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,qEAAqE;AAErE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE,kCAAkC;IAC9C,UAAU,EAAE,qCAAqC;IACjD,YAAY,EAAE,qCAAqC;IACnD,YAAY,EAAE,iDAAiD;IAC/D,aAAa,EAAE,kDAAkD;IACjE,aAAa,EAAE,sDAAsD;CAC7D,CAAC;AAEX,8EAA8E;AAC9E,4DAA4D;AAC5D,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
|
package/dist/bluegreen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"bluegreen.d.ts","sourceRoot":"","sources":["../src/bluegreen.ts"],"names":[],"mappings":"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"}
|