start.sh 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 /run/nodebb/build /run/nodebb/config
  6. export NODE_ENV=production
  7. export NODE_PATH=/app/code/node_modules
  8. # Some plugins write stuff into node_modules. Not nice :/
  9. echo "=> Moving node_modules"
  10. cp -rf /app/code/node_modules_copy/* /run/nodebb/node_modules
  11. cp /app/code/package-lock.json.copy /run/nodebb/package-lock.json
  12. cp /app/code/package.json.copy /run/nodebb/package.json
  13. if [[ -z "$(ls -A /run/nodebb/public)" ]]; then
  14. echo "=> Copying public files"
  15. cp -rf /app/code/public_template/* /run/nodebb/public
  16. # symlink uploads for backup
  17. cp -rf /app/code/public_template/uploads/* /app/data/public/uploads
  18. rm -rf /run/nodebb/public/uploads
  19. ln -sf /app/data/public/uploads /run/nodebb/public/uploads
  20. # The public/ contains code that requires with relative links
  21. ln -s /app/code/src /run/nodebb/src
  22. fi
  23. chown -R cloudron:cloudron /app/data /run/nodebb
  24. if [[ ! -f /app/data/.setup_done ]]; then
  25. echo "=> Running initial setup"
  26. setup="{
  27. \"url\": \"${APP_ORIGIN}\",
  28. \"admin:username\": \"admin\",
  29. \"admin:password\": \"changeme123\",
  30. \"admin:password:confirm\": \"changeme123\",
  31. \"admin:email\": \"admin@cloudron.io\",
  32. \"database\": \"mongo\",
  33. \"mongo:host\": \"${MONGODB_HOST}\",
  34. \"mongo:port\": \"${MONGODB_PORT}\",
  35. \"mongo:username\": \"${MONGODB_USERNAME}\",
  36. \"mongo:password\": \"${MONGODB_PASSWORD}\",
  37. \"mongo:database\": \"${MONGODB_DATABASE}\"
  38. }"
  39. # this will create a config.json
  40. cd /app/code && /usr/local/bin/gosu cloudron:cloudron node /app/code/app --setup "${setup}" --series
  41. touch /app/data/.setup_done
  42. fi
  43. # load session secret
  44. if [[ -f /app/data/secret ]]; then
  45. secret=$(cat /app/data/secret)
  46. else
  47. secret=$(uuid)
  48. echo "${secret}" > /app/data/secret
  49. fi
  50. # Re-create config.json
  51. sed -e "s,##APP_ORIGIN,${APP_ORIGIN}," \
  52. -e "s/##MONGODB_HOST/${MONGODB_HOST}/" \
  53. -e "s/##MONGODB_PORT/${MONGODB_PORT}/" \
  54. -e "s/##MONGODB_USERNAME/${MONGODB_USERNAME}/" \
  55. -e "s/##MONGODB_PASSWORD/${MONGODB_PASSWORD}/" \
  56. -e "s/##MONGODB_DATABASE/${MONGODB_DATABASE}/" \
  57. -e "s/##SECRET/${secret}/" \
  58. /app/code/config.json.template > /run/nodebb/config.json
  59. echo "=> Checking plugins to be installed"
  60. for plugin in $(./nodebb plugins | grep 'nodebb-' | cut -f3 -d' '); do
  61. if [[ ! -d "/app/code/node_modules/${plugin}" ]]; then
  62. echo "Could not find plugin ${plugin}. Installing it"
  63. # note that without --save, npm install will remove the previous plugins!
  64. cd /app/code && /usr/local/bin/gosu cloudron:cloudron npm install --save "${plugin}"
  65. fi
  66. done
  67. echo "Setting up email"
  68. ${mongo_cli} --eval "db.objects.update({ _key: 'config' }, { \$set: { 'email:smtpTransport:enabled': '1', 'email:smtpTransport:service': 'nodebb-custom-smtp', 'email:smtpTransport:host': '${MAIL_SMTP_SERVER}', 'email:smtpTransport:port': '${MAIL_SMTP_PORT}', 'email:smtpTransport:user': '${MAIL_SMTP_USERNAME}', 'email:smtpTransport:pass': '${MAIL_SMTP_PASSWORD}', 'email:smtpTransport:security': 'NONE', 'email:from': '${MAIL_FROM}' } }, { upsert: true })"
  69. # there are 3 binaries
  70. # nodebb - this is used for controlling nodebb (start/stop/restart) etc
  71. # loader - this is what "nodebb start" starts. loader spawns 'n' number of app(s)
  72. # app - this is what "nodebb build" calls
  73. echo "=> Updating nodebb (and building assets)"
  74. series=1 /usr/local/bin/gosu cloudron:cloudron /app/code/nodebb upgrade --schema --build
  75. echo "=> Starting nodebb"
  76. series=1 exec /usr/local/bin/gosu cloudron:cloudron node /app/code/loader.js --no-daemon --no-silent