From bff5e75ec02281ae2e91d2c0516f79bb6f3c360b Mon Sep 17 00:00:00 2001 From: Ian Blenke Date: Mon, 12 Jan 2015 21:36:58 -0500 Subject: [PATCH] Refactoring the docker image to exec supervisord and properly handle DO_NOT_RUN_JOBS --- docker/Dockerfile | 4 ++- docker/scripts/init | 76 +++++++++++++++++++++++++++++++++++++++----- docker/scripts/setup | 2 +- 3 files changed, 72 insertions(+), 10 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index bee6eb0e..fed77288 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -13,10 +13,12 @@ RUN apt-get update && \ libgdbm-dev libreadline-dev libncurses5-dev libffi-dev \ libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev \ graphviz libgraphviz-dev \ - ruby2.1 ruby2.1-dev supervisor && \ + ruby2.1 ruby2.1-dev supervisor python-pip && \ gem install --no-ri --no-rdoc bundler && \ rm -rf /var/lib/apt/lists/* +RUN pip install supervisor-stdout + ADD scripts/ /scripts RUN chmod 755 /scripts/setup /scripts/init diff --git a/docker/scripts/init b/docker/scripts/init index 769a6ba9..2a511594 100755 --- a/docker/scripts/init +++ b/docker/scripts/init @@ -38,9 +38,29 @@ case "${DATABASE_ADAPTER}" in *) echo "Unsupported database adapter. Available adapters are mysql2, and postgres." && exit 1 ;; esac -# start supervisord -/usr/bin/supervisord -c /etc/supervisor/supervisord.conf +# initialize supervisord config +cat > /etc/supervisor/conf.d/supervisord.conf < /tmp/bootstrap.sh +#!/bin/bash -xe # start mysql server if ${DATABASE_HOST} is localhost if [ "${DATABASE_HOST}" == "localhost" ]; then if [ "${DATABASE_ADAPTER}" == "postgres" ]; then @@ -57,8 +77,8 @@ command=/usr/bin/mysqld_safe user=root autostart=false autorestart=true -stdout_logfile=/var/log/supervisor/%(program_name)s.log -stderr_logfile=/var/log/supervisor/%(program_name)s.log +stdout_events_enabled=true +stderr_events_enabled=true EOF supervisorctl reload @@ -92,7 +112,29 @@ EOF echo "GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON \`${DATABASE_NAME}\`.* TO 'root'@'localhost';" | mysql -uroot ${DATABASE_PASSWORD:+-p$DATABASE_PASSWORD} fi fi +supervisorctl start huginn >/dev/null +BOOTSTRAP +chmod 755 /tmp/bootstrap.sh + +cat > /etc/supervisor/conf.d/bootstrap.conf < /tmp/foreman.sh +#!/bin/bash # Assuming we have a created database, run the migrations and seed it idempotently. [ -z "${DO_NOT_MIGRATE}" ] && sudo -u huginn -EH bundle exec rake db:migrate [ -z "${DO_NOT_SEED}" ] && sudo -u huginn -EH bundle exec rake db:seed @@ -100,12 +142,30 @@ fi [ -n "$INTENTIONALLY_SLEEP" ] && sleep $INTENTIONALLY_SLEEP # Fixup the Procfile and prepare the PORT -[ -z "${DO_NOT_RUN_JOBS}" ] && perl -pi -e 's/^jobs:/#jobs:/' /app/Procfile +[ -n "${DO_NOT_RUN_JOBS}" ] && perl -pi -e 's/^jobs:/#jobs:/' /app/Procfile perl -pi -e 's/rails server$/rails server -p \$PORT/' /app/Procfile export PORT # Start huginn -sudo -u huginn -EH bundle exec foreman start +exec sudo -u huginn -EH bundle exec foreman start +FOREMAN -# As the ENTRYPOINT script, when this exits the docker container will Exit. -exit 0 +chmod 755 /tmp/foreman.sh + +cat > /etc/supervisor/conf.d/foreman.conf <