FEATURE: Update base image and set default to postgresql 15 ()

This updates the default PostgreSQL version to 15.

  * image/base: update default postgres version to 15
  * launcher: bump base image to include postgres 15
  * postgres.template.yml: update default version to 15
  * postgres.15.template.yml: current version template

Legacy version templates:

  * postgres.13.template.yml
  * postgres.12.template.yml
  * postgres.10.template.yml
  * postgres.9.5.template.yml
This commit is contained in:
mwaniki-wairungu 2025-01-29 10:20:49 +03:00 committed by GitHub
parent 92ac6cbc9b
commit d9c837c783
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 149 additions and 185 deletions

1
.gitignore vendored
View file

@ -13,6 +13,7 @@ image/squash.tar
image/nsenter/nsenter
image/docker-squash
image/docker-squash.tar.gz
image/discourse_dev/install-rust
image/discourse_dev/postgres.template.yml
image/discourse_dev/redis.template.yml
.gc-state/*

View file

@ -4,7 +4,7 @@
To build a new image, just run `ruby auto_build.rb image-name`. The build process will build a local image with a predefined tag.
Images and tag names are defined [here](https://github.com/discourse/discourse_docker/blob/master/image/auto_build.rb#L6-L11).
Images and tag names are defined [here](https://github.com/discourse/discourse_docker/blob/main/image/auto_build.rb#L6-L88).
> **A note about --squash**: By default we squash the images we serve on Docker Hub. You will need to [enable experimental features](https://github.com/docker/docker-ce/blob/master/components/cli/experimental/README.md) on your Docker daemon for that.

View file

@ -28,7 +28,7 @@ RUN gpg --import /tmp/nginx_public_keys.key &&\
FROM discourse/ruby:3.3.6-${DEBIAN_RELEASE}-slim AS discourse_dependencies
ARG DEBIAN_RELEASE
ARG PG_MAJOR=13
ARG PG_MAJOR=15
ENV PG_MAJOR=${PG_MAJOR} \
RUBY_ALLOCATOR=/usr/lib/libjemalloc.so \
LEFTHOOK=0 \

View file

@ -1,12 +1,12 @@
run:
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
from: /#?fullpage_writes *=.*/
to: "fullpage_writes = off"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?full_page_writes *=.*/
to: "full_page_writes = off"
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?fsync *=.*/
to: "fsync = off"
@ -14,7 +14,7 @@ run:
background: true
# use fast shutdown for pg
stop_signal: INT
cmd: HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
cmd: HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
- exec:
background: true

View file

@ -92,7 +92,7 @@ kernel_min_version='4.4.0'
config_file=containers/"$config".yml
cidbootstrap=cids/"$config"_bootstrap.cid
local_discourse=local_discourse
image="discourse/base:2.0.20250114-0014"
image="discourse/base:2.0.20250127-0958-pg-15"
docker_path=`which docker.io 2> /dev/null || which docker`
git_path=`which git`

View file

@ -17,7 +17,7 @@ hooks:
to: sv start postgres || exit 1
run:
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-13 postgresql-client-13 postgresql-contrib-13
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15
- exec: apt-get update && apt-get install -y postgresql-10 postgresql-client-10 postgresql-contrib-10
- exec: mkdir -p /shared/postgres_run
- exec: chown postgres:postgres /shared/postgres_run
@ -141,6 +141,7 @@ run:
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists unaccent;"'
- exec:
stdin: |
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');

View file

@ -17,7 +17,7 @@ hooks:
to: sv start postgres || exit 1
run:
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-13 postgresql-client-13 postgresql-contrib-13
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15
- exec: apt-get update && apt-get install -y postgresql-12 postgresql-client-12 postgresql-contrib-12
- exec: mkdir -p /shared/postgres_run
- exec: chown postgres:postgres /shared/postgres_run
@ -140,6 +140,7 @@ run:
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists unaccent;"'
- exec:
stdin: |
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');

View file

