-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
80 lines (67 loc) · 2.33 KB
/
Makefile
File metadata and controls
80 lines (67 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
## dcape-app-pg-backup Makefile:
## Backup pg databases via docker container with crond
#:
SHELL = /bin/sh
CFG ?= .env
#- Enable work
BACKUP_ENABLED ?= no
#- DB names
DB_NAME ?= template1
#- Cron rules
BACKUP_CRON ?= 10 5 * * *
#- cron period (15min|daily|hourly|monthly|weekly)
BACKUP_PERIOD ?= daily
#- project name
APP_TAG ?= pg-backup
#- app root
APP_ROOT ?= $(PWD)
#- db container
DB_CONTAINER ?= #
PERSIST_FILES = Makefile pgbackup.sh
USE_DCAPE_DC := no
# ------------------------------------------------------------------------------
# Create script
# DCAPE_DB_DUMP_DEST must be set in pg container
define EXP_SCRIPT
[ "$$DCAPE_DB_DUMP_DEST" ] || { echo "DCAPE_DB_DUMP_DEST not set. Exiting" ; exit 1 ; } ; \
DBS=$$@ ; \
[[ "$$DBS" ]] || DBS=all ; \
dt=$$(date +%y%m%d) ; \
if [[ $$DBS == "all" ]] ; then \
echo "Exporting all databases..." ; \
DBS=$$(psql --tuples-only -P format=unaligned -U postgres \
-c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'") ; \
fi ; \
echo "Backup DBs: $$DBS" ; \
for d in $$DBS ; do \
dest=$$DCAPE_DB_DUMP_DEST/$${d%%.*}-$${dt}.tgz ; \
echo -n $${dest}... ; \
[ -f $$dest ] && { echo Skip ; continue ; } ; \
pg_dump -d $$d -U postgres -Ft | gzip > $$dest || echo "error" ; \
echo Done ; \
done
endef
export EXP_SCRIPT
# ------------------------------------------------------------------------------
-include $(CFG)
export
# ------------------------------------------------------------------------------
# Find and include DCAPE_ROOT/Makefile
#- dcape compose docker image
DCAPE_COMPOSE ?= dcape-compose
DCAPE_ROOT ?= $(shell docker inspect -f "{{.Config.Labels.dcape_root}}" $(DCAPE_COMPOSE))
ifeq ($(shell test -e $(DCAPE_ROOT)/Makefile.app && echo -n yes),yes)
include $(DCAPE_ROOT)/Makefile.app
else
include /opt/dcape/Makefile.app
endif
# ------------------------------------------------------------------------------
## DB operations
#:
.PHONY: backup
## dump all databases or named database
backup: docker-wait
@echo "*** $@ ***"
@if [ "$$BACKUP_ENABLED" = "yes" ] ; then echo "$$EXP_SCRIPT" | docker exec -i $$DB_CONTAINER bash -s - $$DB_NAME ; else echo Disabled ; fi
# -----------------------------------------------------------------------------
# echo "$$BACKUP_CRON make backup" > /etc/crontabs/root