Skip to content
This repository was archived by the owner on Jul 2, 2024. It is now read-only.

Commit d57ec78

Browse files
committed
Merge pull request #33 from jdeathe/issue/26
ISSUE 26: Review/update systemd install and definition scripts.
2 parents a704fe4 + ac3a8b2 commit d57ec78

File tree

2 files changed

+142
-48
lines changed

2 files changed

+142
-48
lines changed

apache-php.app-1.1.1@8080.service

Lines changed: 62 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22
# Create a data container for the configuration volume:
33
# docker run -v /config --name volume-config.<service-name> busybox /bin/true
44
#
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+
#
512
# To install:
613
# sudo cp <container-path>/<service-name>@<port>.service /etc/systemd/system/
714
# sudo systemctl daemon-reload
@@ -13,69 +20,89 @@
1320

1421
[Unit]
1522
Description=CentOS-6 / Apache / PHP (FastCGI) // app-1.1.1
16-
After=etcd.service
23+
After=etcd2.service
1724
After=docker.service
1825
Requires=docker.service
19-
Requires=etcd.service
26+
Requires=etcd2.service
2027

2128
[Service]
2229
Restart=on-failure
2330
RestartSec=30
2431
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"
2536

2637
# Create a data container for the configuration volume
2738
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; \
3142
else \
3243
/usr/bin/docker pull busybox:latest; \
3344
fi; \
3445
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; \
4558
fi"
4659

4760
# Initialisation: Pull or build image if required
4861
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; \
5265
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}; \
5467
fi; \
5568
fi"
5669

5770
# 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
5871
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 \
6174
/usr/bin/docker stop %p; \
6275
fi; \
6376
/usr/bin/docker rm %p; \
6477
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"
79106

80107
ExecStartPost=/usr/bin/etcdctl set /services/apache-php/app-1/1.1 %H:%i
81108

systemd-install.sh

Lines changed: 80 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,92 @@
11
#!/usr/bin/env bash
22

3-
DIR_PATH="$( if [ "$( echo "${0%/*}" )" != "$( echo "${0}" )" ] ; then cd "$( echo "${0%/*}" )"; fi; pwd )"
4-
if [[ $DIR_PATH == */* ]] && [[ $DIR_PATH != "$( pwd )" ]] ; then
5-
cd $DIR_PATH
3+
# Change working directory
4+
DIR_PATH="$( if [[ $( echo "${0%/*}" ) != $( echo "${0}" ) ]]; then cd "$( echo "${0%/*}" )"; fi; pwd )"
5+
if [[ ${DIR_PATH} == */* ]] && [[ ${DIR_PATH} != $( pwd ) ]]; then
6+
cd ${DIR_PATH}
67
fi
78

9+
have_docker_container_name ()
10+
{
11+
local NAME=$1
12+
13+
if [[ -z ${NAME} ]]; then
14+
return 1
15+
fi
16+
17+
if [[ -n $(docker ps -a | awk -v pattern="^${NAME}$" '$NF ~ pattern { print $NF; }') ]]; then
18+
return 0
19+
fi
20+
21+
return 1
22+
}
23+
24+
is_docker_container_name_running ()
25+
{
26+
local NAME=$1
27+
28+
if [[ -z ${NAME} ]]; then
29+
return 1
30+
fi
31+
32+
if [[ -n $(docker ps | awk -v pattern="^${NAME}$" '$NF ~ pattern { print $NF; }') ]]; then
33+
return 0
34+
fi
35+
36+
return 1
37+
}
38+
39+
remove_docker_container_name ()
40+
{
41+
local NAME=$1
42+
43+
if have_docker_container_name ${NAME} ; then
44+
if is_docker_container_name_running ${NAME} ; then
45+
echo "Stopping container ${NAME}"
46+
(docker stop ${NAME})
47+
fi
48+
echo "Removing container ${NAME}"
49+
(docker rm ${NAME})
50+
fi
51+
}
52+
53+
loading_counter ()
54+
{
55+
local COUNTER=${1:-10}
56+
57+
while [[ ${COUNTER} -ge 1 ]]; do
58+
echo -ne "Loading in: ${COUNTER} \r"
59+
sleep 1
60+
COUNTER=$[${COUNTER}-1]
61+
done
62+
}
63+
864
OPT_SERVICE_NAME_FULL=${SERVICE_NAME_FULL:-apache-php.app-1.1.1@8080.service}
965
OPT_SERVICE_NAME_SHORT=$(cut -d '@' -f1 <<< "${OPT_SERVICE_NAME_FULL}")
1066

67+
# Add required configuration directories
68+
mkdir -p /etc/services-config/${OPT_SERVICE_NAME_SHORT}/{httpd,supervisor,ssl/{certs,private}}
69+
70+
if [[ -z $(find /etc/services-config/${OPT_SERVICE_NAME_SHORT}/supervisor -maxdepth 1 -type f) ]]; then
71+
cp -R etc/services-config/supervisor /etc/services-config/${OPT_SERVICE_NAME_SHORT}/
72+
fi
73+
74+
if [[ -z $(find /etc/services-config/${OPT_SERVICE_NAME_SHORT}/httpd -maxdepth 1 -type f) ]]; then
75+
cp -R etc/services-config/httpd /etc/services-config/${OPT_SERVICE_NAME_SHORT}/
76+
fi
77+
1178
# Force
12-
systemctl stop ${OPT_SERVICE_NAME_FULL}
13-
docker rm volume-config.${OPT_SERVICE_NAME_SHORT} && \
14-
docker rm ${OPT_SERVICE_NAME_SHORT}
79+
sudo systemctl stop ${OPT_SERVICE_NAME_FULL} &> /dev/null
80+
remove_docker_container_name volume-config.${OPT_SERVICE_NAME_SHORT}
81+
remove_docker_container_name ${OPT_SERVICE_NAME_SHORT}
1582

16-
cp ${OPT_SERVICE_NAME_FULL} /etc/systemd/system/
17-
systemctl daemon-reload
18-
systemctl enable /etc/systemd/system/${OPT_SERVICE_NAME_FULL}
83+
sudo cp ${OPT_SERVICE_NAME_FULL} /etc/systemd/system/
84+
sudo systemctl daemon-reload
85+
sudo systemctl enable /etc/systemd/system/${OPT_SERVICE_NAME_FULL}
1986

20-
echo "WARNING: This may take a while if pulling large container images for the first time..."
21-
systemctl restart ${OPT_SERVICE_NAME_FULL}
87+
echo "WARNING: This may take a while if pulling large container images for the first time."
88+
sudo systemctl restart ${OPT_SERVICE_NAME_FULL}
2289

23-
sleep 10
90+
loading_counter 10
2491

25-
docker logs ${OPT_SERVICE_NAME_SHORT}
92+
docker logs ${OPT_SERVICE_NAME_SHORT}

0 commit comments

Comments
 (0)