Added ianblenke/docker-huginn as docker/ subdirectory, moved Dockerfile out of the root and renamed as Dockerfile.rbenv

Ian Blenke 10 anos atrás
pai
commit
a44ac45376
6 arquivos alterados com 330 adições e 0 exclusões
  1. 29 0
      docker/Dockerfile
  2. 0 0
      docker/Dockerfile.rbenv
  3. 2 0
      docker/Makefile
  4. 124 0
      docker/README.md
  5. 136 0
      docker/scripts/init
  6. 39 0
      docker/scripts/setup

+ 29 - 0
docker/Dockerfile

@@ -0,0 +1,29 @@
1
+FROM ubuntu:14.04
2
+MAINTAINER ian@blenke.com 
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
+      ruby2.1 ruby2.1-dev supervisor && \
16
+    gem install --no-ri --no-rdoc bundler && \
17
+    rm -rf /var/lib/apt/lists/*
18
+
19
+ADD scripts/ /scripts
20
+RUN chmod 755 /scripts/setup /scripts/init
21
+
22
+RUN /scripts/setup
23
+
24
+VOLUME /var/lib/mysql
25
+
26
+EXPOSE 5000
27
+
28
+CMD ["/scripts/init"]
29
+

Dockerfile → docker/Dockerfile.rbenv


+ 2 - 0
docker/Makefile

@@ -0,0 +1,2 @@
1
+build:
2
+	docker build -t cantino/huginn .

+ 124 - 0
docker/README.md

@@ -0,0 +1,124 @@
1
+Huginn for docker with multiple container linkage
2
+=================================================
3
+
4
+This image runs a linkable [Huginn](https://github.com/cantino/huginn) instance.
5
+
6
+There is an automated build repository on docker hub for [cantino/huginn](https://registry.hub.docker.com/builds/github/cantino/huginn/).
7
+
8
+This was patterned after [sameersbn/gitlab](https://registry.hub.docker.com/u/sameersbn/gitlab) by [ianblenke/huginn](http://github.com/ianblenke/huginn), and imported here for official generation of a docker hub auto-build image.
9
+
10
+The scripts/init script generates a .env file containing the variables as passed as per normal Huginn documentation.
11
+The same environment variables that would be used for Heroku PaaS deployment are used by this script.
12
+
13
+The scripts/init script is aware of mysql and postgres linked containers through the environment variables:
14
+
15
+    MYSQL_PORT_3306_TCP_ADDR
16
+    MYSQL_PORT_3306_TCP_PORT
17
+
18
+and
19
+
20
+    POSTGRESQL_PORT_5432_TCP_ADDR
21
+    POSTGRESQL_PORT_5432_TCP_PORT
22
+
23
+Its recommended to use an image that allows you to create a database via environmental variables at docker run, like `paintedfox / postgresql` or `centurylink / mysql`, so the db is populated when this script runs.
24
+
25
+If you do not link a database container, a built-in mysql database will be started.
26
+There is an exported docker volume of /var/lib/mysql to allow persistence of that mysql database.
27
+
28
+Additionally, the database variables may be overridden from the above as per the standard Huginn documentation:
29
+
30
+    DATABASE_ADAPTER #(must be either 'postgres' or 'mysql2')
31
+    DATABASE_HOST
32
+    DATABASE_PORT
33
+
34
+This script will run database migrations (rake db:migrate) which should be idempotent.
35
+
36
+It will also seed the database (rake db:seed) unless this is defined:
37
+
38
+    DO_NOT_SEED
39
+
40
+This same seeding initially defines the "admin" user with a default password of "password" as per the standard Huginn documentation.
41
+
42
+If you do not wish to have the default 6 agents, you will want to set the above environment variable after your initially deploy, otherwise they will be added automatically the next time a container pointing at the database is spun up.
43
+
44
+The CMD launches Huginn via the scripts/init script. This may become the ENTRYPOINT later.  It does take under a minute for Huginn to come up.  Use environmental variables that match your DB's creds to ensure it works.
45
+
46
+## Usage
47
+
48
+Simple stand-alone usage:
49
+
50
+    docker run -it -p 5000:5000 cantino/huginn
51
+
52
+To link to another mysql container, for example:
53
+
54
+    docker run --rm --name newcentury_mysql -p 3306 \
55
+        -e MYSQL_DATABASE=huginn \
56
+        -e MYSQL_USER=huginn \
57
+        -e MYSQL_PASSWORD=somethingsecret \
58
+        -e MYSQL_ROOT_PASSWORD=somethingevenmoresecret \
59
+        cantino/huginn
60
+    docker run --rm --name huginn --link newcentury_mysql:MYSQL -p 5000:5000 \
61
+        -e DATABASE_NAME=huginn \
62
+        -e DATABASE_USER=huginn \
63
+        -e DATABASE_PASSWORD=somethingsecret \
64
+        cantino/huginn
65
+
66
+To link to another container named 'postgres':
67
+
68
+    docker run --rm --name huginn --link POSTGRES:mysql -p 5000:5000 -e "DATABASE_USER=huginn" -e "DATABASE_PASSWORD=pass@word" cantino/huginn
69
+
70
+## Environment Variables
71
+
72
+Other Huginn 12factored environment variables of note, as generated and put into the .env file as per Huginn documentation:
73
+
74
+    APP_SECRET_TOKEN=${APP_SECRET_TOKEN:-CHANGEME}
75
+    DOMAIN=${HUGINN_HOST:-localhost}:${PORT:-5000}
76
+    ${ASSET_HOST:+ASSET_HOST=${ASSET_HOST}}
77
+    DATABASE_ADAPTER=${DATABASE_ADAPTER:-mysql2}
78
+    DATABASE_ENCODING=${DATABASE_ENCODING:-utf8}
79
+    DATABASE_RECONNECT=${DATABASE_RECONNECT:-true}
80
+    DATABASE_NAME=${DATABASE_NAME:-huginn}
81
+    DATABASE_POOL=${DATABASE_POOL:-5}
82
+    DATABASE_USERNAME=${DATABASE_USERNAME:-root}
83
+    DATABASE_PASSWORD="${DATABASE_PASSWORD}"
84
+    DATABASE_PORT=${DATABASE_PORT:-3306}
85
+    DATABASE_HOST=${DATABASE_HOST:-localhost}
86
+    DATABASE_PORT=${DATABASE_PORT:-3306}
87
+    ${DATABASE_SOCKET:+DATABASE_SOCKET=${DATABASE_SOCKET:-/tmp/mysql.sock}}
88
+    ${RAILS_ENV:+RAILS_ENV=${RAILS_ENV:-production}}
89
+    FORCE_SSL=${FORCE_SSL:-false}
90
+    INVITATION_CODE=${INVITATION_CODE:-try-huginn}
91
+    SMTP_DOMAIN=${SMTP_DOMAIM=-example.com}
92
+    SMTP_USER_NAME=${SMTP_USER_NAME:-you@gmail.com}
93
+    SMTP_PASSWORD=${SMTP_PASSWORD:-somepassword}
94
+    SMTP_SERVER=${SMTP_SERVER:-smtp.gmail.com}
95
+    SMTP_PORT=${SMTP_PORT:-587}
96
+    SMTP_AUTHENTICATION=${SMTP_AUTHENTICATION:-plain}
97
+    SMTP_ENABLE_STARTTLS_AUTO=${SMTP_ENABLE_STARTTLS_AUTO:-true}
98
+    EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS:-huginn@example.com}
99
+    AGENT_LOG_LENGTH=${AGENT_LOG_LENGTH:-200}
100
+    AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID:-your aws access key id}"
101
+    AWS_ACCESS_KEY="${AWS_ACCESS_KEY:-your aws access key}"
102
+    AWS_SANDBOX=${AWS_SANDBOX:-false}
103
+    FARADAY_HTTP_BACKEND=${FARADAY_HTTP_BACKEND:-typhoeus}
104
+    DEFAULT_HTTP_USER_AGENT="${DEFAULT_HTTP_USER_AGENT:-Huginn - https://github.com/cantino/huginn}"
105
+    ALLOW_JSONPATH_EVAL=${ALLOW_JSONPATH_EVAL:-false}
106
+    ENABLE_INSECURE_AGENTS=${ENABLE_INSECURE_AGENTS:-false}
107
+    ${USE_GRAPHVIZ_DOT:+USE_GRAPHVIZ_DOT=${USE_GRAPHVIZ_DOT:-dot}}
108
+    TIMEZONE="${TIMEZONE:-Pacific Time (US & Canada)}"
109
+
110
+The defaults used are the Huginn defaults as per the [.env.example](https://github.com/cantino/huginn/blob/master/.env.example) file.
111
+
112
+## Building on your own
113
+
114
+You don't need to do this on your own, because there is an [automated build](https://registry.hub.docker.com/u/cantino/huginn/) for this repository, but if you really want:
115
+
116
+    docker build --rm=true --tag={yourname}/huginn .
117
+
118
+## Source
119
+
120
+The source is [available on GitHub](https://github.com/cantino/docker-huginn/).
121
+
122
+Please feel free to submit pull requests and/or fork at your leisure.
123
+
124
+

+ 136 - 0
docker/scripts/init

@@ -0,0 +1,136 @@
1
+#!/bin/bash
2
+set -e
3
+
4
+cd /app
5
+
6
+# is a mysql or postgresql database linked?
7
+# requires that the mysql or postgresql containers have exposed
8
+# port 3306 and 5432 respectively.
9
+if [ -n "${MYSQL_PORT_3306_TCP_ADDR}" ]; then
10
+  DATABASE_ADAPTER=${DATABASE_ADAPTER:-mysql2}
11
+  DATABASE_HOST=${DATABASE_HOST:-${MYSQL_PORT_3306_TCP_ADDR}}
12
+  DATABASE_PORT=${DATABASE_PORT:-${MYSQL_PORT_3306_TCP_PORT}}
13
+elif [ -n "${POSTGRESQL_PORT_5432_TCP_ADDR}" ]; then
14
+  DATABASE_ADAPTER=${DATABASE_ADAPTER:-postgres}
15
+  DATABASE_HOST=${DATABASE_HOST:-${POSTGRESQL_PORT_5432_TCP_ADDR}}
16
+  DATABASE_PORT=${DATABASE_PORT:-${POSTGRESQL_PORT_5432_TCP_PORT}}
17
+fi
18
+
19
+cat <<EOF > /app/.env
20
+APP_SECRET_TOKEN=${APP_SECRET_TOKEN:-CHANGEME}
21
+DOMAIN=${DOMAIN:+${HUGINN_HOST:-localhost}:${PORT:-5000}}
22
+${ASSET_HOST:+ASSET_HOST=${ASSET_HOST}}
23
+DATABASE_ADAPTER=${DATABASE_ADAPTER:-mysql2}
24
+DATABASE_ENCODING=${DATABASE_ENCODING:-utf8}
25
+DATABASE_RECONNECT=${DATABASE_RECONNECT:-true}
26
+DATABASE_NAME=${DATABASE_NAME:-huginn}
27
+DATABASE_POOL=${DATABASE_POOL:-5}
28
+DATABASE_USERNAME=${DATABASE_USERNAME:-root}
29
+DATABASE_PASSWORD="${DATABASE_PASSWORD}"
30
+DATABASE_PORT=${DATABASE_PORT:-3306}
31
+DATABASE_HOST=${DATABASE_HOST:-localhost}
32
+DATABASE_PORT=${DATABASE_PORT:-3306}
33
+${DATABASE_SOCKET:+DATABASE_SOCKET=${DATABASE_SOCKET:-/tmp/mysql.sock}}
34
+${RAILS_ENV:+RAILS_ENV=${RAILS_ENV:-production}}
35
+FORCE_SSL=${FORCE_SSL:-false}
36
+INVITATION_CODE=${INVITATION_CODE:-try-huginn}
37
+SMTP_DOMAIN=${SMTP_DOMAIM=-example.com}
38
+SMTP_USER_NAME=${SMTP_USER_NAME:-you@gmail.com}
39
+SMTP_PASSWORD=${SMTP_PASSWORD:-somepassword}
40
+SMTP_SERVER=${SMTP_SERVER:-smtp.gmail.com}
41
+SMTP_PORT=${SMTP_PORT:-587}
42
+SMTP_AUTHENTICATION=${SMTP_AUTHENTICATION:-plain}
43
+SMTP_ENABLE_STARTTLS_AUTO=${SMTP_ENABLE_STARTTLS_AUTO:-true}
44
+EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS:-huginn@example.com}
45
+AGENT_LOG_LENGTH=${AGENT_LOG_LENGTH:-200}
46
+AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID:-your aws access key id}"
47
+AWS_ACCESS_KEY="${AWS_ACCESS_KEY:-your aws access key}"
48
+AWS_SANDBOX=${AWS_SANDBOX:-false}
49
+FARADAY_HTTP_BACKEND=${FARADAY_HTTP_BACKEND:-typhoeus}
50
+DEFAULT_HTTP_USER_AGENT="${DEFAULT_HTTP_USER_AGENT:-Huginn - https://github.com/cantino/huginn}"
51
+ALLOW_JSONPATH_EVAL=${ALLOW_JSONPATH_EVAL:-false}
52
+ENABLE_INSECURE_AGENTS=${ENABLE_INSECURE_AGENTS:-false}
53
+${USE_GRAPHVIZ_DOT:+USE_GRAPHVIZ_DOT=${USE_GRAPHVIZ_DOT:-dot}}
54
+TIMEZONE="${TIMEZONE:-Pacific Time (US & Canada)}"
55
+EOF
56
+chmod ugo+r /app/.env
57
+source /app/.env
58
+
59
+# use default port number if it is still not set
60
+case "${DATABASE_ADAPTER}" in
61
+  mysql2) DATABASE_PORT=${DATABASE_PORT:-3306} ;;
62
+  postgres) DATABASE_PORT=${DATABASE_PORT:-5432} ;;
63
+  *) echo "Unsupported database adapter. Available adapters are mysql2, and postgres." && exit 1 ;;
64
+esac
65
+
66
+# start supervisord
67
+/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
68
+
69
+# start mysql server if ${DATABASE_HOST} is localhost
70
+if [ "${DATABASE_HOST}" == "localhost" ]; then
71
+  if [ "${DATABASE_ADAPTER}" == "postgres" ]; then
72
+    echo "DATABASE_ADAPTER 'postgres' is not supported internally. Please provide DATABASE_HOST."
73
+    exit 1
74
+  fi
75
+
76
+  # configure supervisord to start mysql (manual)
77
+  cat > /etc/supervisor/conf.d/mysqld.conf <<EOF
78
+[program:mysqld]
79
+priority=20
80
+directory=/tmp
81
+command=/usr/bin/mysqld_safe
82
+user=root
83
+autostart=false
84
+autorestart=true
85
+stdout_logfile=/var/log/supervisor/%(program_name)s.log
86
+stderr_logfile=/var/log/supervisor/%(program_name)s.log
87
+EOF
88
+  supervisorctl reload
89
+
90
+  # fix permissions and ownership of /var/lib/mysql
91
+  chown -R mysql:mysql /var/lib/mysql
92
+  chmod 700 /var/lib/mysql
93
+
94
+  # initialize MySQL data directory
95
+  if [ ! -d /var/lib/mysql/mysql ]; then
96
+    mysql_install_db --user=mysql
97
+  fi
98
+
99
+  echo "Starting mysql server..."
100
+  supervisorctl start mysqld >/dev/null
101
+
102
+  # wait for mysql server to start (max 120 seconds)
103
+  timeout=120
104
+  while ! mysqladmin -uroot ${DATABASE_PASSWORD:+-p$DATABASE_PASSWORD} status >/dev/null 2>&1
105
+  do
106
+    timeout=$(expr $timeout - 1)
107
+    if [ $timeout -eq 0 ]; then
108
+      echo "Failed to start mysql server"
109
+      exit 1
110
+    fi
111
+    sleep 1
112
+  done
113
+
114
+  if ! echo "USE ${DATABASE_NAME}" | mysql -uroot ${DATABASE_PASSWORD:+-p$DATABASE_PASSWORD} >/dev/null 2>&1; then
115
+    DB_INIT="yes"
116
+    echo "CREATE DATABASE IF NOT EXISTS \`${DATABASE_NAME}\` DEFAULT CHARACTER SET \`utf8\` COLLATE \`utf8_unicode_ci\`;" | mysql -uroot ${DATABASE_PASSWORD:+-p$DATABASE_PASSWORD}
117
+    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}
118
+  fi
119
+fi
120
+
121
+# Assuming we have a created database, run the migrations and seed it idempotently.
122
+[ -z "${DO_NOT_MIGRATE}" ] && sudo -u huginn -EH bundle exec rake db:migrate
123
+[ -z "${DO_NOT_SEED}" ] && sudo -u huginn -EH bundle exec rake db:seed
124
+
125
+[ -n "$INTENTIONALLY_SLEEP" ] && sleep $INTENTIONALLY_SLEEP
126
+
127
+# Fixup the Procfile and prepare the PORT
128
+[ -z "${DO_NOT_RUN_JOBS}" ] && perl -pi -e 's/^jobs:/#jobs:/' /app/Procfile
129
+perl -pi -e 's/rails server$/rails server -p \$PORT/' /app/Procfile
130
+export PORT
131
+
132
+# Start huginn
133
+sudo -u huginn -EH bundle exec foreman start
134
+
135
+# As the ENTRYPOINT script, when this exits the docker container will Exit.
136
+exit 0

+ 39 - 0
docker/scripts/setup

@@ -0,0 +1,39 @@
1
+#!/bin/bash
2
+set -e
3
+
4
+# Initialize variables used by Huginn at installation time
5
+
6
+# Huginn is 12factor aware, embrace that fact for use inside of docker
7
+ON_HEROKU=${ON_HEROKU:-true}
8
+
9
+# Shallow clone the huginn project repo
10
+git clone --depth 1 https://github.com/cantino/huginn /app
11
+
12
+cd /app
13
+
14
+# add a huginn group and user
15
+adduser --group huginn
16
+adduser --disabled-login --ingroup huginn --gecos 'Huginn' --no-create-home --home /app huginn
17
+adduser huginn sudo
18
+passwd -d huginn
19
+
20
+# Change the ownership to huginn
21
+chown -R huginn:huginn /app
22
+
23
+# create required tmp and log directories
24
+sudo -u huginn -H mkdir -p tmp/pids tmp/cache tmp/sockets log
25
+chmod -R u+rwX log tmp
26
+
27
+# install gems required by Huginn, use local cache if available
28
+if [ -d "/scripts/cache" ]; then
29
+  mv /scripts/cache vendor/
30
+  chown -R huginn:huginn vendor/cache
31
+fi
32
+sudo -u huginn -H bundle install --deployment --without development test
33
+
34
+# silence setlocale message (THANKS DEBIAN!)
35
+cat > /etc/default/locale <<EOF
36
+LC_ALL=en_US.UTF-8
37
+LANG=en_US.UTF-8
38
+EOF
39
+