diff --git a/scripts/backup-init.sh b/scripts/backup-init.sh index a4b6625c1b49ebfb55854753f9550183fd361400..f842e6cb285973910b0e3014919389a0cc0160f3 100755 --- a/scripts/backup-init.sh +++ b/scripts/backup-init.sh @@ -3,18 +3,22 @@ BACKUP_DESTINATION=`cat /data/BACKUP_DESTINATION` echo "Intitializing backups with $BACKUP_DESTINATION" -if [ ! -d /data/domains/$DOMAIN ]; then - ssh $BACKUP_DESTINATION " \ - if [ ! -d $DOMAIN ]; then \ +if [ ! -d /data/domains/$DOMAIN/.git ]; then + if [ `ssh $BACKUP_DESTINATION "test -d $DOMAIN"; echo $?` -eq 0 ]; then # git repo exists on the backup server + git clone $BACKUP_DESTINATION:$DOMAIN /data/domains/$DOMAIN + cd /data/domains/$DOMAIN + else + ssh $BACKUP_DESTINATION " \ mkdir -p $DOMAIN; \ cd $DOMAIN; \ - git init --bare; \ - else - echo \"Git folder already present\" - fi" - git clone $BACKUP_DESTINATION:$DOMAIN /data/domains/$DOMAIN - cd /data/domains/$DOMAIN + git init --bare;" + if [ ! -d /data/domains/$DOMAIN ]; then + mkdir /data/domains/$DOMAIN + fi + cd /data/domains/$DOMAIN + git init + git remote add origin $BACKUP_DESTINATION:$DOMAIN + fi git config --local user.email "backups@`hostname`" git config --local user.name "`hostname` hourly backups" - git config --local push.default simple fi diff --git a/scripts/import.sh b/scripts/import.sh new file mode 100755 index 0000000000000000000000000000000000000000..c765ec4c8710b8532966a172f2f35c8d9359c9ba --- /dev/null +++ b/scripts/import.sh @@ -0,0 +1,6 @@ +#!/bin/bash -eux + +if [ -d /data/import/$DOMAIN ]; then + cp -r /data/import/$DOMAIN/* /data/domains/$DOMAIN; + rm -rf /data/import/$DOMAIN; +fi diff --git a/scripts/setup.sh b/scripts/setup.sh index d2d0c5ad3a8429089e59f46bd6c507b098b6a76b..eca35146cdb79d8d0ac2954ec8d29590e55bacfc 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -24,8 +24,13 @@ docker pull indiehosters/wordpress cp /data/indiehosters/unit-files/* /etc/systemd/system systemctl daemon-reload -# Configure and start HAproxy +# Create Directory structure +mkdir -p /data/domains +mkdir -p /data/import mkdir -p /data/runtime/haproxy/approved-certs +mkdir -p /data/runtime/postfix + +# Configure and start HAproxy cp /data/indiehosters/scripts/unsecure-certs/indiehosters.dev.pem /data/runtime/haproxy/approved-certs/default.pem systemctl enable haproxy-confd.service systemctl start haproxy-confd.service @@ -33,10 +38,12 @@ systemctl enable haproxy.path systemctl start haproxy.path # Configure and start postfix -mkdir -p /data/runtime/postfix touch /data/runtime/postfix/hostname touch /data/runtime/postfix/destinations touch /data/runtime/postfix/forwards systemctl enable postfix.service systemctl start postfix.service + +# Adds backup ssh key to the list of known hosts +ssh -o StrictHostKeyChecking=no `cat /data/BACKUP_DESTINATION` "exit" diff --git a/unit-files/backup@.service b/unit-files/backup@.service index 14d3408704e3ae559aee831f46a169b6918ea97f..69260b57d95874f815ba9c1af2037882af1fa795 100644 --- a/unit-files/backup@.service +++ b/unit-files/backup@.service @@ -3,29 +3,28 @@ Description=Back up domain data to a git repo and push it out [Service] Type=oneshot -Environment=DOMAIN=%i ExecStartPre=/bin/bash -euxc ' \ - if [ -e /data/domains/$DOMAIN/mysql ]; then \ - echo "Backing up mysql databases for $DOMAIN"; \ + if [ -d /data/domains/%i/mysql ]; then \ + echo "Backing up mysql databases for %i"; \ + mysql_passwd=`cat /data/domains/%i/mysql/.env | cut -d= -f2`; \ /usr/bin/docker run \ - --link mysql-$DOMAIN:db \ - --env-file /data/domains/$DOMAIN/mysql/.env \ + --link mysql-%i:db \ + --env-file /data/domains/%i/mysql/.env \ indiehosters/mysql \ mysqldump \ --all-databases \ --events \ -u admin \ - -p$(cat /data/domains/$DOMAIN/mysql/.env | cut -d'=' -f2) \ - -h db \ - > /data/domains/$DOMAIN/mysql/dump.sql; \ + -p$mysql_passwd \ + -h db > /data/domains/%i/mysql/dump.sql; \ fi' ExecStart=/bin/bash -euxc ' \ echo "Committing everything"; \ - cd /data/domains/$DOMAIN/; \ + cd /data/domains/%i/; \ git add *; \ git status; \ - git commit -m"backup $DOMAIN @ `hostname` - `date`"; \ + git commit --allow-empty -m"backup %i @ `hostname` - `date`"; \ # be careful: hidden sync functionnality; \ git pull --rebase; \ - git push' + git push origin master' diff --git a/unit-files/backup@.timer b/unit-files/backup@.timer index 7a91ced3d66aea734ccf0d0c2e18d7414da22a64..9d875f8e621ecc97c695e7080062ff904b3965af 100644 --- a/unit-files/backup@.timer +++ b/unit-files/backup@.timer @@ -2,7 +2,8 @@ Description=Hourly backup of www and mysql content to a git repo [Timer] -OnUnitActiveSec=1h +OnActiveSec=0 +OnUnitActiveSec=10min [Install] WantedBy=timers.target diff --git a/unit-files/mysql-importer@.service b/unit-files/mysql-importer@.service index 6ee70fdba8f3a80cb2ee0643265798c1fda1e567..bdcee54992b31a78b3c5c3539f3a4968ad810d72 100644 --- a/unit-files/mysql-importer@.service +++ b/unit-files/mysql-importer@.service @@ -11,13 +11,18 @@ BindsTo=mysql@%i.service Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -euxc ' \ - folder=/data/domains/%i/mysql; \ - if [ ! -d $folder ]; then \ - mkdir -p $folder; \ + mysql_folder=/data/domains/%i/mysql; \ + if [ ! -d $mysql_folder ]; then \ + mkdir -p $mysql_folder; \ pass=`echo $RANDOM ${date} | md5sum | base64 | cut -c-10`; \ - echo MYSQL_PASS=$pass > $folder/.env; \ + echo MYSQL_PASS=$pass > $mysql_folder/.env; \ fi; \ - mkdir -p /data/runtime/domains/%i/mysql/db_files' + if [ -f $mysql_folder/dump.sql ]; then \ + echo develop import mysql feature; \ + exit 1; \ + else \ + mkdir -p /data/runtime/domains/%i/mysql/db_files; \ + fi' [Install] WantedBy=mysql@%i.service diff --git a/unit-files/static-git-importer@.service b/unit-files/static-git-importer@.service index 74fbb3b097af18e0ee44cde8650fdb48cd894d2a..9ebdb3d891111538a9eaccf1b9f38bd01920a04f 100644 --- a/unit-files/static-git-importer@.service +++ b/unit-files/static-git-importer@.service @@ -10,18 +10,13 @@ Type=oneshot RemainAfterExit=yes Environment=DOMAIN=%i ExecStartPre=/data/indiehosters/scripts/backup-init.sh +ExecStartPre=/data/indiehosters/scripts/import.sh ExecStart=/bin/bash -euxc ' \ - domain_folder=/data/domains/%i; \ - if [ -f /data/import/%i.pem ]; then \ - mkdir -p $domain_folder/TLS; \ - mv /data/import/%i.pem $domain_folder/TLS; \ - fi; \ - cp $domain_folder/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \ - runtime_folder=/data/runtime/domains/%i/static-git; \ - mkdir -p $runtime_folder; \ - git_folder=$runtime_folder/www-content; \ - if [ ! -d $git_folder/.git ]; then \ - git clone `cat $domain_folder/static-git/GITURL` $git_folder; \ + cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \ + git_folder=/data/runtime/domains/%i/static-git; \ + if [ ! -d $git_folder/www-content/.git ]; then \ + mkdir -p $git_folder; \ + git clone `cat /data/domains/%i/static-git/GITURL` $git_folder/www-content; \ fi;' [Install] diff --git a/unit-files/static-importer@.service b/unit-files/static-importer@.service index d73c59a3f130749a44d74f7da05853ebad8f5a17..ee1b69564e9825ecdc52395f203f045fb72ee94e 100644 --- a/unit-files/static-importer@.service +++ b/unit-files/static-importer@.service @@ -10,17 +10,13 @@ Type=oneshot RemainAfterExit=yes Environment=DOMAIN=%i ExecStartPre=/data/indiehosters/scripts/backup-init.sh +ExecStartPre=/data/indiehosters/scripts/import.sh ExecStart=/bin/bash -euxc ' \ - domain_folder=/data/domains/%i; \ - if [ -f /data/import/%i.pem ]; then \ - mkdir -p $domain_folder/TLS; \ - mv /data/import/%i.pem $domain_folder/TLS; \ - fi; \ - cp $domain_folder/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \ - folder=$domain_folder/static/www-content; \ - mkdir -p $folder; \ - if [ ! -f $folder/index.html ]; then \ - echo Hello %i > $folder/index.html; \ + cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \ + static_folder=/data/domains/%i/static/www-content; \ + if [ ! -f $static_folder/index.html ]; then \ + mkdir -p $static_folder; \ + echo Hello %i > $static_folder/index.html; \ fi;' [Install] diff --git a/unit-files/wordpress-importer@.service b/unit-files/wordpress-importer@.service index 29b38e873d7f31c0193017ab21824d5a3b0a70d4..98166d378f9a2affcbff6d5987763222d66ea8f1 100644 --- a/unit-files/wordpress-importer@.service +++ b/unit-files/wordpress-importer@.service @@ -14,20 +14,17 @@ Type=oneshot RemainAfterExit=yes Environment=DOMAIN=%i ExecStartPre=/data/indiehosters/scripts/backup-init.sh +ExecStartPre=/data/indiehosters/scripts/import.sh ExecStart=/bin/bash -euxc ' \ - domain_folder=/data/domains/%i; \ - if [ -f /data/import/%i.pem ]; then \ - mkdir -p $domain_folder/TLS; \ - mv /data/import/%i.pem $domain_folder/TLS; \ - fi; \ - cp $domain_folder/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \ - if [ ! -d $domain_folder/wordpress/wp-content ]; then \ - mkdir -p $domain_folder/wordpress/; \ - cd $domain_folder/wordpress/; \ + cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \ + wordpress_folder=/data/domains/%i/wordpress; \ + if [ ! -d $wordpress_folder/wp-content ]; then \ + mkdir -p $wordpress_folder; \ + cd $wordpress_folder; \ tar xvzf /data/indiehosters/blueprints/wordpress.tgz; \ + touch .htaccess; \ fi; \ - cat $domain_folder/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $domain_folder/wordpress/.env' - + cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $wordpress_folder/.env' [Install] WantedBy=wordpress@%i.service diff --git a/unit-files/wordpress@.service b/unit-files/wordpress@.service index 69a61114753143f8899ac46ace0c48593ed28c4c..77dd776f6b3dbc65a1ae03fefa3e8922b6f0c5dc 100644 --- a/unit-files/wordpress@.service +++ b/unit-files/wordpress@.service @@ -22,8 +22,8 @@ ExecStartPre=-/usr/bin/docker rm %p-%i ExecStart=/usr/bin/docker run \ --name %p-%i \ --link mysql-%i:db \ - -v /data/domains/%i/%p/data/wp-content:/app/wp-content \ - -v /data/domains/%i/%p/data/.htaccess:/app/.htaccess \ + -v /data/domains/%i/%p/wp-content:/app/wp-content \ + -v /data/domains/%i/%p/.htaccess:/app/.htaccess \ --env-file /data/domains/%i/%p/.env \ indiehosters/wordpress ExecReload=/usr/bin/docker restart %p-%i