diff --git a/blueprints/wordpress.tgz b/blueprints/wordpress.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b0eb7859be05e9a743c2a2879ea4d3840d05f6b3 Binary files /dev/null and b/blueprints/wordpress.tgz differ diff --git a/importers/mysql.sh b/importers/mysql.sh new file mode 100755 index 0000000000000000000000000000000000000000..632bc10f8cb5590b4512c8d12ce905db1cedab56 --- /dev/null +++ b/importers/mysql.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +if [ ! -d "/data/per-user/$USER/mysql/data" ]; then + mkdir -p /data/per-user/$USER/mysql/data + echo MYSQL_PASS=`echo $RANDOM ${date} | md5sum | base64 | cut -c-10` > /data/per-user/$USER/mysql/.env +fi diff --git a/importers/wordpress.sh b/importers/wordpress.sh new file mode 100755 index 0000000000000000000000000000000000000000..7e1f05698acd5488aaf8be1f18c304dd0c551466 --- /dev/null +++ b/importers/wordpress.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [ ! -d "/data/per-user/$USER/wordpress/data" ]; then + cd /data/per-user/$USER/ + tar xvzf /data/indiehosters/blueprints/wordpress.tgz + cat /data/per-user/$USER/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > /data/per-user/$USER/wordpress/.env +fi diff --git a/scripts/setup.sh b/scripts/setup.sh index c743f2363fefc293264c98a53bd17e3b397b713a..edc6dddf6e37b5794167687e440ef275937ab38d 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -10,6 +10,8 @@ docker pull indiehosters/haproxy docker pull indiehosters/confd docker pull indiehosters/postfix-forwarder docker pull indiehosters/nginx +docker pull indiehosters/mysql +docker pull indiehosters/wordpress # Install unit-files cp /data/indiehosters/unit-files/* /etc/systemd/system diff --git a/unit-files/mysql-importer@.service b/unit-files/mysql-importer@.service new file mode 100644 index 0000000000000000000000000000000000000000..77af011a0f0b8388a2d225ac4014f4a6db7bdfe7 --- /dev/null +++ b/unit-files/mysql-importer@.service @@ -0,0 +1,12 @@ +[Unit] +Description=MySQL importer +Before=mysql@%i.service + +[Service] +Type=oneshot +RemainAfterExit=yes +Environment=USER=%i +ExecStart=/data/indiehosters/importers/mysql.sh + +[Install] +WantedBy=mysql@%i.service diff --git a/unit-files/mysql@.service b/unit-files/mysql@.service new file mode 100644 index 0000000000000000000000000000000000000000..d96dd96e08861394e3c602df06865a0af79f9a31 --- /dev/null +++ b/unit-files/mysql@.service @@ -0,0 +1,22 @@ +[Unit] +Description=%p-%i +After=docker.service +After=%p-importer@%i.service +Requires=docker.service +Requires=%p-importer@%i.service + +[Service] +Restart=always +TimeoutStartSec=0 +ExecStartPre=-/usr/bin/docker kill %p-%i +ExecStartPre=-/usr/bin/docker rm %p-%i +ExecStart=/usr/bin/docker run\ +--name %p-%i\ +-v /data/per-user/%i/%p/data:/var/lib/mysql\ +--env-file /data/per-user/%i/%p/.env\ +indiehosters/mysql +ExecReload=/usr/bin/docker restart %p-%i +ExecStop=/usr/bin/docker stop %p-%i + +[Install] +WantedBy=multi-user.target diff --git a/unit-files/wordpress-discovery@.service b/unit-files/wordpress-discovery@.service new file mode 100644 index 0000000000000000000000000000000000000000..94b2cd219d254d96ee0f610de36e099b78951d23 --- /dev/null +++ b/unit-files/wordpress-discovery@.service @@ -0,0 +1,36 @@ +[Unit] +Description=%p for %i etcd registration + +# Requirements +Requires=etcd.service +Requires=wordpress@%i.service + +# Dependency ordering and binding +After=etcd.service +After=wordpress@%i.service +BindsTo=wordpress@%i.service + +[Service] + +EnvironmentFile=/etc/environment +TimeoutStartSec=0 +# Start +## Test whether service is accessible and then register useful information +ExecStart=/bin/bash -c '\ + sleep 3; \ + 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 30; \ + else \ + etcdctl rm /services/$app/%i; \ + fi; \ + sleep 20; \ + done' + +# Stop +ExecStop=/bin/bash -ceux '\ + app=`echo %p | cut -d"-" -f1`;\ + /usr/bin/etcdctl rm /services/$app/%i diff --git a/unit-files/wordpress-importer@.service b/unit-files/wordpress-importer@.service new file mode 100644 index 0000000000000000000000000000000000000000..33f56658ef84e4e5137659ae429abcc5548bb05c --- /dev/null +++ b/unit-files/wordpress-importer@.service @@ -0,0 +1,13 @@ +[Unit] +Description=WordPress importer +After=mysql-importer@%i.service +Before=wordpress@%i.service + +[Service] +Type=oneshot +RemainAfterExit=yes +Environment=USER=%i +ExecStart=/data/indiehosters/importers/wordpress.sh + +[Install] +WantedBy=wordpress@%i.service diff --git a/unit-files/wordpress@.service b/unit-files/wordpress@.service new file mode 100644 index 0000000000000000000000000000000000000000..96a540222c9442864553a95837133aad6688de40 --- /dev/null +++ b/unit-files/wordpress@.service @@ -0,0 +1,31 @@ +[Unit] +Description=%p-%i +After=docker.service + +Requires=etcd.service +Requires=docker.service +Requires=mysql@%i.service +After=mysql@%i.service +Requires=%p-importer@%i.service +Requires=%p-discovery@%i.service + +After=%p-importer@%i.service +Before=%p-discovery@%i.service + +[Service] +Restart=always +TimeoutStartSec=0 +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/per-user/%i/%p/data/wp-content:/app/wp-content\ +-v /data/per-user/%i/%p/data/.htaccess:/app/.htaccess\ +--env-file /data/per-user/%i/%p/.env\ +indiehosters/wordpress +ExecReload=/usr/bin/docker restart %p-%i +ExecStop=/usr/bin/docker stop %p-%i + +[Install] +WantedBy=multi-user.target