From 38d90b1de679743b020f53d02a6e7d35156a05f4 Mon Sep 17 00:00:00 2001 From: pierreozoux <pierre@ozoux.net> Date: Fri, 8 May 2015 15:05:11 +0100 Subject: [PATCH] Adds a universal runner --- examples/meteorapp.test/BACKUP | 5 +++++ examples/meteorapp.test/RUN | 5 +++++ examples/meteorapp.test/STOP | 2 ++ examples/meteorapp.test/docker-compose.yml | 17 ++++++++++++++++ scripts/install.sh | 3 +++ unit-files/backup-u@.service | 23 ++++++++++++++++++++++ unit-files/backup-u@.timer | 10 ++++++++++ unit-files/discovery-u@.service | 20 +++++++++++++++++++ unit-files/universal@.service | 19 ++++++++++++++++++ 9 files changed, 104 insertions(+) create mode 100755 examples/meteorapp.test/BACKUP create mode 100755 examples/meteorapp.test/RUN create mode 100755 examples/meteorapp.test/STOP create mode 100644 examples/meteorapp.test/docker-compose.yml create mode 100644 unit-files/backup-u@.service create mode 100644 unit-files/backup-u@.timer create mode 100644 unit-files/discovery-u@.service create mode 100644 unit-files/universal@.service diff --git a/examples/meteorapp.test/BACKUP b/examples/meteorapp.test/BACKUP new file mode 100755 index 0000000..a9db4e0 --- /dev/null +++ b/examples/meteorapp.test/BACKUP @@ -0,0 +1,5 @@ +#!/bin/bash -eux +URL=${PWD##*/} +db_container_name=`echo ${URL}_db_1 | sed "s/\.//"`; \ + +docker exec $db_container_name mongodump diff --git a/examples/meteorapp.test/RUN b/examples/meteorapp.test/RUN new file mode 100755 index 0000000..c9048d9 --- /dev/null +++ b/examples/meteorapp.test/RUN @@ -0,0 +1,5 @@ +#!/bin/bash -eux +/opt/bin/docker-compose kill || : +/opt/bin/docker-compose rm -f || : +/opt/bin/docker-compose up + diff --git a/examples/meteorapp.test/STOP b/examples/meteorapp.test/STOP new file mode 100755 index 0000000..ebf2703 --- /dev/null +++ b/examples/meteorapp.test/STOP @@ -0,0 +1,2 @@ +#!/bin/bash -eux +/opt/bin/docker-compose stop diff --git a/examples/meteorapp.test/docker-compose.yml b/examples/meteorapp.test/docker-compose.yml new file mode 100644 index 0000000..eb892be --- /dev/null +++ b/examples/meteorapp.test/docker-compose.yml @@ -0,0 +1,17 @@ +db: + image: mongo + volumes: + - data/runtime/db:/data/db + - data/dump:/dump + command: mongod --smallfiles +web: + image: mateorapp + environment: + - MONGO_URL=mongodb://db:27017/meteor + - ROOT_URL=https://meteorapp.test + links: + - db:db + volumes: + - logs:/home/app/logs + ports: + - 80 diff --git a/scripts/install.sh b/scripts/install.sh index dd8ecb6..d2159d2 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -46,4 +46,7 @@ TRUST_VALUE=':6:' echo $TRUSTVAR$TRUST_VALUE | gpg --import-ownertrust docker run --rm -v /opt/bin:/target jpetazzo/nsenter +curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /opt/bin/docker-compose +chmod +x /opt/bin/docker-compose +update_engine_client -update diff --git a/unit-files/backup-u@.service b/unit-files/backup-u@.service new file mode 100644 index 0000000..e55ecef --- /dev/null +++ b/unit-files/backup-u@.service @@ -0,0 +1,23 @@ +[Unit] +Description=Back up data from %i + +[Service] +Type=oneshot +TimeoutStartSec=0 +Nice=0 +WorkingDirectory=/data/domains/%i/ +EnvironmentFile=/etc/environment +ExecStartPre=/bin/bash -euxc 'sleep `shuf -i 0-400 -n 1`' +ExecStartPre=/bin/bash -euxc '/data/domains/%i/BACKUP' +ExecStart=/bin/bash -euxc ' \ + /bin/docker run \ + --rm \ + --name backup-%i \ + -h backup.container \ + -v /root:/root \ + -v /data/domains/%i:/backup indiepaas/duplicity \ + --full-if-older-than 1W \ + --encrypt-key ${ENCRYPT_KEY} \ + /backup \ + sftp://${BACKUP_DESTINATION}/%i' + diff --git a/unit-files/backup-u@.timer b/unit-files/backup-u@.timer new file mode 100644 index 0000000..33a4c63 --- /dev/null +++ b/unit-files/backup-u@.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Hourly backup of www and mysql content. + +# Dependency binding +BindsTo=universal@%i.service + +[Timer] +OnActiveSec=20 +OnUnitActiveSec=60min + diff --git a/unit-files/discovery-u@.service b/unit-files/discovery-u@.service new file mode 100644 index 0000000..b046053 --- /dev/null +++ b/unit-files/discovery-u@.service @@ -0,0 +1,20 @@ +[Unit] +Description=%p for %i etcd registration + +# Requirements +Requires=etcd.service + +# Dependency binding +BindsTo=universal@%i.service + +[Service] +Type=oneshot +RemainAfterExit=yes +Environment=URL=%i +ExecStart=/bin/bash -euxc ' \ + sleep 3; \ + container_name=`echo ${URL}_web_1 | sed "s/\.//"`; \ + ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $container_name`; \ + etcdctl --peers 172.17.42.1:4001 set /services/web/%i \'{"ip":"\'$ip\'", "port":"80"}\';' +ExecStop=-/usr/bin/etcdctl rm /services/web/%i + diff --git a/unit-files/universal@.service b/unit-files/universal@.service new file mode 100644 index 0000000..1ef0e90 --- /dev/null +++ b/unit-files/universal@.service @@ -0,0 +1,19 @@ +[Unit] +Description=%p-%i + +# Requirements +Requires=docker.service +Requires=discovery-u@%i.service +Requires=backup-u@%i.timer + +# Dependency ordering +After=docker.service +Before=discovery-u@%i.service +Before=backup-u@%i.timer + +[Service] +WorkingDirectory=/data/domains/%i/ +ExecStartPre=/bin/cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem +ExecStart=/bin/bash -euxc '/data/domains/%i/RUN' +ExecStop=/data/domains/%i/STOP + -- GitLab