start.sh 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/bash
  2. set -eu
  3. mongo_cli="mongo ${MONGODB_HOST}:${MONGODB_PORT}/${MONGODB_DATABASE} -u ${MONGODB_USERNAME} -p ${MONGODB_PASSWORD}"
  4. echo "Creating directories"
  5. mkdir -p /app/data/public/uploads /run/nodebb/logs /run/nodebb/public /run/nodebb/node_modules /run/nodebb/npm
  6. if [[ -z "$(ls -A /run/nodebb/public)" ]]; then
  7. echo "Copying public files"
  8. cp -rf /app/code/public_template/* /run/nodebb/public
  9. # symlink uploads for backup
  10. cp -rf /app/code/public_template/uploads/* /app/data/public/uploads
  11. rm -rf /run/nodebb/public/uploads
  12. ln -sf /app/data/public/uploads /run/nodebb/public/uploads
  13. # The public/ contains code that requires with relative links
  14. ln -s /app/code/src /run/nodebb/src
  15. fi
  16. # Some plugins write stuff into node_modules. Not nice :/
  17. echo "Moving node_modules"
  18. cp -rf /app/code/node_modules_copy/* /run/nodebb/node_modules
  19. chown -R cloudron:cloudron /app/data /run/nodebb
  20. export NODE_ENV=production
  21. export NODE_PATH=/app/code/node_modules
  22. if [[ ! -f /app/data/.setup_done ]]; then
  23. echo "Running initial setup"
  24. setup="{
  25. \"url\": \"${APP_ORIGIN}\",
  26. \"admin:username\": \"admin\",
  27. \"admin:password\": \"changeme\",
  28. \"admin:password:confirm\": \"changeme\",
  29. \"admin:email\": \"admin@cloudron.io\",
  30. \"database\": \"mongo\",
  31. \"mongo:host\": \"${MONGODB_HOST}\",
  32. \"mongo:port\": \"${MONGODB_PORT}\",
  33. \"mongo:username\": \"${MONGODB_USERNAME}\",
  34. \"mongo:password\": \"${MONGODB_PASSWORD}\",
  35. \"mongo:database\": \"${MONGODB_DATABASE}\"
  36. }"
  37. # this will create a config.json
  38. node /app/code/app --setup "${setup}"
  39. touch /app/data/.setup_done
  40. fi
  41. # load session secret
  42. if [[ -f /app/data/secret ]]; then
  43. secret=$(cat /app/data/secret)
  44. else
  45. secret=$(uuid)
  46. echo "${secret}" > /app/data/secret
  47. fi
  48. # Re-create config.json
  49. sed -e "s,##APP_ORIGIN,${APP_ORIGIN}," \
  50. -e "s/##MONGODB_HOST/${MONGODB_HOST}/" \
  51. -e "s/##MONGODB_PORT/${MONGODB_PORT}/" \
  52. -e "s/##MONGODB_USERNAME/${MONGODB_USERNAME}/" \
  53. -e "s/##MONGODB_PASSWORD/${MONGODB_PASSWORD}/" \
  54. -e "s/##MONGODB_DATABASE/${MONGODB_DATABASE}/" \
  55. -e "s/##SECRET/${secret}/" \
  56. /app/code/config.json.template > /run/nodebb/config.json
  57. echo "Checking plugins to be installed"
  58. for plugin in $(./nodebb plugins | grep 'nodebb-' | cut -f3 -d' '); do
  59. if [[ ! -d "/app/code/node_modules/${plugin}" ]]; then
  60. echo "Could not find plugin ${plugin}. Installing it"
  61. cd /app/code && /usr/local/bin/gosu cloudron:cloudron npm install "${plugin}"
  62. fi
  63. done
  64. echo "Updating nodebb"
  65. node /app/code/app --upgrade
  66. echo "Enabling the local mailer"
  67. ${mongo_cli} --eval "db.objects.update({ _key: \"settings:emailer-local\" }, { \$set: { \"emailer:local:host\": \"${MAIL_SMTP_SERVER}\", \"emailer:local:port\": \"${MAIL_SMTP_PORT}\", \"emailer:local:username\": \"${MAIL_SMTP_USERNAME}\", \"emailer:local:password\": \"${MAIL_SMTP_PASSWORD}\", \"emailer:local:secure\": \"off\" } }, { upsert: true })"
  68. ${mongo_cli} --eval "db.objects.update({ _key: \"config\" }, { \$set: { \"email:from\": \"${MAIL_FROM}\", \"email:from_name\": \"NodeBB\" } }, { upsert: true })"
  69. ${mongo_cli} --eval "db.objects.update({ _key: \"plugins:active\" }, { \$set: { \"value\": \"nodebb-plugin-emailer-local-bobo\", \"score\": \"0\" } }, { upsert: true })"
  70. echo "Starting nodebb"
  71. /usr/local/bin/gosu cloudron:cloudron node /app/code/loader.js --no-daemon --no-silent