install 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #!/bin/bash
  2. set -eu
  3. # Source YunoHost helpers
  4. . /usr/share/yunohost/helpers
  5. app=$YNH_APP_INSTANCE_NAME
  6. # Retrieve arguments
  7. domain=$YNH_APP_ARG_DOMAIN
  8. path=$YNH_APP_ARG_PATH
  9. admin=$YNH_APP_ARG_ADMIN
  10. email=$YNH_APP_ARG_EMAIL
  11. isp_name=$YNH_APP_ARG_ISP_NAME
  12. isp_site=$YNH_APP_ARG_ISP_SITE
  13. isp_zone=$YNH_APP_ARG_ISP_ZONE
  14. latitude=$YNH_APP_ARG_LATITUDE
  15. longitude=$YNH_APP_ARG_LONGITUDE
  16. zoom=$YNH_APP_ARG_ZOOM
  17. cnil_link=$YNH_APP_ARG_CNIL_LINK
  18. cnil_number=$YNH_APP_ARG_CNIL_NUMBER
  19. url_contact=$YNH_APP_ARG_URL_CONTACT
  20. secret=$(ynh_string_random 120)
  21. # Check if admin exists
  22. ynh_user_exists $admin \
  23. || ynh_die "Wrong admin"
  24. ynh_app_setting_set "$app" admin "$admin"
  25. ynh_app_setting_set "$app" email "$email"
  26. ynh_app_setting_set "$app" isp_name "$isp_name"
  27. ynh_app_setting_set "$app" isp_site "$isp_site"
  28. ynh_app_setting_set "$app" isp_zone "$isp_zone"
  29. ynh_app_setting_set "$app" latitude "$latitude"
  30. ynh_app_setting_set "$app" longitude "$longitude"
  31. ynh_app_setting_set "$app" zoom "$zoom"
  32. ynh_app_setting_set "$app" cnil_link "$cnil_link"
  33. ynh_app_setting_set "$app" cnil_number "$cnil_number"
  34. ynh_app_setting_set "$app" url_contact "$url_contact"
  35. ynh_app_setting_set "$app" secret "$secret"
  36. # Check domain/path availability
  37. sudo yunohost app checkurl "${domain}${path}" -a "$app" \
  38. || ynh_die "Path not available: ${domain}${path}"
  39. # Dependencies
  40. ynh_package_install python3-pip python3-virtualenv
  41. # Delete db and user if exit with an error
  42. function exit_properly
  43. {
  44. set +e
  45. sudo rm -Rf /opt/$app
  46. sudo rm -f /etc/nginx/conf.d/$domain.d/$app.conf
  47. sudo service nginx reload
  48. sudo yunohost service remove $app
  49. sudo rm -f /etc/systemd/system/$app.service
  50. sudo systemctl daemon-reload
  51. sudo userdel $app
  52. sudo rm -Rf $final_path
  53. exit 1
  54. }
  55. trap exit_properly ERR
  56. # Copy files to the right place
  57. final_path=/opt/$app
  58. sudo mkdir -p $final_path
  59. sudo cp -a ../sources/. $final_path
  60. # Install venv
  61. # It seems that python3.4 venv is broken, we need to setup pip manually to fix that
  62. # http://stackoverflow.com/questions/26215790/venv-doesnt-create-activate-script-python3
  63. python3 -m venv --without-pip $final_path/venv
  64. set +o nounset
  65. source $final_path/venv/bin/activate
  66. set -o nounset
  67. curl https://bootstrap.pypa.io/get-pip.py | python
  68. set +o nounset
  69. deactivate
  70. set -o nounset
  71. alias py='$final_path/venv/bin/python3'
  72. set +o nounset
  73. source $final_path/venv/bin/activate
  74. set -o nounset
  75. $final_path/venv/bin/pip install gunicorn
  76. $final_path/venv/bin/pip install -r $final_path/requirements/base.txt
  77. set +o nounset
  78. deactivate
  79. set -o nounset
  80. # Configuration Django
  81. sed -i "s@YNH_APP_ARG_DOMAIN@$domain@g" ../conf/local.py
  82. sed -i "s@YNH_APP_ARG_PATH@$path@g" ../conf/local.py
  83. sed -i "s@YNH_APP_PREFIX@${path#"/"}@g" ../conf/local.py
  84. sed -i "s#YNH_APP_ARG_EMAIL#$email#g" ../conf/local.py
  85. sed -i "s#YNH_APP_SECRET_KEY#$secret#g" ../conf/local.py
  86. sed -i "s#YNH_APP_ARG_ISP_NAME#$isp_name#g" ../conf/local.py
  87. sed -i "s#YNH_APP_ARG_ISP_SITE#$isp_site#g" ../conf/local.py
  88. sed -i "s#YNH_APP_ARG_ISP_ZONE#$isp_zone#g" ../conf/local.py
  89. sed -i "s#YNH_APP_ARG_LATITUDE#$latitude#g" ../conf/local.py
  90. sed -i "s#YNH_APP_ARG_LONGITUDE#$longitude#g" ../conf/local.py
  91. sed -i "s#YNH_APP_ARG_ZOOM#$zoom#g" ../conf/local.py
  92. sed -i "s#YNH_APP_ARG_CNIL_LINK#$cnil_link#g" ../conf/local.py
  93. sed -i "s#YNH_APP_ARG_CNIL_NUMBER#$cnil_number#g" ../conf/local.py
  94. sed -i "s#YNH_APP_ARG_URL_CONTACT#$url_contact#g" ../conf/local.py
  95. sudo cp ../conf/local.py $final_path/wifiwithme/settings/local.py
  96. # Set production
  97. sudo sed -i "s@wifiwithme\.settings\.dev@wifiwithme.settings.prod@g" $final_path/manage.py
  98. sudo sed -i "s@wifiwithme\.settings@wifiwithme.settings.prod@g" $final_path/wifiwithme/wsgi.py
  99. sudo ln -s $final_path/wifiwithme/static $final_path/static
  100. # Set permissions
  101. sudo useradd $app -d $final_path || echo "User already exists"
  102. sudo chown -R $app:www-data $final_path
  103. # Log folder
  104. sudo mkdir -p /var/log/$app
  105. sudo chown -R $app /var/log/$app
  106. sudo chgrp -R www-data /var/log/$app
  107. # Reload Nginx and regenerate SSOwat conf
  108. sudo yunohost app addaccess $app -u $admin
  109. old_pwd=$(pwd)
  110. cd $final_path
  111. set +o nounset
  112. source $final_path/venv/bin/activate
  113. sudo $final_path/venv/bin/python3 manage.py migrate --noinput
  114. set -o nounset
  115. cd $old_pwd
  116. # Modify Nginx configuration file and copy it to Nginx conf directory
  117. sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf
  118. sed -i "s@ALIASTOCHANGE@$final_path/@g" ../conf/nginx.conf
  119. sed -i "s@YNH_APP_INSTANCE_NAME@$app@g" ../conf/nginx.conf
  120. sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
  121. # Service gunicorn
  122. sudo sed -i "s@YNH_APP_INSTANCE_NAME@$app@g" ../conf/gunicorn_config.py
  123. sudo sed -i "s@YNH_APP_INSTANCE_NAME@$app@g" ../conf/gunicorn.service
  124. sudo cp ../conf/gunicorn.service /etc/systemd/system/$app.service
  125. sudo systemctl daemon-reload
  126. sudo cp ../conf/gunicorn_config.py /opt/$app/
  127. # Set permissions to directory
  128. sudo useradd $app -d $final_path || echo "User already exists"
  129. sudo chown $app:www-data -R $final_path
  130. ## Reload Nginx and regenerate SSOwat conf
  131. sudo service nginx reload
  132. sudo systemctl start $app
  133. sudo systemctl enable $app
  134. sudo yunohost service add $app -l /var/log/gunicorn/$app.log
  135. ynh_app_setting_set "$app" skipped_uris "/"
  136. sudo yunohost app ssowatconf