Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.64 KB | None | 0 0
  1. #!/usr/bin/env bash
  2.  
  3. # required package:
  4. # nginx, uwsgi, python
  5.  
  6. SELF_PATH=`cd $(dirname $0); pwd -P;`
  7. read -e -p "Enter IP address of your config server / 请输入您服务器的 IP 地址:" \
  8. -i "47.95.227.3" SERVER_IP
  9. read -e -p "Enter domain name of your config server / 请输入指向您服务器的域名:" \
  10. -i "pigeonshed.shesl.top" DOMAIN_NAME
  11. read -e -p "What is the name of your project / 您希望您项目的名称叫什么(please do not leave blank):" \
  12. -i "PigeonShed" PROJECT_NAME
  13. read -e -p "What is your settings directory name or django project name / Django 设置文件所在的文件夹:" \
  14. -i "PigeonShed" DJANGO_PROJECT_NAME
  15. read -e -p "What is your python virtualenv directory / 您 python 的虚拟环境在哪个地址:" \
  16. -i "${HOME}/.virtualenvs/" WORKON_HOME
  17.  
  18. read -e -p "Getting a new virtualenv / 是否需要新建一个 python 虚拟环境?[Y/others]" \
  19. -i "N" VIRTUALENV_CHOICE
  20. read -e -p "Config your ip and domain name into django-settings / 是否将 IP 和域名写入 Django 的设置中?[Y/others]" \
  21. -i "Y" DJANGO_SETTING_CHOICE
  22. read -e -p "Config your nginx and reload / 是否重新将配置写入 nginx 配置文件并重启 nginx?[Y/others]" \
  23. -i "Y" NGINX_SETTING_CHOICE
  24. read -e -p "Config a new uwsgi inite file / 是否需要新建一个 uwsgi 的初始化 ini 文件?[Y/others]" \
  25. -i "Y" UWSGI_SETTING_CHOICE
  26. read -e -p "Need shell scripts running and stopping uwsgi / 是否需要新建启动和停止 uwsgi 的脚本?[Y/others]" \
  27. -i "Y" UWSGI_SCRIPT_CHOICE
  28.  
  29. source /usr/bin/virtualenvwrapper.sh
  30. case ${VIRTUALENV_CHOICE} in
  31. y|Y)
  32. mkvirtualenv ${PROJECT_NAME}
  33. pip install -r ./requirements.txt
  34. ;;
  35. *) workon ${PROJECT_NAME} ;;
  36. esac
  37.  
  38. cat << _EOF_ > tmp
  39. upstream django-${PROJECT_NAME} {
  40. server unix://${SELF_PATH}/${PROJECT_NAME}.sock; # for a file socket
  41. }
  42. server {
  43. listen 80;
  44. server_name ${SERVER_IP} ${DOMAIN_NAME};
  45. charset utf-8;
  46. client_max_body_size 75M;
  47.  
  48. root ${SELF_PATH};
  49. index index.html index.htm index.nginx-debian.html;
  50.  
  51. location /media {
  52. alias ${SELF_PATH}/media;
  53. }
  54. location /static {
  55. alias ${SELF_PATH}/static;
  56. }
  57. location / {
  58. uwsgi_pass django-${PROJECT_NAME};
  59. include ${SELF_PATH}/uwsgi_params;
  60. }
  61.  
  62. error_log /var/log/nginx/error.log;
  63. access_log /var/log/nginx/access.log;
  64. }
  65. _EOF_
  66.  
  67. case ${NGINX_SETTING_CHOICE} in
  68. y|Y)
  69. sudo mv tmp /etc/nginx/sites-available/${PROJECT_NAME}.conf
  70. sudo ln -sf /etc/nginx/sites-available/${PROJECT_NAME}.conf /etc/nginx/sites-enabled/
  71. sudo systemctl restart nginx
  72. ;;
  73. *) echo "nginx not config." ;;
  74. esac
  75.  
  76. case ${DJANGO_SETTING_CHOICE} in
  77. y|Y)
  78. sed "s/ALLOWED_HOSTS = .*/ALLOWED_HOSTS = ['${DOMAIN_NAME}', '${SERVER_IP}']/g" \
  79. ./${DJANGO_PROJECT_NAME}/settings.py > tmp
  80. mv tmp ./${DJANGO_PROJECT_NAME}/settings.py
  81. ;;
  82. *) echo "Leave ALLOWED_HOSTS." ;;
  83. esac
  84.  
  85. cat << _EOF_ > tmp
  86. # uwsig_${PROJECT_NAME,,}.ini file
  87. [uwsgi]
  88. chdir = %d
  89. module = ${DJANGO_PROJECT_NAME}.wsgi
  90. virtualenv = ${WORKON_HOME}/${PROJECT_NAME}
  91.  
  92. # process-related settings
  93. master = true
  94. processes = 10
  95. socket = %d${PROJECT_NAME,,}.sock
  96. chmod-socket = 665
  97. # clear environment on exit
  98. vacuum = true
  99. uid = www-data
  100. gid = www-data
  101. pidfile = %dprocess_${PROJECT_NAME,,}.pid
  102.  
  103. plugins-dir = /usr/lib/uwsgi/plugins/
  104. plugins = python36
  105. _EOF_
  106.  
  107. case ${UWSGI_SETTING_CHOICE} in
  108. y|Y)
  109. mv tmp ./uwsgi_${PROJECT_NAME,,}.ini
  110. ;;
  111. *) echo "You haven't create uwsgi ini file.";;
  112. esac
  113.  
  114. cat << _EOF_ > tmp
  115. #!/usr/bin/env bash
  116.  
  117. cd \`dirname \$0\`
  118.  
  119. export WORKON_HOME=${WORKON_HOME}
  120. source /usr/bin/virtualenvwrapper.sh
  121. workon ${PROJECT_NAME}
  122.  
  123. cat <(echo "yes") | python ./manage.py collectstatic
  124. uwsgi --ini ./uwsgi_${PROJECT_NAME,,}.ini &
  125.  
  126. sudo chown www-data:www-data ${PROJECT_NAME,,}.sock
  127. _EOF_
  128.  
  129. case ${UWSGI_SCRIPT_CHOICE} in
  130. y|Y)
  131. mv tmp ./run_uwsgi_${PROJECT_NAME,,}.sh
  132. chmod +x ./run_uwsgi_${PROJECT_NAME,,}.sh
  133. ;;
  134. *) echo "You don't create run uwsgi script." ;;
  135. esac
  136.  
  137. cat << _EOF_ > tmp
  138. #!/usr/bin/env bash
  139.  
  140. cd \`dirname \$0\`
  141.  
  142. if [[ -f ./process_${PROJECT_NAME,,}.pid ]]; then
  143. uwsgi --stop ./process_${PROJECT_NAME,,}.pid
  144. else
  145. read -e -p "Pid file not found. Force kill all uwsgi process?[Y/others]" -i "Y" CHOICE
  146. case \${CHOICE} in
  147. y|Y) sudo pkill -f uwsgi -9 ;;
  148. *) echo "You don't kill any process." ;;
  149. esac
  150. fi
  151. _EOF_
  152.  
  153. case ${UWSGI_SCRIPT_CHOICE} in
  154. y|Y)
  155. mv tmp ./stop_uwsgi_${PROJECT_NAME,,}.sh
  156. chmod +x ./stop_uwsgi_${PROJECT_NAME,,}.sh
  157. ;;
  158. *) echo "You don't create stop script." && rm tmp;;
  159. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement