Epidemiology & Technology

Postgres/ PostgreSQL 18 Docker containers

Postgres 18 is out. How to run it in containers easy

Basic steps

mkdir postgres
cd postgres
git clone https://github.com/drguptavivek/postgres.git

cd secrets
touch PGADMIN_DEFAULT_EMAIL
nano PGADMIN_DEFAULT_EMAIL
# Type the email ID, save, exit

chmod +x ./scripts/gen_secrets.sh
./scripts/gen_secrets.sh
docker compose -p pgstack -f docker-compose.init.yml up -d
docker logs --tail 50 -f pgdb

chmod +x scripts/02_create_rotate_replication_user.sh
scripts/02_create_rotate_replication_user.sh

docker inspect  pgdb | grep IPAddress
grep "replication" config/pg_hba.confCode language: PHP (php)

Backups

sudo mkdir -p backups && sudo chown -R 999:999 backups
./scripts/02_create_rotate_replication_user.sh
docker compose -p pgstack -f docker-compose.backup.yml up -d

# watch for logs
docker logs -f pg_basebackup_runner

docker inspect  pgdb | grep IPAddress
docker inspect  pg_basebackup_runner | grep IPAddress
grep "replication" config/pg_hba.conf

docker exec -u root pg_basebackup_runner /usr/local/bin/pg_do_basebackup.sh
docker logs --tail 20 -f pgdb
tree backups/full

Code language: PHP (php)

Adding a new App specific Db and its specific db user

chmod +x ./apps/dbtool.sh

# add app name to /scripts/gen_secrets.sh after line 25
#    gen fundusApp_PASSWORD4
awk '($0=="# Add_New_Above_Here" && !r){print "gen fundusApp_PASSWORD4"} {print} $0=="# Add_New_Above_Here"{r=1}' ./scripts/gen_secrets.sh > ./scripts/.gen_secrets.sh.tmp && mv ./scripts/.gen_secrets.sh.tmp ./scripts/gen_secrets.sh

chmod +x ./scripts/gen_secrets.sh
./scripts/gen_secrets.sh

# In the app specific docker-compose.fundusApp.yml - services.dbtool.secrets
      # >>> App-specific variables <<<
      APP_USER: fundusAppUser4        # <-- Change this
      APP_DB: fundusAppDb4            # <-- Change this
      APP_SCHEMA: fundusAppSchema4    # <-- Change this

  APP_PASSWORD:
    file: ./secrets/fundusApp_PASSWORD4 # <-- Change this

# Run the one-shot job: use the same project name as your main stack
docker compose -p pgstack \
  -f docker-compose.init.yml \
  -f docker-compose.fundusApp.yml \
  run --rm dbtool

 Code language: PHP (php)

Connection String

postgresql://fundusAppUser4:<contents_of_secret_fundusApp_PASSWORD4>@pgdb:5432/fundusAppDb4?search_path=fundusAppSchema4Code language: HTML, XML (xml)

Related Posts