#!/bin/bash set -e cd /app # Default to the environment variable values set in .env.example source /app/.env.example # is a mysql or postgresql database linked? # requires that the mysql or postgresql containers have exposed # port 3306 and 5432 respectively. if [ -n "${MYSQL_PORT_3306_TCP_ADDR}" ]; then DATABASE_ADAPTER=${DATABASE_ADAPTER:-mysql2} DATABASE_HOST=${DATABASE_HOST:-${MYSQL_PORT_3306_TCP_ADDR}} DATABASE_PORT=${DATABASE_PORT:-${MYSQL_PORT_3306_TCP_PORT}} elif [ -n "${POSTGRESQL_PORT_5432_TCP_ADDR}" ]; then DATABASE_ADAPTER=${DATABASE_ADAPTER:-postgres} DATABASE_HOST=${DATABASE_HOST:-${POSTGRESQL_PORT_5432_TCP_ADDR}} DATABASE_PORT=${DATABASE_PORT:-${POSTGRESQL_PORT_5432_TCP_PORT}} fi cat < /app/.env APP_SECRET_TOKEN=${HUGINN_APP_SECRET_TOKEN:-$APP_SECRET_TOKEN} DOMAIN=${HUGINN_DOMAIN:-$DOMAIN} ${ASSET_HOST:+ASSET_HOST=${HUGINN_ASSET_HOST:-$ASSET_HOST}} DATABASE_ADAPTER=${HUGINN_DATABASE_ADAPTER:-$DATABASE_ADAPTER} DATABASE_ENCODING=${HUGINN_DATABASE_ENCODING:-$DATABASE_ENCODING} DATABASE_RECONNECT=${HUGINN_DATABASE_RECONNECT:-$DATABASE_RECONNECT} DATABASE_NAME=${HUGINN_DATABASE_NAME:-$DATABASE_NAME} DATABASE_POOL=${HUGINN_DATABASE_POOL:-$DATABASE_POOL} DATABASE_USERNAME=${HUGINN_DATABASE_USERNAME:-$DATABASE_USERNAME} DATABASE_PASSWORD="${HUGINN_DATABASE_PASSWORD:-$DATABASE_PASSWORD}" DATABASE_HOST=${HUGINN_DATABASE_HOST:-${DATABASE_HOST:-localhost}} DATABASE_PORT=${HUGINN_DATABASE_PORT:-${DATABASE_PORT:-3306}} ${HUGINN_DATABASE_SOCKET:+DATABASE_SOCKET=${HUGINN_DATABASE_SOCKET}} ${HUGINN_RAILS_ENV:+RAILS_ENV=${HUGINN_RAILS_ENV}} FORCE_SSL=${HUGINN_FORCE_SSL:-$FORCE_SSL} INVITATION_CODE=${HUGINN_INVITATION_CODE:-$INVITATION_CODE} SMTP_DOMAIN=${HUGINN_SMTP_DOMAIM:-$SMTP_DOMAIN} SMTP_USER_NAME=${HUGINN_SMTP_USER_NAME:-$SMTP_USER_NAME} SMTP_PASSWORD=${HUGINN_SMTP_PASSWORD:-$SMTP_PASSWORD} SMTP_SERVER=${HUGINN_SMTP_SERVER:-$SMTP_SERVER} SMTP_PORT=${HUGINN_SMTP_PORT:-$SMTP_PORT} SMTP_AUTHENTICATION=${HUGINN_SMTP_AUTHENTICATION:-$SMTP_AUTHENTICATION} SMTP_ENABLE_STARTTLS_AUTO=${HUGINN_SMTP_ENABLE_STARTTLS_AUTO:-$SMTP_ENABLE_STARTTLS_AUTO} EMAIL_FROM_ADDRESS=${HUGINN_EMAIL_FROM_ADDRESS:-$EMAIL_FROM_ADDRESS} AGENT_LOG_LENGTH=${HUGINN_AGENT_LOG_LENGTH:-$AGENT_LOG_LENGTH} TWITTER_OAUTH_KEY=${HUGINN_TWITTER_OAUTH_KEY:-$TWITTER_OAUTH_KEY} TWITTER_OAUTH_SECRET=${HUGINN_TWITTER_OAUTH_SECRET:-$TWITTER_OAUTH_SECRET} THIRTY_SEVEN_SIGNALS_OAUTH_KEY=${HUGINN_THIRTY_SEVEN_SIGNALS_OAUTH_KEY:-$THIRTY_SEVEN_SIGNALS_OAUTH_KEY} THIRTY_SEVEN_SIGNALS_OAUTH_SECRET=${HUGINN_THIRTY_SEVEN_SIGNALS_OAUTH_SECRET:-$THIRTY_SEVEN_SIGNALS_OAUTH_SECRET} GITHUB_OAUTH_KEY=${HUGINN_GITHUB_OAUTH_KEY:-$GITHUB_OAUTH_KEY} GITHUB_OAUTH_SECRET=${HUGINN_GITHUB_OAUTH_SECRET:-$GITHUB_OAUTH_SECRET} AWS_ACCESS_KEY_ID="${HUGINN_AWS_ACCESS_KEY_ID:-$AWS_ACCESS_KEY_ID}" AWS_ACCESS_KEY="${HUGINN_AWS_ACCESS_KEY:-$AWS_ACCESS_KEY}" AWS_SANDBOX=${HUGINN_AWS_SANDBOX:-$AWS_SANDBOX} FARADAY_HTTP_BACKEND=${HUGINN_FARADAY_HTTP_BACKEND:-$FARADAY_HTTP_BACKEND} DEFAULT_HTTP_USER_AGENT=${HUGINN_DEFAULT_HTTP_USER_AGENT:-$DEFAULT_HTTP_USER_AGENT} ALLOW_JSONPATH_EVAL=${HUGINN_ALLOW_JSONPATH_EVAL:-$ALLOW_JSONPATH_EVAL} ENABLE_INSECURE_AGENTS=${HUGINN_ENABLE_INSECURE_AGENTS:-$HUGINN_ENABLE_INSECURE_AGENTS} ENABLE_SECOND_PRECISION_SCHEDULE=${HUGGIN_ENABLE_SECOND_PRECISION_SCHEDULE:-$ENABLE_SECOND_PRECISION_SCHEDULE} ${HUGINN_USE_GRAPHVIZ_DOT:+USE_GRAPHVIZ_DOT=${HUGINN_USE_GRAPHVIZ_DOT}} TIMEZONE="${HUGINN_TIMEZONE:-$TIMEZONE}" FAILED_JOBS_TO_KEEP=${HUGGIN_FAILED_JOBS_TO_KEEP:-$FAILED_JOBS_TO_KEEP} EOF chmod ugo+r /app/.env source /app/.env # use default port number if it is still not set case "${DATABASE_ADAPTER}" in mysql2) DATABASE_PORT=${DATABASE_PORT:-3306} ;; postgres) DATABASE_PORT=${DATABASE_PORT:-5432} ;; *) echo "Unsupported database adapter. Available adapters are mysql2, and postgres." && exit 1 ;; esac # start supervisord /usr/bin/supervisord -c /etc/supervisor/supervisord.conf # start mysql server if ${DATABASE_HOST} is localhost if [ "${DATABASE_HOST}" == "localhost" ]; then if [ "${DATABASE_ADAPTER}" == "postgres" ]; then echo "DATABASE_ADAPTER 'postgres' is not supported internally. Please provide DATABASE_HOST." exit 1 fi # configure supervisord to start mysql (manual) cat > /etc/supervisor/conf.d/mysqld.conf </dev/null # wait for mysql server to start (max 120 seconds) timeout=120 while ! mysqladmin -uroot ${DATABASE_PASSWORD:+-p$DATABASE_PASSWORD} status >/dev/null 2>&1 do timeout=$(expr $timeout - 1) if [ $timeout -eq 0 ]; then echo "Failed to start mysql server" exit 1 fi sleep 1 done if ! echo "USE ${DATABASE_NAME}" | mysql -uroot ${DATABASE_PASSWORD:+-p$DATABASE_PASSWORD} >/dev/null 2>&1; then DB_INIT="yes" echo "CREATE DATABASE IF NOT EXISTS \`${DATABASE_NAME}\` DEFAULT CHARACTER SET \`utf8\` COLLATE \`utf8_unicode_ci\`;" | mysql -uroot ${DATABASE_PASSWORD:+-p$DATABASE_PASSWORD} 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 # 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 [ -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 perl -pi -e 's/rails server$/rails server -p \$PORT/' /app/Procfile export PORT # Start huginn sudo -u huginn -EH bundle exec foreman start # As the ENTRYPOINT script, when this exits the docker container will Exit. exit 0