@ -14,21 +14,16 @@ hooks:
- replace:
filename: /etc/service/unicorn/run
from: "# postgres"
to: sv start postgres || exit 1
to: |
if [ -f /root/install_postgres ]; then
/root/install_postgres
rm /root/install_postgres
fi
sv start postgres || exit 1
run:
- exec: sed -i "s/^# $LANG/$LANG/" /etc/locale.gen
- exec: locale-gen && update-locale
- exec: mkdir -p /shared/postgres_run
- exec: chown postgres:postgres /shared/postgres_run
- exec: chmod 775 /shared/postgres_run
- exec: rm -fr /var/run/postgresql
- exec: ln -s /shared/postgres_run /var/run/postgresql
- exec: socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
- exec: rm -fr /shared/postgres_run/.s*
- exec: rm -fr /shared/postgres_run/*.pid
- exec: mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
- exec: chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector
- exec: apt-get update && apt-get install -y postgresql-13 postgresql-client-13 postgresql-contrib-13 postgresql-13-pgvector
- file:
path: /etc/service/postgres/run
chmod: "+x"
@ -53,79 +48,30 @@ run:
sv stop postgres
- file:
path: /root/upgrade_postgres
chmod: "+x"
contents: |
#!/bin/bash
PG_MAJOR_OLD=`cat /shared/postgres_data/PG_VERSION`
if [ ! "13" = "$PG_MAJOR_OLD" ]; then
echo Upgrading PostgreSQL from version ${PG_MAJOR_OLD} to 13
free_disk=$(df -P -B1 /shared | tail -n 1 | awk '{print $4}')
required=$(($(du -sb /shared/postgres_data | awk '{print $1}') * 2))
if [ "$free_disk" -lt "$required" ]; then
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
echo "Please free up some space, or expand your disk, before continuing."
echo ''
echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.12.template.yml" in containers/app.yml'
exit 1
fi
if [ -d /shared/postgres_data_old ]; then
mv /shared/postgres_data_old /shared/postgres_data_older
fi
rm -fr /shared/postgres_data_new
install -d -m 0755 -o postgres -g postgres /shared/postgres_data_new && sudo -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data_new || exit 0
apt-get update
apt-get install -y postgresql-${PG_MAJOR_OLD}
chown -R postgres:postgres /var/lib/postgresql/13
/etc/init.d/postgresql stop
rm -fr /shared/postgres_data/postmaster.pid
cd ~postgres
cp -pr /etc/postgresql/${PG_MAJOR_OLD}/main/* /shared/postgres_data
echo >> /shared/postgres_data/postgresql.conf
echo "data_directory = '/shared/postgres_data'" >> /shared/postgres_data/postgresql.conf
SUCCESS=true
sudo -u postgres /usr/lib/postgresql/13/bin/pg_upgrade -d /shared/postgres_data -D /shared/postgres_data_new -b /usr/lib/postgresql/${PG_MAJOR_OLD}/bin -B /usr/lib/postgresql/13/bin || SUCCESS=false
if [[ "$SUCCESS" == 'false' ]]; then
echo -------------------------------------------------------------------------------------
echo UPGRADE OF POSTGRES FAILED
echo
echo Please visit https://meta.discourse.org/t/postgresql-13-update/172563 for support.
echo
echo You can run "./launcher start app" to restart your app in the meanwhile
echo
exit 1
fi
mv /shared/postgres_data /shared/postgres_data_old
mv /shared/postgres_data_new /shared/postgres_data
echo -------------------------------------------------------------------------------------
echo UPGRADE OF POSTGRES COMPLETE
echo
echo Old ${PG_MAJOR_OLD} database is stored at /shared/postgres_data_old
echo
echo To complete the upgrade, rebuild again using:
echo
echo ./launcher rebuild app
echo -------------------------------------------------------------------------------------
# Magic exit status to denote no failure
exit 77
fi
- exec:
cmd:
- chown -R root /var/lib/postgresql/13/main
- "[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0"
- chown -R postgres:postgres /shared/postgres_data
- chown -R postgres:postgres /var/run/postgresql
- exec: /root/upgrade_postgres
- exec: rm /root/upgrade_postgres
path: /root/install_postgres
chmod: "+x"
contents: |
#!/bin/bash -x
sed -i "s/^# $LANG/$LANG/" /etc/locale.gen
locale-gen && update-locale
mkdir -p /shared/postgres_run
chown postgres:postgres /shared/postgres_run
chmod 775 /shared/postgres_run
rm -fr /var/run/postgresql
ln -s /shared/postgres_run /var/run/postgresql
if [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi
rm -fr /shared/postgres_run/.s*
rm -fr /shared/postgres_run/*.pid
mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
chown -R root /var/lib/postgresql/13/main
[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /var/run/postgresql
# Necessary to enable backups
install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
@ -162,11 +108,6 @@ run:
from: /#?default_text_search_config *=.*/
to: "default_text_search_config = '$db_default_text_search_config'"
# Necessary to enable backups
- exec:
cmd:
- install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
from: /#?checkpoint_segments *=.*/
@ -200,29 +141,39 @@ run:
to: "host all all ::/0 md5"
- exec:
tag: db
cmd: |
if [ -f /root/install_postgres ]; then
/root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi
- exec:
tag: db
background: true
# use fast shutdown for pg
stop_signal: INT
cmd: HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
# give db a few secs to start up
- exec: "sleep 5"
- exec: su postgres -c 'createdb $db_name' || true
- exec: su postgres -c 'psql $db_name -c "create user $db_user;"' || true
- exec: su postgres -c 'psql $db_name -c "grant all privileges on database $db_name to $db_user;"' || true
- exec: su postgres -c 'psql $db_name -c "alter schema public owner to $db_user;"'
- exec: su postgres -c 'psql template1 -c "create extension if not exists hstore;"'
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql template1 -c "create extension if not exists vector;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists vector;"'
- exec:
stdin: |
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');
cmd: sudo -u postgres psql $db_name
raise_on_fail: false
- file:
path: /usr/local/bin/create_db
chmod: +x
contents: |
#!/bin/bash
su postgres -c 'createdb $db_name' || true
su postgres -c 'psql $db_name -c "create user $db_user;"' || true
su postgres -c 'psql $db_name -c "grant all privileges on database $db_name to $db_user;"' || true
su postgres -c 'psql $db_name -c "alter schema public owner to $db_user;"'
su postgres -c 'psql template1 -c "create extension if not exists hstore;"'
su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
su postgres -c 'psql template1 -c "create extension if not exists vector;"'
su postgres -c 'psql template1 -c "alter extension vector update;"' || true
su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
su postgres -c 'psql $db_name -c "create extension if not exists vector;"'
su postgres -c 'psql $db_name -c "alter extension vector update;"' || true
sudo -u postgres psql $db_name <<< "update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');" || true
- file:
path: /var/lib/postgresql/take-database-backup
@ -243,5 +194,10 @@ run:
#0 */4 * * * /var/lib/postgresql/take-database-backup
- exec:
tag: db
hook: postgres
cmd: "echo postgres installed!"
cmd:
# give db a few secs to start up
- "sleep 5"
- /usr/local/bin/create_db
- "echo postgres installed!"

