setup_env 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/bin/bash
  2. set -e
  3. export LC_ALL=en_US.UTF-8
  4. cd /app
  5. export HOME=/app
  6. if ! whoami &> /dev/null; then
  7. if [ -w /etc/passwd ]; then
  8. echo "${USER_NAME:-default}:x:$(id -u):0:${USER_NAME:-default} user:${HOME}:/sbin/nologin" >> /etc/passwd
  9. fi
  10. fi
  11. # Do we have a Rails secret yet?
  12. # If not, generate one, but persist it for the container's lifetime.
  13. if [ -z "$APP_SECRET_TOKEN" ] && grep -q ^APP_SECRET_TOKEN=REPLACE_ME_NOW .env.example; then
  14. echo 'Generating random APP_SECRET_TOKEN.'
  15. secret=$(dd if=/dev/urandom bs=36 count=1 | openssl base64)
  16. sed -i "s:REPLACE_ME_NOW!:$secret:" .env.example
  17. fi
  18. # is a mysql or postgresql database linked?
  19. # requires that the mysql or postgresql containers have exposed
  20. # port 3306 and 5432 respectively.
  21. if [[ -n "${MYSQL_PORT_3306_TCP_ADDR}" || ("${DATABASE_ADAPTER}" == "mysql2" && -n "${DATABASE_HOST}") ]]; then
  22. DATABASE_ADAPTER=${DATABASE_ADAPTER:-mysql2}
  23. DATABASE_HOST=${DATABASE_HOST:-${MYSQL_PORT_3306_TCP_ADDR}}
  24. DATABASE_PORT=${DATABASE_PORT:-${MYSQL_PORT_3306_TCP_PORT:-3306}}
  25. DATABASE_ENCODING=${DATABASE_ENCODING:-utf8mb4}
  26. elif [[ -n "${POSTGRES_PORT_5432_TCP_ADDR}" || ("${DATABASE_ADAPTER}" == "postgresql" && -n "${DATABASE_HOST}") ]]; then
  27. DATABASE_ADAPTER=${DATABASE_ADAPTER:-postgresql}
  28. DATABASE_HOST=${DATABASE_HOST:-${POSTGRES_PORT_5432_TCP_ADDR}}
  29. DATABASE_PORT=${DATABASE_PORT:-${POSTGRES_PORT_5432_TCP_PORT:-5432}}
  30. DATABASE_ENCODING=utf8
  31. else
  32. START_MYSQL=${START_MYSQL:-true}
  33. fi
  34. USE_GRAPHVIZ_DOT=${HUGINN_USE_GRAPHVIZ_DOT:-${USE_GRAPHVIZ_DOT:-dot}}
  35. DATABASE_HOST=${HUGINN_DATABASE_HOST:-${DATABASE_HOST:-localhost}}
  36. DATABASE_PORT=${HUGINN_DATABASE_PORT:-${DATABASE_PORT}}
  37. DATABASE_ENCODING=${HUGINN_DATABASE_ENCODING:-${DATABASE_ENCODING}}
  38. DATABASE_PASSWORD=${HUGINN_DATABASE_PASSWORD:-${DATABASE_PASSWORD:-password}}
  39. DATABASE_NAME=${HUGINN_DATABASE_NAME:-${DATABASE_NAME:-huginn_production}}
  40. RAILS_ENV=${HUGINN_RAILS_ENV:-${RAILS_ENV:-production}}
  41. # Add ENV variables to .env.example which are not present in it but usable
  42. cat >> /app/.env.example <<EOF
  43. ASSET_HOST=
  44. DEFAULT_SCENARIO_FILE=
  45. RAILS_SERVE_STATIC_FILES=
  46. SEED_EMAIL=
  47. SEED_PASSWORD=
  48. SEED_USERNAME=
  49. SMTP_OPENSSL_CA_FILE=
  50. SMTP_OPENSSL_CA_PATH=
  51. SMTP_OPENSSL_VERIFY_MODE=
  52. EOF
  53. # Default to the environment variable values set in .env.example
  54. IFS="="
  55. sed -n -r -e 's/^#?([A-Za-z0-9_]+ *=.*)/\1/p' /app/.env.example | \
  56. while read var value ; do
  57. eval "echo \"$var=\${HUGINN_$var:-\${$var:-\$value}}\""
  58. done > /app/.env
  59. PORT=${HUGINN_PORT:-${PORT:-3000}}
  60. echo "PORT=$(echo $PORT|awk -F ':' '{print $NF}')" >> .env
  61. echo "RAILS_ENV=${RAILS_ENV}" >> .env
  62. echo "RAILS_LOG_TO_STDOUT=true" >> .env
  63. echo "RAILS_SERVE_STATIC_FILES=true" >> .env
  64. echo "START_MYSQL=${START_MYSQL}" >> .env
  65. chmod ugo+r /app/.env
  66. source /app/.env
  67. # use default port number if it is still not set
  68. case "${DATABASE_ADAPTER}" in
  69. mysql2) DATABASE_PORT=${DATABASE_PORT:-3306} ;;
  70. postgresql) DATABASE_PORT=${DATABASE_PORT:-5432} ;;
  71. *) echo "Unsupported database adapter. Available adapters are mysql2, and postgresql." && exit 1 ;;
  72. esac
  73. bundle install --without test development --path vendor/bundle
  74. # Configure the unicorn server
  75. cp -a config/unicorn.rb.example config/unicorn.rb
  76. sed -ri 's/^listen .*$/listen ENV["PORT"]/' config/unicorn.rb
  77. sed -ri 's/^stderr_path.*$//' config/unicorn.rb
  78. sed -ri 's/^stdout_path.*$//' config/unicorn.rb
  79. sed -ri 's/^pid.*$//' config/unicorn.rb
  80. mkdir -p tmp/pids tmp/cache tmp/sockets log