From 8abbd564009bfc52dbde218751f3964c10213702 Mon Sep 17 00:00:00 2001 From: Daniel Lo Nigro Date: Wed, 17 Jul 2024 00:59:21 -0700 Subject: [PATCH] Switch PostgreSQL container to use pgautoupgrade (#4892) * Switch PostgreSQL container to use pgautoupgrade This handles automatically upgrading the data files to newer versions of PostgreSQL. * Fixing other uses of postgres:16-alpine image. * Simplifying upgrade scripts. --------- Co-authored-by: Dessalines --- .woodpecker.yml | 2 +- docker/docker-compose.yml | 2 +- docker/federation/docker-compose.yml | 2 +- scripts/postgres_12_to_15_upgrade.sh | 44 ++-------------------------- scripts/postgres_15_to_16_upgrade.sh | 40 ++----------------------- 5 files changed, 8 insertions(+), 82 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index b77fd6615..fe11411d8 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -306,7 +306,7 @@ steps: services: database: - image: postgres:16-alpine + image: pgautoupgrade/pgautoupgrade:16-alpine environment: POSTGRES_USER: lemmy POSTGRES_PASSWORD: password diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 655182e1a..c1d8d359b 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -97,7 +97,7 @@ services: logging: *default-logging postgres: - image: postgres:16-alpine + image: pgautoupgrade/pgautoupgrade:16-alpine # this needs to match the database host in lemmy.hson # Tune your settings via # https://pgtune.leopard.in.ua/#/ diff --git a/docker/federation/docker-compose.yml b/docker/federation/docker-compose.yml index 72a8145ec..2befc78c5 100644 --- a/docker/federation/docker-compose.yml +++ b/docker/federation/docker-compose.yml @@ -20,7 +20,7 @@ x-lemmy-default: &lemmy-default restart: always x-postgres-default: &postgres-default - image: postgres:16-alpine + image: pgautoupgrade/pgautoupgrade:16-alpine environment: - POSTGRES_USER=lemmy - POSTGRES_PASSWORD=password diff --git a/scripts/postgres_12_to_15_upgrade.sh b/scripts/postgres_12_to_15_upgrade.sh index 0850e8fca..9af9af64e 100755 --- a/scripts/postgres_12_to_15_upgrade.sh +++ b/scripts/postgres_12_to_15_upgrade.sh @@ -1,48 +1,8 @@ #!/bin/sh set -e -echo "Do not stop in the middle of this upgrade, wait until you see the message: Upgrade complete." - -echo "Stopping lemmy and all services..." -sudo docker-compose stop - -echo "Make sure postgres is started..." -sudo docker-compose up -d postgres -sleep 20s - -echo "Exporting the Database to 12_15.dump.sql ..." -sudo docker-compose exec -T postgres pg_dumpall -c -U lemmy > 12_15_dump.sql -echo "Done." - -echo "Stopping postgres..." -sudo docker-compose stop postgres -sleep 20s - -echo "Removing the old postgres folder" -sudo rm -rf volumes/postgres - -echo "Updating docker-compose to use postgres version 15." -sed -i "s/image: postgres:.*/image: postgres:15-alpine/" ./docker-compose.yml - -echo "Starting up new postgres..." -sudo docker-compose up -d postgres -sleep 20s - -echo "Importing the database...." -cat 12_15_dump.sql | sudo docker-compose exec -T postgres psql -U lemmy -echo "Done." - -POSTGRES_PASSWORD=$(grep "POSTGRES_PASSWORD" ./docker-compose.yml | cut -d"=" -f2) - -echo "Fixing a weird password issue with postgres 15" -sudo docker-compose exec -T postgres psql -U lemmy -c "alter user lemmy with password '$POSTGRES_PASSWORD'" -sudo docker-compose restart postgres - -echo "Setting correct perms for pictrs folder" -sudo chown -R 991:991 volumes/pictrs +echo "Updating docker-compose to use postgres version 16." +sudo sed -i "s/image: .*postgres:.*/image: pgautoupgrade\/pgautoupgrade:16-alpine/" ./docker-compose.yml echo "Starting up lemmy..." sudo docker-compose up -d - -echo "A copy of your old database is at 12_15.dump.sql . You can delete this file if the upgrade went smoothly." -echo "Upgrade complete." diff --git a/scripts/postgres_15_to_16_upgrade.sh b/scripts/postgres_15_to_16_upgrade.sh index d83803a4f..9af9af64e 100755 --- a/scripts/postgres_15_to_16_upgrade.sh +++ b/scripts/postgres_15_to_16_upgrade.sh @@ -1,42 +1,8 @@ #!/bin/sh set -e -echo "Do not stop in the middle of this upgrade, wait until you see the message: Upgrade complete." - -echo "Stopping lemmy and all services..." -sudo docker compose stop - -echo "Make sure postgres is started..." -sudo docker compose up -d postgres -echo "Waiting..." -sleep 20s - -echo "Exporting the Database to 15_16.dump.sql ..." -sudo docker compose exec -T postgres pg_dumpall -c -U lemmy | sudo tee 15_16_dump.sql > /dev/null -echo "Done." - -echo "Stopping postgres..." -sudo docker compose stop postgres -echo "Waiting..." -sleep 20s - -echo "Removing the old postgres folder" -sudo rm -rf volumes/postgres - -echo "Updating docker compose to use postgres version 16." -sudo sed -i "s/image: .*postgres:.*/image: docker.io\/postgres:16-alpine/" ./docker-compose.yml - -echo "Starting up new postgres..." -sudo docker compose up -d postgres -echo "Waiting..." -sleep 20s - -echo "Importing the database...." -sudo cat 15_16_dump.sql | sudo docker compose exec -T postgres psql -U lemmy -echo "Done." +echo "Updating docker-compose to use postgres version 16." +sudo sed -i "s/image: .*postgres:.*/image: pgautoupgrade\/pgautoupgrade:16-alpine/" ./docker-compose.yml echo "Starting up lemmy..." -sudo docker compose up -d - -echo "A copy of your old database is at 15_16.dump.sql . You can delete this file if the upgrade went smoothly." -echo "Upgrade complete." +sudo docker-compose up -d