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