| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env bash
- # One-time (or after secret rotation): write durable env for safe-redeploy-service.sh
- #
- # Prefer dumping from a *healthy* API container so Dokploy-injected secrets
- # (Mittera, Polar, OAuth, …) are kept — not only the short bootstrap .env.
- #
- # On France:
- # bash scripts/install-durable-prod-env.sh
- # # or with an explicit container:
- # bash scripts/install-durable-prod-env.sh briven-brivenfrance-uilsk6-api-1
- set -euo pipefail
- OUT="${BRIVEN_DURABLE_ENV:-/etc/dokploy/compose/briven-brivenfrance-uilsk6/.env.prod}"
- CONTAINER="${1:-briven-brivenfrance-uilsk6-api-1}"
- BOOTSTRAP="${BRIVEN_BOOTSTRAP_ENV:-/opt/briven_deploy/infra/dokploy/.env}"
- mkdir -p "$(dirname "$OUT")"
- TMP="$(mktemp)"
- trap 'rm -f "$TMP"' EXIT
- if docker ps --format '{{.Names}}' | grep -qx "$CONTAINER"; then
- echo "dumping env from healthy container: $CONTAINER"
- docker inspect "$CONTAINER" --format '{{range .Config.Env}}{{println .}}{{end}}' >"$TMP"
- else
- echo "container $CONTAINER not running — using bootstrap only: $BOOTSTRAP"
- if [[ ! -f "$BOOTSTRAP" ]]; then
- echo "error: no container and no bootstrap env"
- exit 1
- fi
- # strip comments for env-file compatibility
- grep -v '^\s*#' "$BOOTSTRAP" | grep -v '^\s*$' >"$TMP" || true
- fi
- # Force domain origins
- {
- grep -vE '^(BRIVEN_WEB_ORIGIN|BRIVEN_API_ORIGIN|BRIVEN_DOMAIN)=' "$TMP" || true
- echo "BRIVEN_DOMAIN=briven.tech"
- echo "BRIVEN_WEB_ORIGIN=https://briven.tech"
- echo "BRIVEN_API_ORIGIN=https://api.briven.tech"
- } >"${TMP}.2"
- mv "${TMP}.2" "$TMP"
- # Overlay live doltgres password into DATABASE URLs if present
- if docker ps --format '{{.Names}}' | grep -qx 'briven-brivenfrance-uilsk6-doltgres-1'; then
- PW="$(
- docker inspect briven-brivenfrance-uilsk6-doltgres-1 \
- --format '{{range .Config.Env}}{{println .}}{{end}}' \
- | sed -n 's/^DOLTGRES_PASSWORD=//p'
- )"
- if [[ -n "$PW" ]]; then
- python3 - "$TMP" "$PW" <<'PY'
- import sys, re
- path, pw = sys.argv[1], sys.argv[2]
- lines = open(path).read().splitlines()
- out = []
- have = set()
- for line in lines:
- if "=" not in line or line.strip().startswith("#"):
- out.append(line)
- continue
- k, v = line.split("=", 1)
- have.add(k)
- if k == "BRIVEN_DOLTGRES_PASSWORD":
- v = pw
- if k in ("BRIVEN_DATABASE_URL", "BRIVEN_ENGINE_DATABASE_URL", "BRIVEN_DATA_PLANE_URL"):
- db = "briven_engine" if "ENGINE" in k else "briven_control"
- v = f"postgres://postgres:{pw}@doltgres:5432/{db}?sslmode=disable"
- out.append(f"{k}={v}")
- if "BRIVEN_DOLTGRES_PASSWORD" not in have:
- out.append(f"BRIVEN_DOLTGRES_PASSWORD={pw}")
- open(path, "w").write("\n".join(out) + "\n")
- PY
- fi
- fi
- install -m 600 "$TMP" "$OUT"
- echo "wrote $OUT (mode 600, $(wc -l <"$OUT") lines)"
- echo "use: scripts/safe-redeploy-service.sh api web docs"
|