diff --git a/blueprints/known-0.6.4.tgz b/blueprints/known-0.6.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..bc5455a3486d541fc779cb6740f999f46ada1a3c Binary files /dev/null and b/blueprints/known-0.6.4.tgz differ diff --git a/scripts/setup.sh b/scripts/setup.sh index 6a9ac8e900e7349903993e9b3d6c305e50717c28..aff3c1a580d90bbe6fae8b8f3621c61f2a1cfcbe 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -19,6 +19,7 @@ docker pull indiehosters/postfix-forwarder docker pull indiehosters/nginx docker pull indiehosters/mysql docker pull indiehosters/wordpress +docker pull indiehosters/known # Install unit-files sudo cp /data/indiehosters/unit-files/* /etc/systemd/system && systemctl daemon-reload diff --git a/unit-files/known-discovery@.service b/unit-files/known-discovery@.service new file mode 100644 index 0000000000000000000000000000000000000000..a2a9e2d1abf5826d7be7980a97c1edf35ad456fc --- /dev/null +++ b/unit-files/known-discovery@.service @@ -0,0 +1,34 @@ +[Unit] +Description=%p for %i etcd registration + +# Requirements +Requires=etcd.service + +# Dependency ordering +After=etcd.service +After=known@%i.service + +# Dependency binding +BindsTo=known@%i.service + +[Service] +# Start +## Test whether service is accessible and then register useful information +ExecStart=/bin/bash -c ' \ + sleep 30; \ + while true; do \ + app=`echo %p | cut -d"-" -f1`; \ + ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $app-%i`; \ + curl -f $ip; \ + if [ $? -eq 0 ]; then \ + etcdctl set /services/$app/%i \'{"ip":"\'$ip\'", "port":"80"}\' --ttl 60; \ + else \ + etcdctl rm /services/$app/%i; \ + fi; \ + sleep 50; \ + done' + +# Stop +ExecStop=-/bin/bash -euxc ' \ + app=`echo %p | cut -d"-" -f1`; \ + /usr/bin/etcdctl rm /services/$app/%i diff --git a/unit-files/known-importer@.service b/unit-files/known-importer@.service new file mode 100644 index 0000000000000000000000000000000000000000..95ab943585238150765529abb91de6a9ac456168 --- /dev/null +++ b/unit-files/known-importer@.service @@ -0,0 +1,30 @@ +[Unit] +Description=WordPress importer + +# Dependency ordering +After=mysql@%i.service +Before=known@%i.service +Before=backup@%i.timer + +# Dependency binding +BindsTo=known@%i.service + +[Service] +Type=oneshot +RemainAfterExit=yes +Environment=DOMAIN=%i +ExecStartPre=/data/indiehosters/scripts/backup-init.sh +ExecStartPre=/data/indiehosters/scripts/import.sh +ExecStart=/bin/bash -euxc ' \ + cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \ + known_folder=/data/domains/%i/known; \ + if [ ! -d $known_folder/known-content ]; then \ + mkdir -p $known_folder; \ + cd $known_folder; \ + tar xvzf /data/indiehosters/blueprints/known-0.6.4.tgz; \ + touch .htaccess; \ + fi; \ + cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $known_folder/.env' + +[Install] +WantedBy=known@%i.service diff --git a/unit-files/known@.service b/unit-files/known@.service new file mode 100644 index 0000000000000000000000000000000000000000..800220ff6664e09e4f010be44f33d022f3b64500 --- /dev/null +++ b/unit-files/known@.service @@ -0,0 +1,33 @@ +[Unit] +Description=%p-%i + +# Requirements +Requires=docker.service +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 +After=mysql@%i.service +After=%p-importer@%i.service +Before=%p-discovery@%i.service + +[Service] +Restart=always +ExecStartPre=-/usr/bin/docker kill %p-%i +ExecStartPre=-/usr/bin/docker rm %p-%i +ExecStart=/usr/bin/docker run \ + --name %p-%i \ + --link mysql-%i:db \ + -v /data/domains/%i/%p/known-content:/app/known-content \ + -v /data/domains/%i/%p/.htaccess:/app/.htaccess \ + --env-file /data/domains/%i/%p/.env \ + indiehosters/known +ExecReload=/usr/bin/docker restart %p-%i +ExecStop=/usr/bin/docker stop %p-%i + +[Install] +WantedBy=multi-user.target