diff --git a/unit-files/b-u@.service b/unit-files/b-u@.service
new file mode 100644
index 0000000000000000000000000000000000000000..87bcd8a90715a52addce62fdede15b5a9b881a5a
--- /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 0000000000000000000000000000000000000000..31fe97a7800d2504a8bbad0be27f4af2edfb7c0b
--- /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 0000000000000000000000000000000000000000..270777ab9b3381cf47fd30565fb266919fa8ff1d
--- /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 0000000000000000000000000000000000000000..33da13f64947ce0908133bb4b1ae5f37ae7acd29
--- /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
+