|
2 | 2 | # Create a data container for the configuration volume: |
3 | 3 | # docker run -v /config --name volume-config.<service-name> busybox /bin/true |
4 | 4 | # |
| 5 | +# Optional configuration volume install: |
| 6 | +# mkdir -p /etc/services-config/<service-name>/{httpd,supervisor,ssl/{certs,private}} |
| 7 | +# cp <container-path>/etc/services-config/supervisor/supervisord.conf /etc/services-config/<service-name>/supervisor/supervisord.conf |
| 8 | +# cp <container-path>/etc/services-config/httpd/conf/httpd.conf /etc/services-config/<service-name>/httpd/conf/httpd.conf |
| 9 | +# cp <container-path>/etc/services-config/httpd/conf.d/php.conf /etc/services-config/<service-name>/httpd/conf.d/php.conf |
| 10 | +# cp <container-path>/etc/services-config/httpd/conf.d/ssl.conf /etc/services-config/<service-name>/httpd/conf.d/ssl.conf |
| 11 | +# |
5 | 12 | # To install: |
6 | 13 | # sudo cp <container-path>/<service-name>@<port>.service /etc/systemd/system/ |
7 | 14 | # sudo systemctl daemon-reload |
|
13 | 20 |
|
14 | 21 | [Unit] |
15 | 22 | Description=CentOS-6 / Apache / PHP (FastCGI) // app-1.1.1 |
16 | | -After=etcd.service |
| 23 | +After=etcd2.service |
17 | 24 | After=docker.service |
18 | 25 | Requires=docker.service |
19 | | -Requires=etcd.service |
| 26 | +Requires=etcd2.service |
20 | 27 |
|
21 | 28 | [Service] |
22 | 29 | Restart=on-failure |
23 | 30 | RestartSec=30 |
24 | 31 | TimeoutStartSec=1200 |
| 32 | +Environment="MOUNT_PATH_CONFIG=/etc/services-config" |
| 33 | +Environment="MOUNT_PATH_DATA=/var/services-data" |
| 34 | +Environment="DOCKER_IMAGE_NAME=jdeathe/centos-ssh-apache-php-fcgi" |
| 35 | +Environment="DOCKER_IMAGE_TAG=centos-6-1.3.0" |
25 | 36 |
|
26 | 37 | # Create a data container for the configuration volume |
27 | 38 | ExecStartPre=/bin/sudo /bin/bash -c \ |
28 | | - "if [ ! \"busybox\" == \"$(/usr/bin/docker images | /bin/grep -e '^busybox[ ]\{1,\}' | /bin/grep -o 'busybox')\" ]; then \ |
29 | | - if [ -f /var/services-packages/busybox.latest-1.0.0.tar.xz ]; then \ |
30 | | - /usr/bin/xz -dc /var/services-packages/busybox.latest-1.0.0.tar.xz | /usr/bin/docker load; \ |
| 39 | + "if [[ busybox != $(/usr/bin/docker images | /bin/grep -e '^busybox[ ]\{1,\}' | /bin/grep -o 'busybox') ]]; then \ |
| 40 | + if [[ -f /var/services-packages/busybox.latest-1.0.0.tar.xz ]]; then \ |
| 41 | + /usr/bin/xz /var/services-packages/busybox.latest-1.0.0.tar.xz | /usr/bin/docker load; \ |
31 | 42 | else \ |
32 | 43 | /usr/bin/docker pull busybox:latest; \ |
33 | 44 | fi; \ |
34 | 45 | fi; \ |
35 | | - if [ ! \"volume-config.%p\" == \"$(/usr/bin/docker ps -a | /bin/grep -v -e \\\"volume-config.%p/.*,.*\\\" | /bin/grep -e '[ ]\{1,\}'volume-config.%p | /bin/grep -o volume-config.%p)\" ]; then \ |
36 | | - /usr/bin/docker run \ |
37 | | - --name volume-config.%p \ |
38 | | - -v /etc/services-config/ssh.pool-1/ssh:/etc/services-config/ssh \ |
39 | | - -v /etc/services-config/%p/supervisor:/etc/services-config/supervisor \ |
40 | | - -v /etc/services-config/%p/httpd:/etc/services-config/httpd \ |
41 | | - -v /etc/services-config/%p/ssl/certs:/etc/services-config/ssl/certs \ |
42 | | - -v /etc/services-config/%p/ssl/private:/etc/services-config/ssl/private \ |
43 | | - busybox:latest \ |
44 | | - /bin/true; \ |
| 46 | + if [[ -n $(/usr/bin/find ${MOUNT_PATH_CONFIG}/%p/supervisor -maxdepth 1 -type f) ]] && [[ -n $(/usr/bin/find ${MOUNT_PATH_CONFIG}/%p/httpd -maxdepth 1 -type f) ]]; then \ |
| 47 | + if [[ volume-config.%p != $(/usr/bin/docker ps -a | /bin/awk -v pattern='^volume-config.%p$' '$NF ~ pattern { print $NF; }') ]]; then \ |
| 48 | + /usr/bin/docker run \ |
| 49 | + --name volume-config.%p \ |
| 50 | + -v ${MOUNT_PATH_CONFIG}/ssh.pool-1/ssh:/etc/services-config/ssh \ |
| 51 | + -v ${MOUNT_PATH_CONFIG}/%p/supervisor:/etc/services-config/supervisor \ |
| 52 | + -v ${MOUNT_PATH_CONFIG}/%p/httpd:/etc/services-config/httpd \ |
| 53 | + -v ${MOUNT_PATH_CONFIG}/%p/ssl/certs:/etc/services-config/ssl/certs \ |
| 54 | + -v ${MOUNT_PATH_CONFIG}/%p/ssl/private:/etc/services-config/ssl/private \ |
| 55 | + busybox:latest \ |
| 56 | + /bin/true; \ |
| 57 | + fi; \ |
45 | 58 | fi" |
46 | 59 |
|
47 | 60 | # Initialisation: Pull or build image if required |
48 | 61 | ExecStartPre=/bin/sudo /bin/bash -c \ |
49 | | - "if [ ! \"jdeathe/centos-ssh-apache-php-fcgi\" == \"$(/usr/bin/docker images | /bin/grep -e '^jdeathe/centos-ssh-apache-php-fcgi[ ]\{1,\}' | /bin/grep -o 'jdeathe/centos-ssh-apache-php-fcgi')\" ]; then \ |
50 | | - if [ -f /var/services-packages/jdeathe/centos-ssh-apache-php-fcgi.centos-6-1.3.0.tar.xz ]; then \ |
51 | | - /usr/bin/xz -dc /var/services-packages/jdeathe/centos-ssh-apache-php-fcgi.centos-6-1.3.0.tar.xz | /usr/bin/docker load; \ |
| 62 | + "if [[ ${DOCKER_IMAGE_NAME} != $(/usr/bin/docker images | /bin/grep -e \\\"^${DOCKER_IMAGE_NAME}[ ]\{1,\}\\\" | /bin/grep -o \\\"${DOCKER_IMAGE_NAME}\\\") ]]; then \ |
| 63 | + if [[ -f /var/services-packages/${DOCKER_IMAGE_NAME}.${DOCKER_IMAGE_TAG}.tar.xz ]]; then \ |
| 64 | + /usr/bin/xz -dc /var/services-packages/${DOCKER_IMAGE_NAME}.${DOCKER_IMAGE_TAG}.tar.xz | /usr/bin/docker load; \ |
52 | 65 | else \ |
53 | | - /usr/bin/docker pull jdeathe/centos-ssh-apache-php-fcgi:centos-6-1.3.0; \ |
| 66 | + /usr/bin/docker pull ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}; \ |
54 | 67 | fi; \ |
55 | 68 | fi" |
56 | 69 |
|
57 | 70 | # Startup: Remove existing container (and stop if running) so it is re-created on startup but not removed on exit - to allow debugging if required |
58 | 71 | ExecStart=/bin/sudo /bin/bash -c \ |
59 | | - "if [ \"%p\" == \"$(/usr/bin/docker ps -a | /bin/grep -v -e \\\"%p/.*,.*\\\" | /bin/grep -e '[ ]\{1,\}'%p | /bin/grep -o %p)\" ]; then \ |
60 | | - if [ \"%p\" == \"$(/usr/bin/docker ps | /bin/grep -v -e \\\"%p/.*,.*\\\" | /bin/grep -e '[ ]\{1,\}'%p | /bin/grep -o %p)\" ]; then \ |
| 72 | + "if [[ %p == $(/usr/bin/docker ps -a | /bin/awk -v pattern='^%p$' '$NF ~ pattern { print $NF; }') ]]; then \ |
| 73 | + if [[ %p == $(/usr/bin/docker ps | /bin/awk -v pattern='^%p$' '$NF ~ pattern { print $NF; }') ]]; then \ |
61 | 74 | /usr/bin/docker stop %p; \ |
62 | 75 | fi; \ |
63 | 76 | /usr/bin/docker rm %p; \ |
64 | 77 | fi; \ |
65 | | - /usr/bin/docker run \ |
66 | | - --privileged \ |
67 | | - --name %p \ |
68 | | - -p %i:80 \ |
69 | | - -p 8580:8443 \ |
70 | | - --env SERVICE_UNIT_INSTANCE=app-1 \ |
71 | | - --env SERVICE_UNIT_LOCAL_ID=1 \ |
72 | | - --env SERVICE_UNIT_INSTANCE=1 \ |
73 | | - --env APACHE_SERVER_NAME=app-1.local \ |
74 | | - --env APACHE_SERVER_ALIAS=app-1 \ |
75 | | - --env DATE_TIMEZONE=UTC \ |
76 | | - --volumes-from volume-config.%p \ |
77 | | - -v /var/services-data/apache-php/app-1:/var/www/app \ |
78 | | - jdeathe/centos-ssh-apache-php-fcgi:centos-6-1.3.0" |
| 78 | + if [[ volume-config.%p == $(/usr/bin/docker ps -a | /bin/awk -v pattern='^volume-config.%p$' '$NF ~ pattern { print $NF; }') ]]; then \ |
| 79 | + /usr/bin/docker run \ |
| 80 | + --name %p \ |
| 81 | + -p %i:80 \ |
| 82 | + -p 8580:8443 \ |
| 83 | + --env SERVICE_UNIT_INSTANCE=app-1 \ |
| 84 | + --env SERVICE_UNIT_LOCAL_ID=1 \ |
| 85 | + --env SERVICE_UNIT_INSTANCE=1 \ |
| 86 | + --env APACHE_SERVER_NAME=app-1.local \ |
| 87 | + --env APACHE_SERVER_ALIAS=app-1 \ |
| 88 | + --env DATE_TIMEZONE=UTC \ |
| 89 | + --volumes-from volume-config.%p \ |
| 90 | + -v ${MOUNT_PATH_DATA}/apache-php/app-1:/var/www/app \ |
| 91 | + ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}; \ |
| 92 | + else \ |
| 93 | + /usr/bin/docker run \ |
| 94 | + --name %p \ |
| 95 | + -p %i:80 \ |
| 96 | + -p 8580:8443 \ |
| 97 | + --env SERVICE_UNIT_INSTANCE=app-1 \ |
| 98 | + --env SERVICE_UNIT_LOCAL_ID=1 \ |
| 99 | + --env SERVICE_UNIT_INSTANCE=1 \ |
| 100 | + --env APACHE_SERVER_NAME=app-1.local \ |
| 101 | + --env APACHE_SERVER_ALIAS=app-1 \ |
| 102 | + --env DATE_TIMEZONE=UTC \ |
| 103 | + -v ${MOUNT_PATH_DATA}/apache-php/app-1:/var/www/app \ |
| 104 | + ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG}; \ |
| 105 | + fi" |
79 | 106 |
|
80 | 107 | ExecStartPost=/usr/bin/etcdctl set /services/apache-php/app-1/1.1 %H:%i |
81 | 108 |
|
|
0 commit comments