diff --git a/dockerfiles/services/known/VOLUME b/dockerfiles/services/known/VOLUME new file mode 100644 index 0000000000000000000000000000000000000000..30c72a71badd1701c76f05defed744d2a53e913d --- /dev/null +++ b/dockerfiles/services/known/VOLUME @@ -0,0 +1 @@ +/uploads diff --git a/dockerfiles/services/wordpress/VOLUME b/dockerfiles/services/wordpress/VOLUME new file mode 100644 index 0000000000000000000000000000000000000000..3e5ad7614f26c2cec20b26bc7cc3369c77e9da2b --- /dev/null +++ b/dockerfiles/services/wordpress/VOLUME @@ -0,0 +1 @@ +/app/wp-content diff --git a/unit-files/discovery@.service b/unit-files/discovery@.service index 5a714ce2505e503dd3fe775988d1371279806a23..fc3669305fe701c5ac5ea450782a229dd1e30099 100644 --- a/unit-files/discovery@.service +++ b/unit-files/discovery@.service @@ -5,13 +5,10 @@ Description=%p for %i etcd registration Requires=etcd.service [Service] -# Start -## Test whether service is accessible and then register useful information ExecStart=/bin/bash -c ' \ sleep 30; \ while true; do \ - app=`echo %i | cut -d"-" -f1`; \ - ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $app-%i`; \ + ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' %i`; \ curl -f $ip; \ if [ $? -eq 0 ]; then \ etcdctl set /services/web/%i \'{"ip":"\'$ip\'", "port":"80"}\' --ttl 60; \ @@ -21,7 +18,5 @@ ExecStart=/bin/bash -c ' \ sleep 50; \ done' -# Stop -ExecStop=-/bin/bash -euxc ' \ - app=`echo %p | cut -d"-" -f1`; \ - /usr/bin/etcdctl rm /services/web/%i +ExecStop=-/usr/bin/etcdctl rm /services/web/%i + diff --git a/unit-files/known@.service b/unit-files/known@.service deleted file mode 100644 index 76eb076bab10e3d7ffc06b2e750da739584f16ca..0000000000000000000000000000000000000000 --- a/unit-files/known@.service +++ /dev/null @@ -1,45 +0,0 @@ -[Unit] -Description=%p-%i - -# Requirements -Requires=docker.service -Requires=init@%i.service -Requires=mysql@%i.service -Requires=discovery@%p-%i.service -Requires=backup@%i.timer - -# Dependency ordering -After=docker.service -After=init@%i.service -After=mysql@%i.service -Before=discovery@%p-%i.service -Before=backup@%i.timer - -# Dependency binding -BindsTo=mysql@%i.service -BindsTo=discovery@%p-%i.service - -[Service] -Restart=always -ExecStartPre=-/usr/bin/docker kill %p-%i -ExecStartPre=-/usr/bin/docker rm %p-%i -ExecStartPre=/bin/bash -euxc ' \ - application_folder=/data/domains/%i/%p; \ - if [ ! -d $application_folder ]; then \ - mkdir -p $application_folder; \ - touch $application_folder/.htaccess; \ - fi; \ - cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $application_folder/.env' - -ExecStart=/usr/bin/docker run \ - --name %p-%i \ - --link mysql-%i:db \ - -v /data/domains/%i/%p/wp-content:/app/wp-content \ - -v /data/domains/%i/%p/.htaccess:/app/.htaccess \ - --env-file /data/domains/%i/%p/.env \ - pierreozoux/%p -ExecReload=/usr/bin/docker restart %p-%i -ExecStop=/usr/bin/docker stop %p-%i - -[Install] -WantedBy=multi-user.target diff --git a/unit-files/lamp@.service b/unit-files/lamp@.service new file mode 100644 index 0000000000000000000000000000000000000000..d749141063fb3539df9749eff96874f78bb4d302 --- /dev/null +++ b/unit-files/lamp@.service @@ -0,0 +1,50 @@ +[Unit] +Description=%p-%i + +# Requirements +Requires=docker.service +Requires=init@%i.service +Requires=mysql@%i.service +Requires=discovery@%i.service +Requires=backup@%i.timer + +# Dependency ordering +After=docker.service +After=init@%i.service +After=mysql@%i.service +Before=discovery@%i.service +Before=backup@%i.timer + +[Service] +Restart=always +EnvironmentFile=/data/domains/%i/.env +ExecStartPre=-/usr/bin/docker kill %i +ExecStartPre=-/usr/bin/docker rm %i +ExecStartPre=/bin/bash -euxc ' \ + application_folder=/data/domains/%i/${APPLICATION}; \ + if [ ! -d $application_folder ]; then \ + mkdir -p $application_folder; \ + touch $application_folder/.htaccess; \ + fi; \ + cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $application_folder/.env' + +ExecStart=/usr/bin/docker run \ + --name %i \ + --link mysql-%i:db \ + -v /data/domains/%i/${APPLICATION}/data:$(cat /data/indiehosters/dockerfiles/services/${APPLICATION}/VOLUME) \ + -v /data/domains/%i/${APPLICATION}/.htaccess:/app/.htaccess \ + --env-file /data/domains/%i/${APPLICATION}/.env \ + pierreozoux/${APPLICATION} +ExecReload=/bin/bash -euxc ' \ + /usr/bin/docker restart %i; \ + systemctl restart discovery@%i.service; \ + systemctl restart backup@%i.timer;' + +ExecStop=/bin/bash -euxc ' \ + systemctl stop init@%i.service; \ + systemctl stop discovery@%i.service; \ + systemctl stop backup@%i.timer; \ + /usr/bin/docker stop %i;' + +[Install] +WantedBy=multi-user.target diff --git a/unit-files/mysql@.service b/unit-files/mysql@.service index 6c91e20f2f972667704d70bd79eb1292f60546e7..b23e0e671fb259cdd38c257529f1dbb6ac7c94dd 100644 --- a/unit-files/mysql@.service +++ b/unit-files/mysql@.service @@ -8,6 +8,9 @@ Requires=docker.service After=docker.service Before=backup@%i.timer +# Dependency binding +BindsTo=lamp@%i.service + [Service] Restart=always ExecStartPre=-/usr/bin/docker kill %p-%i diff --git a/unit-files/static@.service b/unit-files/static@.service index 141cfa43ab94b8bd8a80d2519bc2989d3139e666..5173d5697e2cd66e4b0e4a4b5398e1920729e6ae 100644 --- a/unit-files/static@.service +++ b/unit-files/static@.service @@ -4,35 +4,40 @@ Description=%p-%i # Requirements Requires=docker.service Requires=init@%i.service -Requires=discovery@%p-%i.service +Requires=discovery@%i.service Requires=backup@%i.timer # Dependency ordering After=docker.service After=init@%i.service -Before=discovery@%p-%i.service +Before=discovery@%i.service Before=backup@%i.timer -# Dependency binding -BindsTo=discovery@%p-%i.service - [Service] Restart=always -ExecStartPre=-/usr/bin/docker kill %p-%i -ExecStartPre=-/usr/bin/docker rm %p-%i +EnvironmentFile=/data/domains/%i/.env +ExecStartPre=-/usr/bin/docker kill %i +ExecStartPre=-/usr/bin/docker rm %i ExecStartPre=/bin/bash -euxc ' \ - application_folder=/data/domains/%i/static/www-content; \ + application_folder=/data/domains/%i/%p/www-content; \ if [ ! -d $application_folder ]; then \ mkdir -p $application_folder; \ echo Hello %i > $application_folder/index.html; \ - fi;' + fi' ExecStart=/usr/bin/docker run \ - --name %p-%i \ + --name %i \ -v /data/domains/%i/%p/www-content:/app \ pierreozoux/nginx -ExecReload=/usr/bin/docker restart %p-%i -ExecStop=/usr/bin/docker stop %p-%i +ExecReload=/bin/bash -euxc ' \ + /usr/bin/docker restart %i; \ + systemctl restart discovery@%i.service; \ + systemctl restart backup@%i.timer;' +ExecStop=/bin/bash -euxc ' \ + systemctl stop init@%i.service; \ + systemctl stop discovery@%i.service; \ + systemctl stop backup@%i.timer; \ + /usr/bin/docker stop %i;' [Install] WantedBy=multi-user.target diff --git a/unit-files/wordpress@.service b/unit-files/wordpress@.service deleted file mode 100644 index 76eb076bab10e3d7ffc06b2e750da739584f16ca..0000000000000000000000000000000000000000 --- a/unit-files/wordpress@.service +++ /dev/null @@ -1,45 +0,0 @@ -[Unit] -Description=%p-%i - -# Requirements -Requires=docker.service -Requires=init@%i.service -Requires=mysql@%i.service -Requires=discovery@%p-%i.service -Requires=backup@%i.timer - -# Dependency ordering -After=docker.service -After=init@%i.service -After=mysql@%i.service -Before=discovery@%p-%i.service -Before=backup@%i.timer - -# Dependency binding -BindsTo=mysql@%i.service -BindsTo=discovery@%p-%i.service - -[Service] -Restart=always -ExecStartPre=-/usr/bin/docker kill %p-%i -ExecStartPre=-/usr/bin/docker rm %p-%i -ExecStartPre=/bin/bash -euxc ' \ - application_folder=/data/domains/%i/%p; \ - if [ ! -d $application_folder ]; then \ - mkdir -p $application_folder; \ - touch $application_folder/.htaccess; \ - fi; \ - cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $application_folder/.env' - -ExecStart=/usr/bin/docker run \ - --name %p-%i \ - --link mysql-%i:db \ - -v /data/domains/%i/%p/wp-content:/app/wp-content \ - -v /data/domains/%i/%p/.htaccess:/app/.htaccess \ - --env-file /data/domains/%i/%p/.env \ - pierreozoux/%p -ExecReload=/usr/bin/docker restart %p-%i -ExecStop=/usr/bin/docker stop %p-%i - -[Install] -WantedBy=multi-user.target