From db40918b77dfa034aaec679279b2b3c5dbc79c7b Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 20 Jan 2016 20:13:19 +0100 Subject: [PATCH] add some install scripts to run the composition as a daemon --- app/deploy/start_app.sh | 2 +- init.sh.example | 68 +++++++++++++++++++++++++++++++++++++++ install_linux_systemd.py | 38 ++++++++++++++++++++++ install_linux_sysvinit.py | 27 ++++++++++++++++ 4 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 init.sh.example create mode 100755 install_linux_systemd.py create mode 100755 install_linux_sysvinit.py diff --git a/app/deploy/start_app.sh b/app/deploy/start_app.sh index 6b61ddf5..33da2cf2 100644 --- a/app/deploy/start_app.sh +++ b/app/deploy/start_app.sh @@ -31,7 +31,7 @@ python $manage collectstatic --noinput if [ ! -f $app/.init ]; then python $manage telemeta-create-admin-user python $manage telemeta-create-boilerplate - python $manage update_index --workers $processes + python $manage update_index --workers $processes touch $app/.init fi diff --git a/init.sh.example b/init.sh.example new file mode 100644 index 00000000..74455fde --- /dev/null +++ b/init.sh.example @@ -0,0 +1,68 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: %s +# Required-Start: docker +# Required-Stop: docker +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Docker Services +### END INIT INFO + +set -e + +PROJECT_NAME=%s +YAMLFILE=%s +OPTS="-f $YAMLFILE -p $PROJECT_NAME" +UPOPTS="-d --no-recreate --no-build --no-deps" + +. /lib/lsb/init-functions + +case "$1" in + start) + log_daemon_msg "Starting $PROJECT_NAME composition" "$PROJECT_NAME" || true + if su -c "docker-compose $OPTS up $UPOPTS > /dev/null 2>&1" root ; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + + stop) + log_daemon_msg "Stopping $PROJECT_NAME composition" "$PROJECT_NAME" || true + if su -c "docker-compose $OPTS stop > /dev/null 2>&1" root; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + + reload|force-reload) + log_daemon_msg "Reloading $PROJECT_NAME composition" "$PROJECT_NAME" || true + if docker-compose $OPTS up $UPOPTS > /dev/null 2>&1 ; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + + restart|try-restart) + log_daemon_msg "Restarting $PROJECT_NAME composition" "$PROJECT_NAME" || true + if docker-compose $OPTS stop > /dev/null 2>&1; docker-compose $OPTS up $UPOPTS > /dev/null 2>&1 ; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + + status) + docker-compose $OPTS ps && exit 0 || exit $? + ;; + + *) + log_action_msg "Usage: /etc/init.d/$PROJECT_NAME {start|stop|reload|force-reload|restart|try-restart|status}" || true + exit 1 + ;; +esac + +exit 0 diff --git a/install_linux_systemd.py b/install_linux_systemd.py new file mode 100755 index 00000000..d6d0d1dc --- /dev/null +++ b/install_linux_systemd.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +import os + +path = os.getcwd() +name = path.split(os.sep)[-1] +service = '/lib/systemd/system/' + name + '.service' + +print 'installing ' + name + '...' + +if not os.path.exists('/etc/init.d/docker'): + os.system('wget -qO- https://get.docker.com/ | sh') + os.system('pip install docker-compose') + +rules=""" +[Unit] +Description=%s composition +Requires=docker.service +After=docker.service + +[Service] +ExecStart=/usr/local/bin/docker-compose -f %s/docker-compose.yml up -d +ExecStop=/usr/local/bin/docker-compose -f %s/docker-compose.yml stop + +[Install] +WantedBy=local.target +""" % (name, path, path) + +# print rules + +f = open(service, 'w') +f.write(rules) +f.close() + +os.system('systemctl enable ' + service) +os.system('systemctl daemon-reload') + +print 'done' diff --git a/install_linux_sysvinit.py b/install_linux_sysvinit.py new file mode 100755 index 00000000..8c2cf178 --- /dev/null +++ b/install_linux_sysvinit.py @@ -0,0 +1,27 @@ +#!/usr/bin/python + +import os + +path = os.getcwd() +name = path.split(os.sep)[-1].lower() +service = '/etc/init.d/' + name +conf = path + os.sep + 'docker-compose.yml' + +print 'installing ' + name + '...' + +if not os.path.exists('/etc/init.d/docker'): + os.system('wget -qO- https://get.docker.com/ | sh') + os.system('pip install docker-compose') + +f = open('init.sh.example', 'r') +rules = f.read() % (name, name, conf) +f.close() + +f = open(service, 'w') +f.write(rules) +f.close() + +os.system('chmod 755 ' + service) +os.system('update-rc.d ' + name + ' defaults') + +print 'done' -- 2.39.5