feat(ops): saker deploy-process - tools-container for migrera/seed + omskriven deploy.sh + runbook
CI / Typecheck, test & build (push) Failing after 49s
CI / Typecheck, test & build (push) Failing after 49s
- Dockerfile.tools + app-tools compose-tjanst (profile: tools): on-demand migrera/seed via tsx, kor aldrig som tjanst. - deploy.sh omskriven: ratt gren (master), ratt sokvag (/opt/cibello-platform), riktig migrering via tools-container (ersatter trasig --migrate-only), bygger api+worker, healthcheck med automatisk rollback. - RUNBOOK.md: deploy, recept-/sprak-uppdatering, migreringar, rollback, admin. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# Dockerfile.tools — on-demand ops-image för db-migreringar och seed mot prod.
|
||||
# Körs INTE som långkörande tjänst (profile: tools i compose). Anropas via:
|
||||
# docker compose -f <compose> --profile tools run --rm app-tools tsx packages/database/src/migrate.ts
|
||||
# docker compose -f <compose> --profile tools run --rm app-tools tsx packages/database/src/seed/run.ts
|
||||
#
|
||||
# Seed är idempotent (onConflictDoUpdate/DoNothing) och rör ALDRIG users-tabellen.
|
||||
# TRUNCATE i seed är dubbelgrindad (kräver --test OCH databasnamn som slutar på _test),
|
||||
# så en körning utan --test mot prod-databasen "cibello" kan aldrig radera data.
|
||||
FROM node:22-alpine
|
||||
WORKDIR /build
|
||||
# tsx globalt (root-devberoende i monorepot) så vi slipper full workspace-install.
|
||||
RUN corepack enable && npm install -g tsx@4
|
||||
|
||||
# Endast det @app/database behöver: root-config + packages/ (inga apps/ krävs).
|
||||
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc ./
|
||||
COPY tsconfig.base.json turbo.json ./
|
||||
COPY brand.config.json ./
|
||||
COPY packages ./packages
|
||||
|
||||
# Installera @app/database + dess beroende-closure (drizzle-orm, pg, nutrition-engine,
|
||||
# analytics, shared-types). Faller tillbaka till icke-frozen om lockfile-koll klagar
|
||||
# på att apps/* saknas i den partiella utcheckningen.
|
||||
RUN pnpm install --frozen-lockfile --filter @app/database... \
|
||||
|| pnpm install --no-frozen-lockfile --filter @app/database...
|
||||
|
||||
# Ingen tjänst — körs med explicit kommando.
|
||||
CMD ["node","-e","console.log('app-tools: ange kommando, t.ex. tsx packages/database/src/seed/run.ts')"]
|
||||
@@ -95,6 +95,20 @@ services:
|
||||
cpus: "0.5"
|
||||
memory: 640M
|
||||
|
||||
# app-tools: on-demand ops-container för db-migreringar + seed. Startar INTE med
|
||||
# `up` (profile: tools). Körs via:
|
||||
# docker compose -f <compose> --profile tools run --rm app-tools tsx packages/database/src/migrate.ts
|
||||
# docker compose -f <compose> --profile tools run --rm app-tools tsx packages/database/src/seed/run.ts
|
||||
app-tools:
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: infrastructure/docker/Dockerfile.tools
|
||||
image: app-tools:latest
|
||||
container_name: app-tools
|
||||
env_file: /opt/app-platform/secrets/api.env
|
||||
profiles: ["tools"]
|
||||
restart: "no"
|
||||
|
||||
# PostgreSQL: befintlig RDS-instans med separat separat databas och
|
||||
# användaren app-användaren med minsta möjliga privilegier (spec §52).
|
||||
# Se infrastructure/deployment/create-database.sql.
|
||||
|
||||
Reference in New Issue
Block a user