2 db_synchronous_commit: "off"
3 db_shared_buffers: "256MB"
5 db_default_text_search_config: "pg_catalog.english"
10 filename: /etc/service/unicorn/run
12 to: sv start postgres || exit 1
15 - exec: mkdir -p /shared/postgres_run
16 - exec: chown postgres:postgres /shared/postgres_run
17 - exec: chmod 775 /shared/postgres_run
18 - exec: rm -fr /var/run/postgresql
19 - exec: ln -s /shared/postgres_run /var/run/postgresql
20 - exec: socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
21 - exec: rm -fr /shared/postgres_run/.s*
22 - exec: rm -fr /shared/postgres_run/*.pid
24 path: /etc/service/postgres/run
29 exec su - postgres -c '/usr/lib/postgresql/9.3/bin/postmaster -D /etc/postgresql/9.3/main'
31 path: /root/upgrade_postgres
35 if [ "9.2" = `cat /shared/postgres_data/PG_VERSION` ]; then
36 echo Upgrading PostgreSQL to from version 9.2 to 9.3
37 rm -fr /shared/postgres_data_new
38 install -d -m 0755 -o postgres -g postgres /shared/postgres_data_new && sudo -u postgres /usr/lib/postgresql/9.3/bin/initdb -D /shared/postgres_data_new || exit 0
40 apt-get install -y postgresql-9.2
41 /etc/init.d/postgresql stop
42 rm -fr /shared/postgres_data/postmaster.pid
44 cp /etc/postgresql/9.2/main/*.conf /shared/postgres_data
45 echo >> /shared/postgres_data/postgresql.conf
46 echo "data_directory = '/shared/postgres_data'" >> /shared/postgres_data/postgresql.conf
48 sudo -u postgres /usr/lib/postgresql/9.3/bin/pg_upgrade -d /shared/postgres_data -D /shared/postgres_data_new -b /usr/lib/postgresql/9.2/bin -B /usr/lib/postgresql/9.3/bin || SUCCESS=false
50 if [[ "$SUCCESS" == 'false' ]]; then
51 echo -------------------------------------------------------------------------------------
52 echo UPGRADE OF POSTGRES FAILED
54 echo You are going to need to export your data and import into a clean instance:
56 echo Add the line: 'base_image: "samsaffron/discourse:0.1.1"'
57 echo Change: "templates/postgres.template.yml TO templates/postgres.9.2.template.yml"
59 echo Run "./launcher bootstrap" again
61 echo When your instance is running:
62 echo - Go to the admin UI, enable readonly and backup your site
64 echo Then destroy your container "./launcher destroy standalone"
65 echo Undo the base_image and postgres.9.2 template from your container config
66 echo Run: "sudo mv /var/docker/shared/postgres_data /var/shared/postgres_data_old"
67 echo Run: "./launcher bootstrap"
69 echo "Login to the blank site, and import your backup (remember to set the allow_restore site setting)"
70 echo Restart your container: "./launcher restart"
71 echo -------------------------------------------------------------------------------------
75 mv /shared/postgres_data /shared/postgres_data_old
76 mv /shared/postgres_data_new /shared/postgres_data
78 echo -------------------------------------------------------------------------------------
79 echo UPGRADE OF POSTGRES COMPLETE
81 echo Old 9.2 database is stored at /shared/postgres_data_old
83 echo Please run "./launcher bootstrap" again
84 echo -------------------------------------------------------------------------------------
89 - chown -R root /var/lib/postgresql/9.3/main
90 - "[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/9.3/bin/initdb -D /shared/postgres_data || exit 0"
91 - chown -R postgres:postgres /shared/postgres_data
92 - chown -R postgres:postgres /var/run/postgresql
94 - exec: /root/upgrade_postgres
95 - exec: rm /root/upgrade_postgres
98 filename: "/etc/postgresql/9.3/main/postgresql.conf"
99 from: "data_directory = '/var/lib/postgresql/9.3/main'"
100 to: "data_directory = '/shared/postgres_data'"
102 # listen on all interfaces
104 filename: "/etc/postgresql/9.3/main/postgresql.conf"
105 from: /#?listen_addresses *=.*/
106 to: "listen_addresses = '*'"
108 # listen on all interfaces
110 filename: "/etc/postgresql/9.3/main/postgresql.conf"
111 from: /#?listen_addresses *=.*/
112 to: "listen_addresses = '*'"
114 # sync commit off is faster and less spiky, also marginally less safe
116 filename: "/etc/postgresql/9.3/main/postgresql.conf"
117 from: /#?synchronous_commit *=.*/
118 to: "synchronous_commit = $db_synchronous_commit"
120 # default is 128MB which is way too small
122 filename: "/etc/postgresql/9.3/main/postgresql.conf"
123 from: /#?shared_buffers *=.*/
124 to: "shared_buffers = $db_shared_buffers"
126 # default is 1MB which is too small
128 filename: "/etc/postgresql/9.3/main/postgresql.conf"
129 from: /#?work_mem *=.*/
130 to: "work_mem = $db_work_mem"
134 filename: "/etc/postgresql/9.3/main/postgresql.conf"
135 from: /#?default_text_search_config *=.*/
136 to: "default_text_search_config = '$db_default_text_search_config'"
138 # Necessary to enable backups
141 - install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
144 filename: "/etc/postgresql/9.3/main/postgresql.conf"
145 from: /#?max_wal_senders *=.*/
146 to: "max_wal_senders = 4"
149 filename: "/etc/postgresql/9.3/main/postgresql.conf"
150 from: /#?wal_level *=.*/
151 to: "wal_level = hot_standby"
154 filename: "/etc/postgresql/9.3/main/pg_hba.conf"
155 from: /^#local +replication +postgres +peer$/
156 to: "local replication postgres peer"
158 # allow all to connect in with md5 auth
160 filename: "/etc/postgresql/9.3/main/pg_hba.conf"
161 from: /^host.*all.*all.*127.*$/
162 to: "host all all 0.0.0.0/0 md5"
166 cmd: su - postgres -c '/usr/lib/postgresql/9.3/bin/postmaster -D /etc/postgresql/9.3/main'
168 # give db a few secs to start up
171 - exec: su postgres -c 'createdb discourse' || true
172 - exec: su postgres -c 'psql discourse -c "create user discourse;"' || true
173 - exec: su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
174 - exec: su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
175 - exec: su postgres -c 'psql discourse -c "create extension if not exists hstore;"'
176 - exec: su postgres -c 'psql discourse -c "create extension if not exists pg_trgm;"'
179 path: /var/lib/postgresql/take-database-backup
180 chown: postgres:postgres
185 FILENAME=/shared/postgres_backup/$ID.tar.gz
186 pg_basebackup --format=tar --pgdata=- --xlog --gzip --label=$ID > $FILENAME
190 path: /var/spool/cron/crontabs/postgres
192 # m h dom mon dow command
194 #0 */4 * * * /var/lib/postgresql/take-database-backup
198 cmd: "echo postgres installed!"