Adapt multi process docker container to production environment

Dominik Sander 8 years ago
parent
commit
6b83fb5290
3 changed files with 34 additions and 43 deletions
  1. 1 24
      docker/Dockerfile
  2. 24 19
      docker/scripts/init
  3. 9 0
      docker/scripts/standalone-packages

+ 1 - 24
docker/Dockerfile

@@ -1,32 +1,9 @@
1
-FROM ubuntu:14.04
1
+FROM dsander/huginn-single-process:latest
2 2
 MAINTAINER Andrew Cantino
3 3
 
4
-ENV DEBIAN_FRONTEND noninteractive
5
-RUN apt-get update && \
6
-    apt-get install -y software-properties-common && \
7
-    add-apt-repository -y ppa:git-core/ppa && \
8
-    add-apt-repository -y ppa:brightbox/ruby-ng && \
9
-    apt-get update && \
10
-    apt-get install -y build-essential checkinstall postgresql-client \
11
-      git-core mysql-server redis-server python2.7 python-docutils \
12
-      libmysqlclient-dev libpq-dev zlib1g-dev libyaml-dev libssl-dev \
13
-      libgdbm-dev libreadline-dev libncurses5-dev libffi-dev \
14
-      libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev \
15
-      graphviz libgraphviz-dev \
16
-      ruby2.1 ruby2.1-dev supervisor python-pip && \
17
-    gem install --no-ri --no-rdoc bundler && \
18
-    rm -rf /var/lib/apt/lists/*
19
-
20
-RUN pip install supervisor-stdout
21
-
22
-ADD scripts/setup /scripts/setup
23
-RUN chmod 755 /scripts/setup
24
-RUN /scripts/setup
25
-
26 4
 WORKDIR /app
27 5
 
28 6
 ADD scripts/init /scripts/init
29
-RUN chmod 755 /scripts/init
30 7
 
31 8
 VOLUME /var/lib/mysql
32 9
 

+ 24 - 19
docker/scripts/init

@@ -3,9 +3,6 @@ set -e
3 3
 
4 4
 cd /app
5 5
 
6
-# Default to the environment variable values set in .env.example
7
-source /app/.env.example
8
-
9 6
 # Cleanup any leftover pid file
10 7
 if [ -f /app/tmp/pids/server.pid ]; then
11 8
   rm /app/tmp/pids/server.pid
@@ -15,27 +12,38 @@ fi
15 12
 # requires that the mysql or postgresql containers have exposed
16 13
 # port 3306 and 5432 respectively.
17 14
 if [ -n "${MYSQL_PORT_3306_TCP_ADDR}" ]; then
18
-  HUGINN_DATABASE_ADAPTER=${HUGINN_DATABASE_ADAPTER:-mysql2}
19
-  HUGINN_DATABASE_HOST=${HUGINN_DATABASE_HOST:-${MYSQL_PORT_3306_TCP_ADDR}}
20
-  HUGINN_DATABASE_PORT=${HUGINN_DATABASE_PORT:-${MYSQL_PORT_3306_TCP_PORT}}
15
+  DATABASE_ADAPTER=${DATABASE_ADAPTER:-mysql2}
16
+  DATABASE_HOST=${DATABASE_HOST:-${MYSQL_PORT_3306_TCP_ADDR}}
17
+  DATABASE_PORT=${DATABASE_PORT:-${MYSQL_PORT_3306_TCP_PORT}}
18
+  DATABASE_ENCODING=${DATABASE_ENCODING:-utf8mb4}
21 19
 elif [ -n "${POSTGRES_PORT_5432_TCP_ADDR}" ]; then
22
-  HUGINN_DATABASE_ADAPTER=${HUGINN_DATABASE_ADAPTER:-postgresql}
23
-  HUGINN_DATABASE_HOST=${HUGINN_DATABASE_HOST:-${POSTGRES_PORT_5432_TCP_ADDR}}
24
-  HUGINN_DATABASE_PORT=${HUGINN_DATABASE_PORT:-${POSTGRES_PORT_5432_TCP_PORT}}
20
+  DATABASE_ADAPTER=${DATABASE_ADAPTER:-postgresql}
21
+  DATABASE_HOST=${DATABASE_HOST:-${POSTGRES_PORT_5432_TCP_ADDR}}
22
+  DATABASE_PORT=${DATABASE_PORT:-${POSTGRES_PORT_5432_TCP_PORT}}
23
+  DATABASE_ENCODING=utf8
24
+else
25
+  DATABASE_PASSWORD=password
26
+  DATABASE_NAME=huginn_production
25 27
 fi
26 28
 
27
-grep = /app/.env.example | sed -e 's/^#\([^ ]\)/\1/' | grep -v -e '^#' | cut -d= -f1 | \
28
-  while read var ; do
29
-    eval "echo \"$var=\\\"\${HUGINN_$var:-\$$var}\\\"\""
29
+USE_GRAPHVIZ_DOT=${USE_GRAPHVIZ_DOT:-${USE_GRAPHVIZ_DOT:-dot}}
30
+
31
+IFS="="
32
+grep = /app/.env.example | sed -e 's/^#\([^ ]\)/\1/' | grep -v -e '^#' | \
33
+  while read var value ; do
34
+    eval "echo \"$var=\${$var:-\${HUGINN_$var-\$value}}\""
30 35
   done | grep -v -e ^= > /app/.env
31 36
 
37
+eval "echo RAILS_ENV=${RAILS_ENV:-${RAILS_ENV:-production}}" >> .env
38
+eval "echo ON_HEROKU=true" >> .env
39
+eval "echo RAILS_SERVE_STATIC_FILES=true" >> .env
40
+
32 41
 chmod ugo+r /app/.env
33 42
 source /app/.env
34 43
 sudo -u huginn -H bundle install --deployment --without test
35 44
 
36 45
 DATABASE_HOST=${HUGINN_DATABASE_HOST:-${DATABASE_HOST:-localhost}}
37 46
 DATABASE_ENCODING=${HUGINN_DATABASE_ENCODING:-${DATABASE_ENCODING}}
38
-USE_GRAPHVIZ_DOT=${HUGINN_USE_GRAPHVIZ_DOT:-${USE_GRAPHVIZ_DOT}}
39 47
 
40 48
 # use default port number if it is still not set
41 49
 case "${DATABASE_ADAPTER}" in
@@ -106,7 +114,7 @@ EOF
106 114
 
107 115
   # wait for mysql server to start (max 120 seconds)
108 116
   timeout=120
109
-  while ! mysqladmin -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} status >/dev/null 2>&1
117
+  while ! mysqladmin -u root status >/dev/null 2>&1
110 118
   do
111 119
     (( timeout = timeout - 1 ))
112 120
     if [ \$timeout -eq 0 ]; then
@@ -119,8 +127,7 @@ EOF
119 127
 
120 128
   if ! echo "USE \${DATABASE_NAME}" | mysql -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} >/dev/null 2>&1; then
121 129
     DB_INIT="yes"
122
-    echo "CREATE DATABASE IF NOT EXISTS \\\`\${DATABASE_NAME}\\\` DEFAULT CHARACTER SET \\\`utf8\\\` COLLATE \\\`utf8_unicode_ci\\\`;" | mysql -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
123
-    echo "GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON \\\`${DATABASE_NAME}\\\`.* TO 'root'@'localhost';" | mysql -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
130
+    echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('\${DATABASE_PASSWORD:\$DATABASE_PASSWORD}');" | mysql -u root
124 131
   fi
125 132
 fi
126 133
 supervisorctl start foreman >/dev/null
@@ -165,9 +172,7 @@ if [ -n "\${DATABASE_INITIAL_CONNECT_MAX_RETRIES}" ]; then
165 172
 fi
166 173
 
167 174
 # We may need to try and create a database
168
-if [ -n "\${CREATE_DB}" ]; then
169
- sudo -u huginn -EH bundle exec rake db:create
170
-fi
175
+sudo -u huginn -EH bundle exec rake db:create
171 176
 
172 177
 # Assuming we have a created database, run the migrations and seed it idempotently.
173 178
 if [ -z "\${DO_NOT_MIGRATE}" ]; then

+ 9 - 0
docker/scripts/standalone-packages

@@ -0,0 +1,9 @@
1
+DEBIAN_FRONTEND=noninteractive
2
+apt-get update
3
+apt-get install -y python2.7 python-docutils mysql-server \
4
+                   supervisor python-pip && \
5
+pip install supervisor-stdout
6
+rm -rf /var/lib/apt/lists/*
7
+rm -rf /usr/share/doc/
8
+rm -rf /usr/share/man/
9
+rm -rf /usr/share/locale/