Skip to content

Commit 5a8fcd6

Browse files
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 * 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
1 parent d4ebd31 commit 5a8fcd6

File tree

8 files changed

+143
-169
lines changed

8 files changed

+143
-169
lines changed

image/base/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ RUN /tmp/install-imagemagick
2020
FROM discourse/ruby:3.3.6-${DEBIAN_RELEASE}-slim AS discourse_dependencies
2121

2222
ARG DEBIAN_RELEASE
23-
ENV PG_MAJOR=13 \
23+
ENV PG_MAJOR=15 \
2424
RUBY_ALLOCATOR=/usr/lib/libjemalloc.so \
2525
LEFTHOOK=0 \
2626
DEBIAN_RELEASE=${DEBIAN_RELEASE}

launcher

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ kernel_min_version='4.4.0'
9292
config_file=containers/"$config".yml
9393
cidbootstrap=cids/"$config"_bootstrap.cid
9494
local_discourse=local_discourse
95+
# TODO: replace base image before merging
9596
image="discourse/base:2.0.20250105-0017"
9697
docker_path=`which docker.io 2> /dev/null || which docker`
9798
git_path=`which git`

templates/postgres.10.template.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ hooks:
1717
to: sv start postgres || exit 1
1818

1919
run:
20-
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-13 postgresql-client-13 postgresql-contrib-13
20+
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15
2121
- exec: apt-get update && apt-get install -y postgresql-10 postgresql-client-10 postgresql-contrib-10
2222
- exec: mkdir -p /shared/postgres_run
2323
- exec: chown postgres:postgres /shared/postgres_run
@@ -141,6 +141,7 @@ run:
141141
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
142142
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
143143
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
144+
- exec: su postgres -c 'psql $db_name -c "create extension if not exists unaccent;"'
144145
- exec:
145146
stdin: |
146147
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');

templates/postgres.12.template.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ hooks:
1717
to: sv start postgres || exit 1
1818

1919
run:
20-
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-13 postgresql-client-13 postgresql-contrib-13
20+
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15
2121
- exec: apt-get update && apt-get install -y postgresql-12 postgresql-client-12 postgresql-contrib-12
2222
- exec: mkdir -p /shared/postgres_run
2323
- exec: chown postgres:postgres /shared/postgres_run
@@ -140,6 +140,7 @@ run:
140140
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
141141
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
142142
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
143+
- exec: su postgres -c 'psql $db_name -c "create extension if not exists unaccent;"'
143144
- exec:
144145
stdin: |
145146
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');

templates/postgres.13.template.yml

