Skip to content

Commit a4afec6

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 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
1 parent 92ac6cb commit a4afec6

File tree

11 files changed

+149
-185
lines changed

11 files changed

+149
-185
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ image/squash.tar
1313
image/nsenter/nsenter
1414
image/docker-squash
1515
image/docker-squash.tar.gz
16+
image/discourse_dev/install-rust
1617
image/discourse_dev/postgres.template.yml
1718
image/discourse_dev/redis.template.yml
1819
.gc-state/*

image/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
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.
66

7-
Images and tag names are defined [here](https://github.com/discourse/discourse_docker/blob/master/image/auto_build.rb#L6-L11).
7+
Images and tag names are defined [here](https://github.com/discourse/discourse_docker/blob/main/image/auto_build.rb#L6-L88).
88

99
> **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.
1010

image/base/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ RUN gpg --import /tmp/nginx_public_keys.key &&\
2828
FROM discourse/ruby:3.3.6-${DEBIAN_RELEASE}-slim AS discourse_dependencies
2929

3030
ARG DEBIAN_RELEASE
31-
ARG PG_MAJOR=13
31+
ARG PG_MAJOR=15
3232
ENV PG_MAJOR=${PG_MAJOR} \
3333
RUBY_ALLOCATOR=/usr/lib/libjemalloc.so \
3434
LEFTHOOK=0 \

image/discourse_dev/postgres_dev.template.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
run:
22

33
- replace:
4-
filename: "/etc/postgresql/13/main/postgresql.conf"
5-
from: /#?fullpage_writes *=.*/
6-
to: "fullpage_writes = off"
4+
filename: "/etc/postgresql/15/main/postgresql.conf"
5+
from: /#?full_page_writes *=.*/
6+
to: "full_page_writes = off"
77

88
- replace:
9-
filename: "/etc/postgresql/13/main/postgresql.conf"
9+
filename: "/etc/postgresql/15/main/postgresql.conf"
1010
from: /#?fsync *=.*/
1111
to: "fsync = off"
1212

1313
- exec:
1414
background: true
1515
# use fast shutdown for pg
1616
stop_signal: INT
17-
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
17+
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
1818

1919
- exec:
2020
background: true

launcher

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +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-
image="discourse/base:2.0.20250114-0014"
95+
image="discourse/base:2.0.20250127-0958-pg-15"
9696
docker_path=`which docker.io 2> /dev/null || which docker`
9797
git_path=`which git`
9898

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: 22 additions & 26 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,12 +65,15 @@ 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
74-
/root/upgrade_postgres
75-
rm /root/upgrade_postgres
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
74+
unset RETCODE
75+
/root/upgrade_postgres || RETCODE=$?
76+
[ -z "${RETCODE}" ] && rm /root/upgrade_postgres || exit $RETCODE
7677
fi
7778
# Necessary to enable backups
7879
install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
@@ -90,11 +91,16 @@ run:
9091
required=$(($(du -sb /shared/postgres_data | awk '{print $1}') * 2))
9192
9293
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
94+
echo
95+
echo -------------------------------------------------------------------------------------
96+
echo "WARNING: Upgrading PostgreSQL would require an additional $(numfmt --to=si $(($required - $free_disk))) of disk space"
97+
echo "Please free up some space, or expand your disk, before continuing."
98+
echo
99+
echo 'To avoid upgrading change "templates/postgres.template.yml" TO "templates/postgres.13.template.yml" in containers/app.yml'
100+
echo
101+
echo 'You can run "./launcher start app" to restart your app in the meanwhile.'
102+
echo -------------------------------------------------------------------------------------
103+
exit 1
98104
fi
99105
100106
if [ -d /shared/postgres_data_old ]; then
@@ -119,8 +125,10 @@ run:
119125
echo -------------------------------------------------------------------------------------
120126
echo UPGRADE OF POSTGRES FAILED
121127
echo
122-
echo You can run "./launcher start app" to restart your app in the meanwhile
128+
echo Please visit https://meta.discourse.org/t/postgresql-15-update/349515 for support.
123129
echo
130+
echo You can run "./launcher start app" to restart your app in the meanwhile
131+
echo -------------------------------------------------------------------------------------
124132
exit 1
125133
fi
126134
@@ -207,18 +215,6 @@ run:
207215
from: /^host.*all.*all.*::1\/128.*$/
208216
to: "host all all ::/0 md5"
209217

210-
# allow replication to connect in with md5/scram auth
211-
- replace:
212-
filename: "/etc/postgresql/15/main/pg_hba.conf"
213-
from: /^host.*replication.*all.*127.*$/
214-
to: "host replication all 0.0.0.0/0 md5"
215-
216-
# allow replication to connect in with md5/scram auth (IPv6)
217-
- replace:
218-
filename: "/etc/postgresql/15/main/pg_hba.conf"
219-
from: /^host.*replication.*all.*::1\/128.*$/
220-
to: "host replication all ::/0 md5"
221-
222218
- exec:
223219
tag: db
224220
cmd: |

0 commit comments

Comments
 (0)