init 5.0KB

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