7
7
8
8
# Environment variables
9
9
: ${RUNNING_ENV:= ' dev' }
10
- : ${PLATFORM:= ' do' }
11
10
# PostgreSQL
12
11
: ${PGHOST:= ' localhost' }
13
12
: ${PGPORT:= 5432}
@@ -16,18 +15,45 @@ set -e
16
15
: ${PGPASSWORD:= ' postgres' }
17
16
: ${PGDEFAULTDB:= ' postgres' }
18
17
: ${PGSSLMODE:= ' prefer' }
19
- # AWS / DO
20
- : ${AWS_HOST:= ' false' }
21
- : ${AWS_REGION:= ' false' }
22
- : ${AWS_ACCESS_KEY_ID:= ' false' }
23
- : ${AWS_SECRET_ACCESS_KEY:= ' false' }
24
- : ${AWS_BUCKETNAME:= ' false' }
25
- # Azure
26
- : ${AZURE_STORAGE_ACCOUNT_URL:= ' false' }
18
+ # Filestore
19
+ : ${FILESTORE_PLATFORM:= ' aws' }
20
+ # # AWS / DO
21
+ : ${FILESTORE_AWS_HOST:= ' false' }
22
+ : ${FILESTORE_AWS_REGION:= ' false' }
23
+ : ${FILESTORE_AWS_ACCESS_KEY_ID:= ' false' }
24
+ : ${FILESTORE_AWS_SECRET_ACCESS_KEY:= ' false' }
25
+ : ${FILESTORE_AWS_BUCKETNAME:= ' false' }
26
+ # # Azure
27
+ : ${FILESTORE_AZURE_STORAGE_ACCOUNT_URL:= ' false' }
28
+ # BACKUP
29
+ : ${BACKUP_PLATFORM:= ' aws' }
30
+ # # AWS / DO
31
+ : ${BACKUP_AWS_HOST:= ' false' }
32
+ : ${BACKUP_AWS_REGION:= ' false' }
33
+ : ${BACKUP_AWS_ACCESS_KEY_ID:= ' false' }
34
+ : ${BACKUP_AWS_SECRET_ACCESS_KEY:= ' false' }
35
+ : ${BACKUP_AWS_BUCKETNAME:= ' false' }
36
+ # # Azure
37
+ : ${BACKUP_AZURE_STORAGE_ACCOUNT_URL:= ' false' }
38
+ # REMOTE
39
+ : ${REMOTE_ENABLED:= ' false' }
40
+ : ${REMOTE_PLATFORM:= ' aws' }
41
+ # # AWS / DO
42
+ : ${REMOTE_AWS_HOST:= ' false' }
43
+ : ${REMOTE_AWS_REGION:= ' false' }
44
+ : ${REMOTE_AWS_ACCESS_KEY_ID:= ' false' }
45
+ : ${REMOTE_AWS_SECRET_ACCESS_KEY:= ' false' }
46
+ : ${REMOTE_AWS_BUCKETNAME:= ' false' }
47
+ # # Azure
48
+ : ${REMOTE_AZURE_STORAGE_ACCOUNT_URL:= ' false' }
49
+
50
+ export FILESTORE_BUCKET=` echo $FILESTORE_AWS_BUCKETNAME | sed -e " s/{db}/$PGDATABASE /g" `
51
+ export BACKUP_BUCKET=` echo $BACKUP_AWS_BUCKETNAME | sed -e " s/{db}/$PGDATABASE /g" `
52
+ [ " $REMOTE_ENABLED " == " true" ] && export REMOTE_BUCKET=` echo $REMOTE_AWS_BUCKETNAME | sed -e " s/{db}/$PGDATABASE /g" `
27
53
# Date in UTC
28
54
export TODAY=$( date -u +%Y%m%d)
29
55
export YESTERDAY=$( date -d " 1 day ago" -u +%Y%m%d)
30
- export LASTWEEK =$( date -d " 1 week ago" -u +%Y%m%d)
56
+ export LASTMONTH =$( date -d " 1 month ago" -u +%Y%m%d)
31
57
# For dockerize
32
58
export TEMPLATES=/templates
33
59
@@ -36,21 +62,51 @@ function config_rclone() {
36
62
echo " Configure rclone"
37
63
mkdir -p $HOME /.config/rclone
38
64
dockerize -template $TEMPLATES /rclone.conf.tmpl:$HOME /.config/rclone/rclone.conf
39
- case " $PLATFORM " in
65
+ [ " $DEBUG " == " 1" ] && echo " Rclone configuration file:" && cat $HOME /.config/rclone/rclone.conf
66
+ # FILESTORE
67
+ case " $FILESTORE_PLATFORM " in
68
+ " aws" )
69
+ ;;
70
+ " azure" )
71
+ ;;
72
+ " do" )
73
+ export FILESTORE_SPACE=` echo $FILESTORE_AWS_HOST | sed -e " s/.$FILESTORE_AWS_REGION .*$//" `
74
+ ;;
75
+ * )
76
+ echo " I don't know how to configure rclone for $FILESTORE_PLATFORM ."
77
+ exit 1
78
+ ;;
79
+ esac
80
+ # BACKUP
81
+ case " $BACKUP_PLATFORM " in
40
82
" aws" )
41
- export SPACE=" "
42
83
;;
43
84
" azure" )
44
- export SPACE=" "
45
85
;;
46
86
" do" )
47
- export SPACE =` echo $AWS_HOST | sed -e " s/.$AWS_REGION .*$//" `
87
+ export BACKUP_SPACE =` echo $BACKUP_AWS_HOST | sed -e " s/.$BACKUP_AWS_REGION .*$//" `
48
88
;;
49
89
* )
50
- echo " I don't know how to configure rclone for $PLATFORM ."
90
+ echo " I don't know how to configure rclone for $BACKUP_PLATFORM ."
51
91
exit 1
52
92
;;
53
93
esac
94
+ # REMOTE
95
+ if [ " $REMOTE_ENABLED " == " true" ]; then
96
+ case " $REMOTE_PLATFORM " in
97
+ " aws" )
98
+ ;;
99
+ " azure" )
100
+ ;;
101
+ " do" )
102
+ export REMOTE_SPACE=` echo $REMOTE_AWS_HOST | sed -e " s/.$REMOTE_AWS_REGION .*$//" `
103
+ ;;
104
+ * )
105
+ echo " I don't know how to configure rclone for $REMOTE_PLATFORM ."
106
+ exit 1
107
+ ;;
108
+ esac
109
+ fi
54
110
}
55
111
56
112
# Common functions
@@ -62,6 +118,7 @@ function restore_odoo_database() {
62
118
UPDATE ir_cron SET active = 'f';
63
119
UPDATE ir_mail_server SET active = 'f';
64
120
UPDATE fetchmail_server SET active = 'f';
121
+ UPDATE ir_config_parameter SET value = 'null' WHERE key = 'database.uuid';
65
122
" $PGDATABASE
66
123
}
67
124
@@ -71,13 +128,20 @@ function backup() {
71
128
" odoo" )
72
129
echo " Dump the database $PGDATABASE "
73
130
pg_dump --clean $PGDATABASE | gzip > /tmp/$RUNNING_ENV -$PGDATABASE -$TODAY .sql.gz
74
- echo " Push it to the container"
75
- rclone copy /tmp/$RUNNING_ENV -$PGDATABASE -$TODAY .sql.gz remote:/$SPACE /backup/
76
- echo " Duplicate the filestore"
77
- rclone sync remote:/$SPACE /$RUNNING_ENV -$PGDATABASE / remote:/$SPACE /backup/$RUNNING_ENV -$PGDATABASE -$TODAY /
78
- echo " Cleanup last week backup"
79
- rclone purge remote:/$SPACE /backup/$RUNNING_ENV -$PGDATABASE -$LASTWEEK /
80
- rclone purge remote:/$SPACE /backup/$RUNNING_ENV -$PGDATABASE -$LASTWEEK .sql.gz
131
+ echo " Push it to backup"
132
+ rclone copy /tmp/$RUNNING_ENV -$PGDATABASE -$TODAY .sql.gz backup:/$BACKUP_SPACE /$BACKUP_BUCKET /
133
+ echo " Sync the filestore to backup"
134
+ rclone sync filestore:/$FILESTORE_SPACE /$FILESTORE_BUCKET / backup:/$BACKUP_SPACE /$BACKUP_BUCKET /$RUNNING_ENV -$PGDATABASE -$TODAY /
135
+ echo " Cleanup last month copy on backup"
136
+ rclone purge backup:/$BACKUP_SPACE /$BACKUP_BUCKET /$RUNNING_ENV -$PGDATABASE -$LASTMONTH /
137
+ rclone purge backup:/$BACKUP_SPACE /$BACKUP_BUCKET /$RUNNING_ENV -$PGDATABASE -$LASTMONTH .sql.gz
138
+ if [ $REMOTE_ENABLED == ' true' ]; then
139
+ echo " Push, sync and cleanup to/on remote"
140
+ rclone copy /tmp/$RUNNING_ENV -$PGDATABASE -$TODAY .sql.gz remote:/$REMOTE_SPACE /$REMOTE_BUCKET /
141
+ rclone sync filestore:/$FILESTORE_SPACE /$FILESTORE_BUCKET / remote:/$REMOTE_SPACE /$REMOTE_BUCKET /$RUNNING_ENV -$PGDATABASE -$TODAY /
142
+ rclone purge remote:/$REMOTE_SPACE /$REMOTE_BUCKET /$RUNNING_ENV -$PGDATABASE -$LASTMONTH /
143
+ rclone purge remote:/$REMOTE_SPACE /$REMOTE_BUCKET /$RUNNING_ENV -$PGDATABASE -$LASTMONTH .sql.gz
144
+ fi
81
145
;;
82
146
* )
83
147
echo " Backup profile does not exist. I don't know how to backup $1 ."
@@ -93,12 +157,10 @@ function restore() {
93
157
dropdb --if-exists $PGDATABASE
94
158
echo " Create $PGDATABASE database"
95
159
createdb $PGDATABASE
96
- echo " Delete current $PGDATABASE filestore"
97
- rclone purge remote:/$SPACE /$RUNNING_ENV -$PGDATABASE /
98
160
echo " Download yesterday's backup"
99
- rclone copy remote :/$SPACE /backup /production-master-$YESTERDAY .sql.gz /tmp/
100
- echo " Copy the filestore"
101
- rclone sync remote :/$SPACE /backup /production-master-$YESTERDAY / remote :/$SPACE / $RUNNING_ENV - $PGDATABASE /
161
+ rclone copy backup :/$BACKUP_SPACE / $BACKUP_BUCKET /production-master-$YESTERDAY .sql.gz /tmp/
162
+ echo " Sync the filestore"
163
+ rclone sync backup :/$BACKUP_SPACE / $BACKUP_BUCKET /production-master-$YESTERDAY / filestore :/$FILESTORE_SPACE / $FILESTORE_BUCKET /
102
164
echo " Restore database dump"
103
165
restore_odoo_database
104
166
;;
@@ -109,6 +171,8 @@ function restore() {
109
171
esac
110
172
}
111
173
174
+ [ " $DEBUG " == " 1" ] && env | sort
175
+
112
176
config_rclone
113
177
114
178
$1 $2
0 commit comments