diff --git a/software/abilian/extranet_spr/instance-postgres.cfg.in b/software/abilian/extranet_spr/instance-postgres.cfg.in index 74ae5d717a292557de055aa92da165db83690cea..34bab7d1283c8411d1f2e4974f67fc4146659605 100644 --- a/software/abilian/extranet_spr/instance-postgres.cfg.in +++ b/software/abilian/extranet_spr/instance-postgres.cfg.in @@ -28,8 +28,8 @@ superuser = postgres password = $${postgres-passwd:passwd} port = 5432 dbname = db -# pgdata_directory is created by initdb, and should not exist beforehand. -pgdata-directory = $${directories:var}/data +# pgdata-directory is created by initdb, and should not exist beforehand. Mandatory parameter. +pgdata-directory = $${directories:var}/pgdata bin = ${postgresql91:location}/bin services = $${directories:services} @@ -48,6 +48,10 @@ template-postgresql-conf = default_text_search_config = 'pg_catalog.english' unix_socket_directory = '{unix_socket_directory}' unix_socket_permissions = 0700 + # backup + wal_level = hot_standby + max_wal_senders = 2 + template-pg-hba-conf = # This configuration file is generated by a SlapOS instance profile. Manual edits will be overwritten. @@ -57,6 +61,7 @@ template-pg-hba-conf = #do not conflict with other postgres instances on the same node #host all all 127.0.0.1/32 md5 {ipv4_auth} + local replication postgres trust template-hba-ipv4 = host all all {ip}/32 md5 @@ -97,18 +102,95 @@ key = $${slap-connection:key-file} cert = $${slap-connection:cert-file} +#[postgres-backup-sql] +#recipe = slapos.recipe.template:jinja2 +#template = inline: +# #!/bin/bash +# . {{environment}} +# {{postgres_bin}}/pg_dumpall --clean --file=$${directories:backup}/dumpall +# echo "backup done" +#rendered = $${directories:bin}/postgres-backup +#mode = 700 +#context = +# raw environment $${buildout:directory}/environment.sh +# raw postgres_bin $${postgres-instance:bin} + + + +[postgres-status] +recipe = slapos.recipe.template:jinja2 +template = inline: + #!/bin/sh + extranet_part=`pwd | grep -o slappart[0-9+] | tail -1` + /opt/slapos/bin/slapos node supervisorctl --cfg ../../../../etc/slapos.cfg status $extranet_part:postgres-start-on-watch +rendered = $${directories:bin}/postgres-status +mode = 700 + +[postgres-stop] +recipe = slapos.recipe.template:jinja2 +template = inline: + #!/bin/sh + extranet_part=`pwd | grep -o slappart[0-9+] | tail -1` + /opt/slapos/bin/slapos node supervisorctl --cfg ../../../../etc/slapos.cfg stop $extranet_part:postgres-start-on-watch +rendered = $${directories:bin}/postgres-stop +mode = 700 + +[postgres-start] +recipe = slapos.recipe.template:jinja2 +template = inline: + #!/bin/sh + extranet_part=`pwd | grep -o slappart[0-9+] | tail -1` + /opt/slapos/bin/slapos node supervisorctl --cfg ../../../../etc/slapos.cfg start $extranet_part:postgres-start-on-watch +rendered = $${directories:bin}/postgres-start +mode = 700 + + +[postgres-restore] +recipe = slapos.recipe.template:jinja2 +template = inline: + #!/bin/bash + . {{environment}} + # shut down postgres + $${directories:bin}/postgres-stop + # check that postgres is down or refuse to run + $${directories:bin}/postgres-status | grep STOPPED || exit 10 + echo "restoring from {{backup_dir}}" + rm -rf {{pgdata}}/pg_* {{pgdata}}/base {{pgdata}}/global {{pgdata}}/PG_VERSION + cp -a {{backup_dir}}/pg_* {{backup_dir}}/base {{backup_dir}}/global {{backup_dir}}/PG_VERSION {{pgdata}}/ + echo "restore done" + echo "SELECT 1" | postgres --single -D {{pgdata}} {{dbname}} || (rm {{pgdata}}/postmaster.pid; pg_resetxlog -f {{pgdata}}) + for table in blob partenaire contact visite; do + echo "COPY (SELECT COUNT(*) FROM $table) To '{{pgdata}}/$table.count' (format csv, delimiter ';')" | postgres --single -D {{pgdata}} {{dbname}} + done +rendered = $${directories:bin}/postgres-restore +mode = 700 +context = + raw dbname extranet_spr_production + raw environment $${buildout:directory}/environment.sh + raw postgres_bin $${postgres-instance:bin} + raw pgdata $${postgres-instance:pgdata-directory} + raw backup_dir $${directories:backup} + + + [postgres-backup] recipe = slapos.recipe.template:jinja2 template = inline: #!/bin/bash . {{environment}} - {{postgres_bin}}/pg_dumpall --clean --file=$${directories:backup}/dumpall + rm -rf {{backup_dir}} + {{postgres_bin}}/pg_basebackup -D {{backup_dir}} -x -U postgres echo "backup done" rendered = $${directories:bin}/postgres-backup mode = 700 context = raw environment $${buildout:directory}/environment.sh raw postgres_bin $${postgres-instance:bin} + raw backup_dir $${directories:backup} + + + + [cron-postgres-backup] diff --git a/software/abilian/extranet_spr/instance.cfg.in b/software/abilian/extranet_spr/instance.cfg.in index 9d1125165fe814377681c4978ab3fe12d46bd564..a6e56fa464df4df4cdc0c7851594e2d25f5318dd 100644 --- a/software/abilian/extranet_spr/instance.cfg.in +++ b/software/abilian/extranet_spr/instance.cfg.in @@ -26,6 +26,10 @@ parts = redis cron postgres-backup + postgres-restore + postgres-start + postgres-stop + postgres-status cron-postgres-backup diff --git a/software/abilian/extranet_spr/software.cfg b/software/abilian/extranet_spr/software.cfg index 3fab2d04b6c84d9f3f963263cb1b548c70b646ce..64acd2fa5511c9cc6c3785319caf27b960657fb4 100644 --- a/software/abilian/extranet_spr/software.cfg +++ b/software/abilian/extranet_spr/software.cfg @@ -239,14 +239,14 @@ configure-command = recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance.cfg.in output = ${buildout:directory}/instance.cfg -md5sum = 6aaed03a96475027eff404c430d7888f +md5sum = 02e0a25e4ffdb63a18cc29d0c9055919 mode = 0644 [instance-postgres] recipe = slapos.recipe.template url = ${:_profile_base_location_}/instance-postgres.cfg.in output = ${buildout:directory}/instance-postgres.cfg -md5sum = 5fc618f929c9d34cdaca57b17864c611 +md5sum = 16a2d43b29a3c497c03a496f423c1600 mode = 0644 [instance-redis]