@@ -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
1924run :
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"
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!"
0 commit comments