Lines changed: 66 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,16 @@ hooks:
1414
- replace:
1515
filename: /etc/service/unicorn/run
1616
from: "# postgres"
17-
to: sv start postgres || exit 1
17+
to: |
18+
if [ -f /root/install_postgres ]; then
19+
/root/install_postgres
20+
rm /root/install_postgres
21+
fi
22+
sv start postgres || exit 1
1823
1924
run:
20-
- exec: sed -i "s/^# $LANG/$LANG/" /etc/locale.gen
21-
- exec: locale-gen && update-locale
22-
- exec: mkdir -p /shared/postgres_run
23-
- exec: chown postgres:postgres /shared/postgres_run
24-
- exec: chmod 775 /shared/postgres_run
25-
- exec: rm -fr /var/run/postgresql
26-
- exec: ln -s /shared/postgres_run /var/run/postgresql
27-
- exec: socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
28-
- exec: rm -fr /shared/postgres_run/.s*
29-
- exec: rm -fr /shared/postgres_run/*.pid
30-
- exec: mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
31-
- exec: chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
25+
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector
26+
- exec: apt-get update && apt-get install -y postgresql-13 postgresql-client-13 postgresql-contrib-13 postgresql-13-pgvector
3227
- file:
3328
path: /etc/service/postgres/run
3429
chmod: "+x"
@@ -53,79 +48,30 @@ run:
5348
sv stop postgres
5449
5550
- file:
56-
path: /root/upgrade_postgres
57-
chmod: "+x"
58-
contents: |
59-
#!/bin/bash
60-
PG_MAJOR_OLD=`cat /shared/postgres_data/PG_VERSION`
61-
62-
if [ ! "13" = "$PG_MAJOR_OLD" ]; then
63-
echo Upgrading PostgreSQL from version ${PG_MAJOR_OLD} to 13
64-
free_disk=$(df -P -B1 /shared | tail -n 1 | awk '{print $4}')
65-
required=$(($(du -sb /shared/postgres_data | awk '{print $1}') * 2))
66-
67-
if [ "$free_disk" -lt "$required" ]; then
68-
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
69-
echo "Please free up some space, or expand your disk, before continuing."
70-
echo ''
71-
echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.12.template.yml" in containers/app.yml'
72-
exit 1
73-
fi
74-
75-
if [ -d /shared/postgres_data_old ]; then
76-
mv /shared/postgres_data_old /shared/postgres_data_older
77-
fi
78-
79-
rm -fr /shared/postgres_data_new
80-
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
81-
apt-get update
82-
apt-get install -y postgresql-${PG_MAJOR_OLD}
83-
chown -R postgres:postgres /var/lib/postgresql/13
84-
/etc/init.d/postgresql stop
85-
rm -fr /shared/postgres_data/postmaster.pid
86-
cd ~postgres
87-
cp -pr /etc/postgresql/${PG_MAJOR_OLD}/main/* /shared/postgres_data
88-
echo >> /shared/postgres_data/postgresql.conf
89-
echo "data_directory = '/shared/postgres_data'" >> /shared/postgres_data/postgresql.conf
90-
SUCCESS=true
91-
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
92-
93-
if [[ "$SUCCESS" == 'false' ]]; then
94-
echo -------------------------------------------------------------------------------------
95-
echo UPGRADE OF POSTGRES FAILED
96-
echo
97-
echo Please visit https://meta.discourse.org/t/postgresql-13-update/172563 for support.
98-
echo
99-
echo You can run "./launcher start app" to restart your app in the meanwhile
100-
echo
101-
exit 1
102-
fi
103-
104-
mv /shared/postgres_data /shared/postgres_data_old
105-
mv /shared/postgres_data_new /shared/postgres_data
106-
107-
echo -------------------------------------------------------------------------------------
108-
echo UPGRADE OF POSTGRES COMPLETE
109-
echo
110-
echo Old ${PG_MAJOR_OLD} database is stored at /shared/postgres_data_old
111-
echo
112-
echo To complete the upgrade, rebuild again using:
113-
echo
114-
echo ./launcher rebuild app
115-
echo -------------------------------------------------------------------------------------
116-
# Magic exit status to denote no failure
117-
exit 77
118-
fi
119-
120-
- exec:
121-
cmd:
122-
- chown -R root /var/lib/postgresql/13/main
123-
- "[ ! -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"
124-
- chown -R postgres:postgres /shared/postgres_data
125-
- chown -R postgres:postgres /var/run/postgresql
126-
127-
- exec: /root/upgrade_postgres
128-
- exec: rm /root/upgrade_postgres
51+
path: /root/install_postgres
52+
chmod: "+x"
53+
contents: |
54+
#!/bin/bash -x
55+
sed -i "s/^# $LANG/$LANG/" /etc/locale.gen
56+
locale-gen && update-locale
57+
mkdir -p /shared/postgres_run
58+
chown postgres:postgres /shared/postgres_run
59+
chmod 775 /shared/postgres_run
60+
rm -fr /var/run/postgresql
61+
ln -s /shared/postgres_run /var/run/postgresql
62+
if [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
63+
socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
64+
fi
65+
rm -fr /shared/postgres_run/.s*
66+
rm -fr /shared/postgres_run/*.pid
67+
mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
68+
chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
69+
chown -R root /var/lib/postgresql/13/main
70+
[ ! -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
71+
chown -R postgres:postgres /shared/postgres_data
72+
chown -R postgres:postgres /var/run/postgresql
73+
# Necessary to enable backups
74+
install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
12975
13076
- replace:
13177
filename: "/etc/postgresql/13/main/postgresql.conf"
@@ -162,11 +108,6 @@ run:
162108
from: /#?default_text_search_config *=.*/
163109
to: "default_text_search_config = '$db_default_text_search_config'"
164110

