start.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. # set -eu -o pipefail
  3. echo "=> local.py"
  4. sed -e "s/##APP_DOMAIN##/${APP_DOMAIN}/" \
  5. -e "s/##MAIL_DOMAIN##/${MAIL_DOMAIN}/" \
  6. -e "s/##MAIL_FROM##/${MAIL_FROM}/" \
  7. -e "s/##MAIL_SMTP_SERVER##/${MAIL_SMTP_SERVER}/" \
  8. -e "s/##MAIL_SMTP_PORT##/${MAIL_SMTP_PORT}/" \
  9. -e "s/##MAIL_SMTP_USERNAME##/${MAIL_SMTP_USERNAME}/" \
  10. -e "s/##MAIL_SMTP_PASSWORD##/${MAIL_SMTP_PASSWORD}/" \
  11. -e "s/##POSTGRESQL_DATABASE##/${POSTGRESQL_DATABASE}/" \
  12. -e "s/##POSTGRESQL_USERNAME##/${POSTGRESQL_USERNAME}/" \
  13. -e "s/##POSTGRESQL_PASSWORD##/${POSTGRESQL_PASSWORD}/" \
  14. -e "s/##POSTGRESQL_HOST##/${POSTGRESQL_HOST}/" \
  15. -e "s/##POSTGRESQL_PORT##/${POSTGRESQL_PORT}/" \
  16. /app/code/local.py > /run/local.py
  17. if [[ -n "${LDAP_SERVER:-}" ]]; then
  18. echo "=> setup ldap"
  19. sed -e "s/##LDAP_SERVER##/${LDAP_SERVER}/" \
  20. -e "s/##LDAP_PORT##/${LDAP_PORT}/" \
  21. -e "s/##LDAP_USERS_BASE_DN##/${LDAP_USERS_BASE_DN}/" \
  22. /app/code/local_ldap.py >> /run/local.py
  23. fi
  24. # create and merge any user local.py
  25. if [[ ! -f /app/data/customlocal.py ]]; then
  26. echo -e "# Place custom local.py settings in this file\n" > /app/data/customlocal.py
  27. fi
  28. cat /app/data/customlocal.py >> /run/local.py
  29. # create and merge any user conf.json
  30. if [[ ! -f /app/data/conf.json ]]; then
  31. echo "{}" > /app/data/conf.json
  32. fi
  33. if [[ -n "${LDAP_SERVER:-}" ]]; then
  34. echo "=> Update conf.json with LDAP"
  35. node /app/code/json-merge.js /app/data/conf.json /app/code/conf_ldap.json
  36. else
  37. echo "=> Update conf.json"
  38. node /app/code/json-merge.js /app/data/conf.json /app/code/conf.json
  39. fi
  40. /app/code/node_modules/.bin/json -I -f /app/data/conf.json -e "this.api = '${APP_ORIGIN}/api/v1/'"
  41. echo "=> Update nginx.conf"
  42. sed -e "s,##APP_DOMAIN##,${APP_DOMAIN}," /app/code/nginx.conf > /run/nginx.conf
  43. echo "=> Setup taiga virtual env"
  44. source /app/code/taiga/bin/activate
  45. cd /app/code/taiga-back
  46. if [[ ! -d /app/data/media/user ]]; then
  47. echo "=> New installation create inital project templates"
  48. echo "=> Run migration scripts"
  49. mkdir -p /app/data/media/user
  50. python manage.py migrate --noinput
  51. python manage.py loaddata initial_project_templates
  52. else
  53. echo "=> Run migration scripts"
  54. python manage.py migrate --noinput
  55. fi
  56. # this is not done on new install path, since old taiga installations would not hit that
  57. if ! python manage.py shell -c 'from django.contrib.auth import get_user_model; u=get_user_model().objects.filter(is_superuser=True).first(); print(u)' | grep -v "None"; then
  58. echo "=> Create superadmin"
  59. python manage.py loaddata initial_user
  60. else
  61. echo "=> Superadmin already exists"
  62. fi
  63. echo "=> Make cloudron own /run"
  64. chown -R cloudron:cloudron /run
  65. chown -R cloudron:cloudron /app/data
  66. echo "=> Start nginx"
  67. nginx -c /run/nginx.conf &
  68. echo "=> Start taiga-back"
  69. PATH=/app/code/taiga/bin:$PATH
  70. HOME=/app/code
  71. PYTHONPATH=/app/code/taiga/lib/python3.6/site-packages
  72. cd /app/code/taiga-back
  73. memory_limit=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
  74. worker_count=$((memory_limit/1024/1024/150)) # 1 worker for 150M
  75. worker_count=$((worker_count > 8 ? 8 : worker_count )) # max of 8
  76. worker_count=$((worker_count < 1 ? 1 : worker_count )) # min of 1
  77. echo "Starting gunicorn with ${worker_count} workers"
  78. exec /usr/local/bin/gosu cloudron:cloudron gunicorn -w ${worker_count} -t 60 --pythonpath=. -b 127.0.0.1:8001 taiga.wsgi