From 6d7455d3db64c37f47e8384900face33bed4e4c5 Mon Sep 17 00:00:00 2001 From: pierreozoux <pierre@ozoux.net> Date: Fri, 18 Sep 2015 12:42:29 +0100 Subject: [PATCH] A universal starter for docker compose --- unit-files/b-u@.service | 32 ++++++++++++++++++++++++++++++++ unit-files/b-u@.timer | 11 +++++++++++ unit-files/d-u@.service | 24 ++++++++++++++++++++++++ unit-files/u@.service | 27 +++++++++++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 unit-files/b-u@.service create mode 100644 unit-files/b-u@.timer create mode 100644 unit-files/d-u@.service create mode 100644 unit-files/u@.service diff --git a/unit-files/b-u@.service b/unit-files/b-u@.service new file mode 100644 index 0000000..87bcd8a --- /dev/null +++ b/unit-files/b-u@.service @@ -0,0 +1,32 @@ +[Unit] +Description=Back up data from %i + +[Service] +Type=oneshot +TimeoutStartSec=0 +WorkingDirectory=/data/domains/%i/ +EnvironmentFile=/etc/environment +ExecStartPre=/bin/bash -euxc ' \ + /bin/docker run \ + --rm \ + --name clean-%i \ + -e PASSPHRASE \ + -v /root:/root \ + indiepaas/duplicity \ + remove-older-than 10D --force \ + sftp://${BACKUP_DESTINATION}/%i' +ExecStartPre=/bin/bash -euxc '/data/domains/%i/BACKUP' +ExecStart=/bin/bash -euxc ' \ + /bin/docker run \ + --rm \ + --name backup-%i \ + -e PASSPHRASE \ + -h backup.container \ + --cpu-shares=40 \ + -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/b-u@.timer b/unit-files/b-u@.timer new file mode 100644 index 0000000..31fe97a --- /dev/null +++ b/unit-files/b-u@.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Hourly backup of www and mysql content. + +# Dependency binding +BindsTo=u@%i.service + +[Timer] +OnActiveSec=20 +OnUnitActiveSec=60min +AccuracySec=50min + diff --git a/unit-files/d-u@.service b/unit-files/d-u@.service new file mode 100644 index 0000000..270777a --- /dev/null +++ b/unit-files/d-u@.service @@ -0,0 +1,24 @@ +[Unit] +Description=%p for %i etcd registration + +# Requirements +Requires=etcd.service + +# Dependency binding +BindsTo=u@%i.service + +[Service] +Type=oneshot +RemainAfterExit=yes +Environment=URL=%i +ExecStart=/bin/bash -xc ' \ + ip=""; \ + while [ -z $ip ]; \ + do \ + container_name=`echo ${URL}_web_1 | sed "s/\.//g" | sed "s/-//g"`; \ + ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $container_name`; \ + sleep 1; \ + done; \ + 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/u@.service b/unit-files/u@.service new file mode 100644 index 0000000..33da13f --- /dev/null +++ b/unit-files/u@.service @@ -0,0 +1,27 @@ +[Unit] +Description=%p-%i + +# Requirements +Requires=docker.service +Requires=d-u@%i.service +Requires=b-u@%i.timer + +# Dependency ordering +After=docker.service +Before=d-u@%i.service +Before=b-u@%i.timer + +[Service] +Restart=always +RestartSec=10 +TimeoutStartSec=60 +TimeoutStopSec=15 +WorkingDirectory=/data/domains/%i/ +ExecStartPre=/bin/cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem +ExecStartPre=-/opt/bin/docker-compose rm -f +ExecStart=/opt/bin/docker-compose up +ExecStop=/opt/bin/docker-compose stop + +[Install] +WantedBy=multi-user.target + -- GitLab