165-
# Necessary to enable backups
166-
- exec:
167-
cmd:
168-
- install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
169-
170111
- replace:
171112
filename: "/etc/postgresql/13/main/postgresql.conf"
172113
from: /#?checkpoint_segments *=.*/
@@ -200,29 +141,39 @@ run:
200141
to: "host all all ::/0 md5"
201142

202143
- exec:
144+
tag: db
145+
cmd: |
146+
if [ -f /root/install_postgres ]; then
147+
/root/install_postgres && rm -f /root/install_postgres
148+
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
149+
socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
150+
fi
151+
152+
- exec:
153+
tag: db
203154
background: true
204155
# use fast shutdown for pg
205156
stop_signal: INT
206157
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
207158

208-
# give db a few secs to start up
209-
- exec: "sleep 5"
210-
211-
- exec: su postgres -c 'createdb $db_name' || true
212-
- exec: su postgres -c 'psql $db_name -c "create user $db_user;"' || true
213-
- exec: su postgres -c 'psql $db_name -c "grant all privileges on database $db_name to $db_user;"' || true
214-
- exec: su postgres -c 'psql $db_name -c "alter schema public owner to $db_user;"'
215-
- exec: su postgres -c 'psql template1 -c "create extension if not exists hstore;"'
216-
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
217-
- exec: su postgres -c 'psql template1 -c "create extension if not exists vector;"'
218-
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
219-
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
220-
- exec: su postgres -c 'psql $db_name -c "create extension if not exists vector;"'
221-
- exec:
222-
stdin: |
223-
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');
224-
cmd: sudo -u postgres psql $db_name
225-
raise_on_fail: false
159+
- file:
160+
path: /usr/local/bin/create_db
161+
chmod: +x
162+
contents: |
163+
#!/bin/bash
164+
su postgres -c 'createdb $db_name' || true
165+
su postgres -c 'psql $db_name -c "create user $db_user;"' || true
166+
su postgres -c 'psql $db_name -c "grant all privileges on database $db_name to $db_user;"' || true
167+
su postgres -c 'psql $db_name -c "alter schema public owner to $db_user;"'
168+
su postgres -c 'psql template1 -c "create extension if not exists hstore;"'
169+
su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
170+
su postgres -c 'psql template1 -c "create extension if not exists vector;"'
171+
su postgres -c 'psql template1 -c "alter extension vector update;"' || true
172+
su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
173+
su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
174+
su postgres -c 'psql $db_name -c "create extension if not exists vector;"'
175+
su postgres -c 'psql $db_name -c "alter extension vector update;"' || true
176+
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
226177
227178
- file:
228179
path: /var/lib/postgresql/take-database-backup
@@ -243,5 +194,10 @@ run:
243194
#0 */4 * * * /var/lib/postgresql/take-database-backup
244195
245196
- exec:
197+
tag: db
246198
hook: postgres
247-
cmd: "echo postgres installed!"
199+
cmd:
200+
# give db a few secs to start up
201+
- "sleep 5"
202+
- /usr/local/bin/create_db
203+
- "echo postgres installed!"