View file

@ -22,8 +22,6 @@ hooks:
sv start postgres || exit 1
run:
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-13 postgresql-client-13 postgresql-contrib-13 postgresql-13-pgvector
- exec: apt-get update && apt-get install -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector
- file:
path: /etc/service/postgres/run
chmod: "+x"
@ -67,12 +65,15 @@ run:
mkdir -p /shared/postgres_run/15-main.pg_stat_tmp
chown postgres:postgres /shared/postgres_run/15-main.pg_stat_tmp
chown -R root /var/lib/postgresql/15/main
[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/15/bin/initdb -D /shared/postgres_data || exit 0
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /var/run/postgresql
if [ -f /root/upgrade_postgres ]; then
/root/upgrade_postgres
rm /root/upgrade_postgres
if [ ! -e /shared/postgres_data ]; then
install -d -m 0755 -o postgres -g postgres /shared/postgres_data
sudo -E -u postgres /usr/lib/postgresql/15/bin/initdb -D /shared/postgres_data
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /var/run/postgresql
elif [ -f /root/upgrade_postgres ]; then
unset RETCODE
/root/upgrade_postgres || RETCODE=$?
[ -z "${RETCODE}" ] && rm /root/upgrade_postgres || exit $RETCODE
fi
# Necessary to enable backups
install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
@ -90,11 +91,16 @@ run:
required=$(($(du -sb /shared/postgres_data | awk '{print $1}') * 2))
if [ "$free_disk" -lt "$required" ]; then
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
echo "Please free up some space, or expand your disk, before continuing."
echo ''
echo 'To avoid upgrading change "templates/postgres.15.template.yml" TO "templates/postgres.template.yml" in containers/app.yml'
exit 1
echo
echo -------------------------------------------------------------------------------------
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
echo "Please free up some space, or expand your disk, before continuing."
echo
echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.13.template.yml" in containers/app.yml'
echo
echo 'You can run "./launcher start app" to restart your app in the meanwhile.'
echo -------------------------------------------------------------------------------------
exit 1
fi
if [ -d /shared/postgres_data_old ]; then
@ -119,8 +125,10 @@ run:
echo -------------------------------------------------------------------------------------
echo UPGRADE OF POSTGRES FAILED
echo
echo You can run "./launcher start app" to restart your app in the meanwhile
echo Please visit https://meta.discourse.org/t/postgresql-15-update/349515 for support.
echo
echo You can run "./launcher start app" to restart your app in the meanwhile
echo -------------------------------------------------------------------------------------
exit 1
fi
@ -207,18 +215,6 @@ run:
from: /^host.*all.*all.*::1\/128.*$/
to: "host all all ::/0 md5"
# allow replication to connect in with md5/scram auth
- replace:
filename: "/etc/postgresql/15/main/pg_hba.conf"
from: /^host.*replication.*all.*127.*$/
to: "host replication all 0.0.0.0/0 md5"
# allow replication to connect in with md5/scram auth (IPv6)
- replace:
filename: "/etc/postgresql/15/main/pg_hba.conf"
from: /^host.*replication.*all.*::1\/128.*$/
to: "host replication all ::/0 md5"
- exec:
tag: db
cmd: |

View file

@ -17,7 +17,7 @@ hooks:
to: sv start postgres || exit 1
run:
- exec: apt-get remove -y postgresql-10 postgresql-client-10 postgresql-contrib-10
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15
- exec: apt-get update && apt-get install -y postgresql-9.5 postgresql-client-9.5 postgresql-contrib-9.5
- exec: mkdir -p /shared/postgres_run
- exec: chown postgres:postgres /shared/postgres_run
@ -141,6 +141,7 @@ run:
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
- exec: su postgres -c 'psql $db_name -c "create extension if not exists unaccent;"'
- exec:
stdin: |
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');

View file

@ -28,7 +28,7 @@ run:
contents: |
#!/bin/sh
exec 2>&1
HOME=/var/lib/postgresql USER=postgres exec thpoff chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
HOME=/var/lib/postgresql USER=postgres exec thpoff chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
- file:
path: /etc/service/postgres/log/run
@ -62,15 +62,18 @@ run:
fi
rm -fr /shared/postgres_run/.s*
rm -fr /shared/postgres_run/*.pid
mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
chown -R root /var/lib/postgresql/13/main
[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /var/run/postgresql
if [ -f /root/upgrade_postgres ]; then
/root/upgrade_postgres
rm /root/upgrade_postgres
mkdir -p /shared/postgres_run/15-main.pg_stat_tmp
chown postgres:postgres /shared/postgres_run/15-main.pg_stat_tmp
chown -R root /var/lib/postgresql/15/main
if [ ! -e /shared/postgres_data ]; then
install -d -m 0755 -o postgres -g postgres /shared/postgres_data
sudo -E -u postgres /usr/lib/postgresql/15/bin/initdb -D /shared/postgres_data
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /var/run/postgresql
elif [ -f /root/upgrade_postgres ]; then
unset RETCODE
/root/upgrade_postgres || RETCODE=$?
[ -z "${RETCODE}" ] && rm /root/upgrade_postgres || exit $RETCODE
fi
# Necessary to enable backups
install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
@ -82,17 +85,22 @@ run:
#!/bin/bash
PG_MAJOR_OLD=`cat /shared/postgres_data/PG_VERSION`
if [ ! "13" = "$PG_MAJOR_OLD" ]; then
echo Upgrading PostgreSQL from version ${PG_MAJOR_OLD} to 13
if [ ! "15" = "$PG_MAJOR_OLD" ]; then
echo Upgrading PostgreSQL from version ${PG_MAJOR_OLD} to 15
free_disk=$(df -P -B1 /shared | tail -n 1 | awk '{print $4}')
required=$(($(du -sb /shared/postgres_data | awk '{print $1}') * 2))
if [ "$free_disk" -lt "$required" ]; then
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
echo "Please free up some space, or expand your disk, before continuing."
echo ''
echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.12.template.yml" in containers/app.yml'
exit 1
echo
echo -------------------------------------------------------------------------------------
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
echo "Please free up some space, or expand your disk, before continuing."
echo
echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.13.template.yml" in containers/app.yml'
echo
echo 'You can run "./launcher start app" to restart your app in the meanwhile.'
echo -------------------------------------------------------------------------------------
exit 1
fi
if [ -d /shared/postgres_data_old ]; then
@ -100,10 +108,10 @@ run:
fi
rm -fr /shared/postgres_data_new
install -d -m 0755 -o postgres -g postgres /shared/postgres_data_new && sudo -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data_new || exit 0
install -d -m 0755 -o postgres -g postgres /shared/postgres_data_new && sudo -u postgres /usr/lib/postgresql/15/bin/initdb -D /shared/postgres_data_new || exit 0
apt-get update
apt-get install -y postgresql-${PG_MAJOR_OLD}
chown -R postgres:postgres /var/lib/postgresql/13
chown -R postgres:postgres /var/lib/postgresql/15
/etc/init.d/postgresql stop
rm -fr /shared/postgres_data/postmaster.pid
cd ~postgres
@ -111,16 +119,16 @@ run:
echo >> /shared/postgres_data/postgresql.conf
echo "data_directory = '/shared/postgres_data'" >> /shared/postgres_data/postgresql.conf
SUCCESS=true
sudo -u postgres /usr/lib/postgresql/13/bin/pg_upgrade -d /shared/postgres_data -D /shared/postgres_data_new -b /usr/lib/postgresql/${PG_MAJOR_OLD}/bin -B /usr/lib/postgresql/13/bin || SUCCESS=false
sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade -d /shared/postgres_data -D /shared/postgres_data_new -b /usr/lib/postgresql/${PG_MAJOR_OLD}/bin -B /usr/lib/postgresql/15/bin || SUCCESS=false
if [[ "$SUCCESS" == 'false' ]]; then
echo -------------------------------------------------------------------------------------
echo UPGRADE OF POSTGRES FAILED
echo
echo Please visit https://meta.discourse.org/t/postgresql-13-update/172563 for support.
echo Please visit https://meta.discourse.org/t/postgresql-15-update/349515 for support.
echo
echo You can run "./launcher start app" to restart your app in the meanwhile
echo
echo -------------------------------------------------------------------------------------
exit 1
fi
@ -141,69 +149,69 @@ run:
fi
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
from: "data_directory = '/var/lib/postgresql/13/main'"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: "data_directory = '/var/lib/postgresql/15/main'"
to: "data_directory = '/shared/postgres_data'"
# listen on all interfaces
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?listen_addresses *=.*/
to: "listen_addresses = '*'"
# sync commit off is faster and less spiky, also marginally less safe
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?synchronous_commit *=.*/
to: "synchronous_commit = $db_synchronous_commit"
# default is 128MB which is way too small
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?shared_buffers *=.*/
to: "shared_buffers = $db_shared_buffers"
# default is 1MB which is too small
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?work_mem *=.*/
to: "work_mem = $db_work_mem"
# allow for other
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?default_text_search_config *=.*/
to: "default_text_search_config = '$db_default_text_search_config'"
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?checkpoint_segments *=.*/
to: "checkpoint_segments = $db_checkpoint_segments"
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?logging_collector *=.*/
to: "logging_collector = $db_logging_collector"
- replace:
filename: "/etc/postgresql/13/main/postgresql.conf"
filename: "/etc/postgresql/15/main/postgresql.conf"
from: /#?log_min_duration_statement *=.*/
to: "log_min_duration_statement = $db_log_min_duration_statement"
- replace:
filename: "/etc/postgresql/13/main/pg_hba.conf"
filename: "/etc/postgresql/15/main/pg_hba.conf"
from: /^#local +replication +postgres +peer$/
to: "local replication postgres peer"
# allow all to connect in with md5 auth
# allow all to connect in with md5/scram auth
- replace:
filename: "/etc/postgresql/13/main/pg_hba.conf"
filename: "/etc/postgresql/15/main/pg_hba.conf"
from: /^host.*all.*all.*127.*$/
to: "host all all 0.0.0.0/0 md5"
# allow all to connect in with md5 auth (IPv6)
# allow all to connect in with md5/scram auth (IPv6)
- replace:
filename: "/etc/postgresql/13/main/pg_hba.conf"
filename: "/etc/postgresql/15/main/pg_hba.conf"
from: /^host.*all.*all.*::1\/128.*$/
to: "host all all ::/0 md5"
@ -221,7 +229,7 @@ run:
background: true
# use fast shutdown for pg
stop_signal: INT
cmd: HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
cmd: HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
- file:
path: /usr/local/bin/create_db