Skip to content

Deploy Pulse na prod — runbook

Schvaleny postup pro deploy S60 Pulse na produkci (prod-alfa).

Schvalil: Libor, 2026-03-20


PRAVIDLO: Hub VZDY pred prod

Na prod se NIKDY nesmi nasadit verze, ktera nebyla nejdriv nasazena na hub a overena QA. Postup je VZDY: hub deploy -> QA overeni na hub -> prod deploy.

Pokud je na prod novejsi verze nez na hub, je to chyba procesu.


Pre-check 0: Je deploy vubec potreba?

Pred vsim ostatnim zjisti, jaka verze bezi na cilovych serverech:

# Aktualni nasazene verze
HUB_VER=$(ssh root@100.68.138.14 "cd /opt/pulse && git log --oneline -1")
PROD_VER=$(ssh root@100.78.87.88 "cd /opt/pulse && git log --oneline -1")
LOCAL_VER=$(cd /root/projects/pulse && git log --oneline -1)
  • Pokud hub i prod uz bezi na cilove (nebo novejsi) verzi -> deploy neni potreba, nic se nedeje, ukonci task.
  • Pokud ne -> vypis Liborovi prehled (co je nasazeno vs. co ma byt) a pokracuj dal.

Pre-checks (pred deploy.sh)

  1. Hub MUSI byt nasazen PRVNI — stejna nebo novejsi verze nez co jde na prod
  2. Hub healthycurl -sf https://pulse.s60hub.cz/health
  3. QA result — QA agent potvrdil na hub verzi (Relay API / task)
  4. Hub verze >= prod verze — na hub MUSI bezet stejna nebo novejsi verze nez aktualni prod
  5. Commit overencd /root/projects/pulse && git log -1 (musi byt ten co prosel QA na hub)
  6. Secrets existuji/root/secrets/pulse/.env.prod

Blokery

  • Hub NENI healthy -> STOP
  • QA neproslo na hub -> STOP
  • Na hub bezi starsi verze nez co chces dat na prod -> STOP, nejdriv deploy hub
  • NIKDY nespoustet deploy na prod bez splneni VSECH podminek

Deploy

./deploy/deploy.sh pulse prod

Script automaticky provede:

  • Git pull
  • Readiness check (Dockerfile, env file, required vars)
  • npm audit
  • Rsync na prod-alfa (100.78.87.88)
  • Kopie .env.prod
  • Docker compose up --build
  • Health check s retry (8x po 10s)

Post-deploy verifikace

  1. Health check (interni):

    ssh root@100.78.87.88 "curl -s http://127.0.0.1:3100/health"
    

  2. Smoke test (verejny):

    curl -sf https://pulselab.cz/health
    

  3. Logy:

    ssh root@100.78.87.88 "cd /opt/pulse && docker compose logs --tail=30"
    

  4. OAuth callback URL — overit v auth DB ze redirect_url odpovida pulselab.cz (ne hub)

Prod fail

Pokud health check selze -> okamzity rollback (viz Rollback runbook). Nahlasit PM + Libor.


Reporting (automaticke)

Deploy.sh automaticky zapisuje:

  • Changelog (docs/docs/deploy/changelog.md)
  • Memory pipeline (Redis -> Neo4j)
  • Deploy log do Relay API (kaizen)

Manualne: status report PM pres Relay API po uspesnem deployi.


Reference

  • Obecny proces: Standardni deploy
  • Pulse specifika: S60 Pulse
  • Deploy script: /root/projects/sentinel/deploy/deploy.sh
  • Manifest: /root/projects/pulse/deploy.yml
  • Secrets: /root/secrets/pulse/.env.prod
  • DB: s60_pulse_prod / s60_pulse_prod_user
  • Domena: pulselab.cz