templates/postgres.15.template.yml

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ hooks:
2222
sv start postgres || exit 1
2323
2424
run:
25-
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-13 postgresql-client-13 postgresql-contrib-13 postgresql-13-pgvector
26-
- exec: apt-get update && apt-get install -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector
2725
- file:
2826
path: /etc/service/postgres/run
2927
chmod: "+x"
@@ -67,10 +65,12 @@ run:
6765
mkdir -p /shared/postgres_run/15-main.pg_stat_tmp
6866
chown postgres:postgres /shared/postgres_run/15-main.pg_stat_tmp
6967
chown -R root /var/lib/postgresql/15/main
70-
[ ! -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
71-
chown -R postgres:postgres /shared/postgres_data
72-
chown -R postgres:postgres /var/run/postgresql
73-
if [ -f /root/upgrade_postgres ]; then
68+
if [ ! -e /shared/postgres_data ]; then
69+
install -d -m 0755 -o postgres -g postgres /shared/postgres_data
70+
sudo -E -u postgres /usr/lib/postgresql/15/bin/initdb -D /shared/postgres_data
71+
chown -R postgres:postgres /shared/postgres_data
72+
chown -R postgres:postgres /var/run/postgresql
73+
elif [ -f /root/upgrade_postgres ]; then
7474
/root/upgrade_postgres
7575
rm /root/upgrade_postgres
7676
fi
@@ -90,11 +90,13 @@ run:
9090
required=$(($(du -sb /shared/postgres_data | awk '{print $1}') * 2))
9191
9292
if [ "$free_disk" -lt "$required" ]; then
93-
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
94-
echo "Please free up some space, or expand your disk, before continuing."
95-
echo ''
96-
echo 'To avoid upgrading change "templates/postgres.15.template.yml" TO "templates/postgres.template.yml" in containers/app.yml'
97-
exit 1
93+
echo
94+
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
95+
echo "Please free up some space, or expand your disk, before continuing."
96+
echo
97+
echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.13.template.yml" in containers/app.yml'
98+
echo 'You can run "./launcher start app" to restart your app in the meanwhile.'
99+
exit 1
98100
fi
99101
100102
if [ -d /shared/postgres_data_old ]; then
@@ -119,8 +121,11 @@ run:
119121
echo -------------------------------------------------------------------------------------
120122
echo UPGRADE OF POSTGRES FAILED
121123
echo
122-
echo You can run "./launcher start app" to restart your app in the meanwhile
124+
# TODO: Change meta URL for PostgreSQL 15 topic
125+
echo Please visit https://meta.discourse.org/t/postgresql-13-update/172563 for support.
123126
echo
127+
echo You can run "./launcher start app" to restart your app in the meanwhile
128+
echo -------------------------------------------------------------------------------------
124129
exit 1
125130
fi
126131
@@ -131,10 +136,6 @@ run:
131136
echo UPGRADE OF POSTGRES COMPLETE
132137
echo
133138
echo Old ${PG_MAJOR_OLD} database is stored at /shared/postgres_data_old
134-
echo
135-
echo To complete the upgrade, rebuild again using:
136-
echo
137-
echo ./launcher rebuild app
138139
echo -------------------------------------------------------------------------------------
139140
# Magic exit status to denote no failure
140141
exit 77

templates/postgres.9.5.template.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ hooks:
1717
to: sv start postgres || exit 1
1818

1919
run:
20-
- exec: apt-get remove -y postgresql-10 postgresql-client-10 postgresql-contrib-10
20+
- exec: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15
2121
- exec: apt-get update && apt-get install -y postgresql-9.5 postgresql-client-9.5 postgresql-contrib-9.5
2222
- exec: mkdir -p /shared/postgres_run
2323
- exec: chown postgres:postgres /shared/postgres_run
@@ -141,6 +141,7 @@ run:
141141
- exec: su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
142142
- exec: su postgres -c 'psql $db_name -c "create extension if not exists hstore;"'
143143
- exec: su postgres -c 'psql $db_name -c "create extension if not exists pg_trgm;"'
144+
- exec: su postgres -c 'psql $db_name -c "create extension if not exists unaccent;"'
144145
- exec:
145146
stdin: |
146147
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = '$db_name' AND encoding = pg_char_to_encoding('SQL_ASCII');

0 commit comments

Comments
 (0)