pg_replica 0.3.0

Consensus-driven failover for PostgreSQL (Raft control plane)
name: pg-replica-cluster

x-node-env: &node-env
  PGDATA: "/var/lib/postgresql/data"
  RAFT_PORT: "7400"
  PEERS: "1@node1:7400,2@node2:7400,3@node3:7400"
  PG_ADDRS: "1@node1:5432,2@node2:5432,3@node3:5432"
  SEED_HOST: "node1"
  SU_PASSWORD: "${SU_PASSWORD:-pgr_super_pw}"
  REPL_PASSWORD: "${REPL_PASSWORD:-pgr_repl_pw}"
  APP_USER: "${APP_USER:-weido}"
  APP_PASSWORD: "${APP_PASSWORD:-weido_test_pw}"
  APP_DB: "${APP_DB:-weido}"
  SYNCHRONOUS: "${SYNCHRONOUS:-on}"

services:
  node1:
    build:
      context: ..
      dockerfile: docker/Dockerfile
    image: pg-replica-paradedb:local
    container_name: pgr-node1
    environment:
      <<: *node-env
      NODE_ID: "1"
    volumes: [node1data:/var/lib/postgresql/data]
    ports: ["5432:5432"]
    networks: [pgr]
    restart: unless-stopped

  node2:
    image: pg-replica-paradedb:local
    container_name: pgr-node2
    depends_on: [node1]
    environment:
      <<: *node-env
      NODE_ID: "2"
    volumes: [node2data:/var/lib/postgresql/data]
    ports: ["5433:5432"]
    networks: [pgr]
    restart: unless-stopped

  node3:
    image: pg-replica-paradedb:local
    container_name: pgr-node3
    depends_on: [node1]
    environment:
      <<: *node-env
      NODE_ID: "3"
    volumes: [node3data:/var/lib/postgresql/data]
    ports: ["5434:5432"]
    networks: [pgr]
    restart: unless-stopped

  dozzle:
    image: amir20/dozzle:v10.5.2
    container_name: pgr-dozzle
    environment:
      DOZZLE_NO_ANALYTICS: "true"
      DOZZLE_LEVEL: info
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports: ["8888:8080"]
    networks: [pgr]
    restart: unless-stopped
    mem_limit: 128m

volumes:
  node1data:
  node2data:
  node3data:

networks:
  pgr:
    driver: bridge