From 65093f9d46fd37c86f846ea1306e48ecfd968871 Mon Sep 17 00:00:00 2001 From: Michiel de Jong <michiel@unhosted.org> Date: Tue, 4 Nov 2014 16:04:55 +0000 Subject: [PATCH] merge backups-fixes branch --- doc/deploying-a-server.md | 4 +--- importers/backup-init.sh | 20 ------------------- importers/backup-snapshot.sh | 28 ++++++++++++++++++++------- scripts/backup-init.sh | 36 +++++++++++++++++++++++++++++++++++ unit-files/mysql@.service | 2 -- unit-files/nginx@.service | 1 + unit-files/wordpress@.service | 1 + 7 files changed, 60 insertions(+), 32 deletions(-) delete mode 100755 importers/backup-init.sh create mode 100755 scripts/backup-init.sh diff --git a/doc/deploying-a-server.md b/doc/deploying-a-server.md index 6d47c58..f02af21 100644 --- a/doc/deploying-a-server.md +++ b/doc/deploying-a-server.md @@ -49,9 +49,7 @@ Make sure you read [getting started](getting-started-as-a-hoster.md) first. approved cert into place, start a container running the image requested, update haproxy config, and restart the haproxy container. * set up a git repo for the new site on the backup server (see http://www.git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server again), and for instance if you called the backup repo example.com.git and your backup server is in /etc/hosts on k3 as 'bu25', ssh into k3 and run: - echo "git@bu25:/opt/git/example.com.git" > /data/per-user/example.com/backup/BACKUPDEST - USER=example.com - /data/indiehosters/importers/backup-init.sh + sh scripts/backup-init.sh example.com git@bu25:/opt/git/example.com.git * Test the site using your /etc/hosts. You should see the data from the git repo on both http and https. * Switch DNS and monitoring. diff --git a/importers/backup-init.sh b/importers/backup-init.sh deleted file mode 100755 index 39683e1..0000000 --- a/importers/backup-init.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -eux - -echo initializing backups for $USER -mkdir -p /data/per-user/$USER/backup/mysql -mkdir -p /data/per-user/$USER/backup/www -git config --global user.email "backups@`hostname`" -git config --global user.name "`hostname` hourly backups" -git config --global push.default simple - -cd /data/per-user/$USER/backup/ -git init -echo "backups of $USER at IndieHosters server `hostname`" > README.md -git add README.md -git commit -m"initial commit" - -if [ -e /data/per-user/$USER/backup/BACKUPDEST ]; then - cd /data/per-user/$USER/backup/ - git remote add destination `cat /data/per-user/$USER/backup/BACKUPDEST` - git push -u destination master -fi diff --git a/importers/backup-snapshot.sh b/importers/backup-snapshot.sh index e52aa8b..add4d31 100755 --- a/importers/backup-snapshot.sh +++ b/importers/backup-snapshot.sh @@ -11,18 +11,32 @@ if [ -e /data/per-user/$USER/mysql ]; then -h db > /data/per-user/$USER/backup/mysql/dump.sql fi -if [ -e /data/per-user/$USER/wordpress-subdir ]; then - echo backing up www from wordpress-subdir for $USER - mkdir -p /data/per-user/$USER/backup/www/wordpress-subdir/ - cp /data/per-user/$USER/wordpress-subdir/.env /data/per-user/$USER/backup/www/wordpress-subdir/.env - rsync -r /data/per-user/$USER/wordpress-subdir/data/wp-content /data/per-user/$USER/backup/www/wordpress-subdir/wp-content - if [ -e /data/per-user/$USER/wordpress-subdir/data/GITURL ]; then - cp /data/per-user/$USER/wordpress-subdir/data/GITURL /data/per-user/$USER/backup/www/wordpress-subdir/GITURL +if [ -e /data/per-user/$USER/wordpress ]; then + echo backing up www from wordpress for $USER + mkdir -p /data/per-user/$USER/backup/www/wordpress/ + cp /data/per-user/$USER/wordpress/.env /data/per-user/$USER/backup/www/wordpress/.env + rsync -r /data/per-user/$USER/wordpress/data/wp-content /data/per-user/$USER/backup/www/wordpress/wp-content +fi + +if [ -e /data/per-user/$USER/nginx ]; then + echo backing up www from nginx for $USER + mkdir -p /data/per-user/$USER/backup/www/nginx/ + if [ -e /data/per-user/$USER/nginx/data/GITURL ]; then + cp /data/per-user/$USER/nginx/data/GITURL /data/per-user/$USER/backup/www/nginx/GITURL + else + rsync -r /data/per-user/$USER/nginx/data/www-content /data/per-user/$USER/backup/www/nginx/www-content fi fi +echo copying TLS cert +mkdir -p /data/per-user/$USER/backup/TLS/ +cp /data/server-wide/haproxy/approved-certs/$USER.pem /data/per-user/$USER/backup/TLS/$USER.pem + +echo committing everything cd /data/per-user/$USER/backup/ +pwd git add * +git status git commit -m"backup $USER @ `hostname` - `date`" if [ -e /data/per-user/$USER/backup/BACKUPDEST ]; then git pull --rebase diff --git a/scripts/backup-init.sh b/scripts/backup-init.sh new file mode 100755 index 0000000..b24021b --- /dev/null +++ b/scripts/backup-init.sh @@ -0,0 +1,36 @@ +#!/bin/sh +if [ $# -ge 2 ]; then + USER=$1 + BACKUPDEST=$2 +else + echo "Usage: sh ./scripts/backups-init.sh domain gitrepo" + exit 1 +fi +echo "Adding backup job for $USER to $BACKUPDEST" + +echo "First, trying to clone latest master from $BACKUPDEST" +git clone $BACKUPDEST /data/per-user/$USER/backup + +sudo mkdir -p /data/per-user/$USER/backup +sudo echo "$BACKUPDEST" > /data/per-user/$USER/backup/BACKUPDEST + +echo initializing backups for $USER +mkdir -p /data/per-user/$USER/backup/mysql +mkdir -p /data/per-user/$USER/backup/www +mkdir -p /data/per-user/$USER/backup/TLS +cd /data/per-user/$USER/backup/ +git config --local user.email "backups@`hostname`" +git config --local user.name "`hostname` hourly backups" +git config --local push.default simple + +if [ -e /data/per-user/$USER/backup/.git ]; then + git init +fi +echo "backups of $USER at IndieHosters server `hostname`" > README.md +git add README.md +git commit -m"initial commit" + +echo "Pushing initial commit to $BACKUPDEST master branch" +cd /data/per-user/$USER/backup/ +git remote add destination $BACKUPDEST +git push -u destination master diff --git a/unit-files/mysql@.service b/unit-files/mysql@.service index ec7a927..f1d6da9 100644 --- a/unit-files/mysql@.service +++ b/unit-files/mysql@.service @@ -4,12 +4,10 @@ Description=%p-%i # Requirements Requires=docker.service Requires=%p-importer@%i.service -Requires=%p-dump@%i.timer # Dependency ordering After=docker.service After=%p-importer@%i.service -Before=%p-dump@%i.timer [Service] Restart=always diff --git a/unit-files/nginx@.service b/unit-files/nginx@.service index dcd916b..82bdb9c 100644 --- a/unit-files/nginx@.service +++ b/unit-files/nginx@.service @@ -6,6 +6,7 @@ Requires=docker.service Requires=%p-importer@%i.service Requires=%p-discovery@%i.service Requires=%p-gitpuller@%i.path +Requires=backup@%i.timer # Dependency ordering After=docker.service diff --git a/unit-files/wordpress@.service b/unit-files/wordpress@.service index a17a964..297e883 100644 --- a/unit-files/wordpress@.service +++ b/unit-files/wordpress@.service @@ -7,6 +7,7 @@ Requires=etcd.service Requires=mysql@%i.service Requires=%p-importer@%i.service Requires=%p-discovery@%i.service +Requires=backup@%i.timer # Dependency ordering After=docker.service -- GitLab