Files
call-center/docs/runbooks/postgres-server-docker.md
T

2.6 KiB

Runbook - Shared Docker Host PostgreSQL for call-center

Use this runbook when the server already hosts other Docker projects and call-center still runs on SQLite. This flow creates an isolated PostgreSQL instance for call-center only and does not restart the current application stack.

Assets

  • Compose file: deployment/docker-compose.postgres.server.yml
  • Secret env file: /home/mvpcc/call-center/.env.postgres.server
  • Data directory: /home/mvpcc/call-center/.data_pg
  • Host-local PostgreSQL port: 127.0.0.1:5434

Future application connection string:

  • containers on the same Docker host: postgresql://mvpcc_app:<secret>@call-center-postgres:5432/mvpcc
  • host-local checks: postgresql://mvpcc_app:<secret>@127.0.0.1:5434/mvpcc

Bring-up

From the repository root on the target server:

cd /home/mvpcc/call-center
python3 - <<'PY'
from pathlib import Path
import secrets

target = Path(".env.postgres.server")
target.write_text(
    "POSTGRES_DB=mvpcc\n"
    "POSTGRES_USER=mvpcc_app\n"
    f"POSTGRES_PASSWORD={secrets.token_urlsafe(32)}\n",
    encoding="utf-8",
)
PY
chmod 600 .env.postgres.server
mkdir -p .data_pg
chmod 700 .data_pg
docker compose -f deployment/docker-compose.postgres.server.yml up -d

Verification

Container status and logs:

cd /home/mvpcc/call-center
docker compose -f deployment/docker-compose.postgres.server.yml ps
docker compose -f deployment/docker-compose.postgres.server.yml logs postgres --tail 50
docker exec call-center-postgres pg_isready -U mvpcc_app -d mvpcc

Host-local connection check without installing psql on the server:

cd /home/mvpcc/call-center
set -a
. ./.env.postgres.server
set +a
docker run --rm --network host \
  -e PGPASSWORD="$POSTGRES_PASSWORD" \
  postgres:16-alpine \
  psql -h 127.0.0.1 -p 5434 -U "$POSTGRES_USER" -d "$POSTGRES_DB" \
  -Atqc "select current_database(), current_user;"

Port exposure check:

ss -ltn | grep 5434

Expected result:

  • the container is healthy
  • pg_isready returns accepting connections
  • the SQL check returns mvpcc|mvpcc_app
  • ss shows 127.0.0.1:5434, not 0.0.0.0:5434

Scope guardrails

Do not do these actions in this step:

  • do not edit deployment/docker-compose.server.yml
  • do not switch DATABASE_URL for the running call-center services
  • do not run application migrations against the new PostgreSQL instance yet
  • do not touch existing PostgreSQL containers used by other projects

When a second Dockerized call-center stack is added later on the same host, connect it to the external network call-center-postgres_default and use call-center-postgres:5432 from the application containers.