npm_update.sh 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #!/usr/bin/env bash
  2. RELEASE=$(curl -s https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
  3. grep "tag_name" |
  4. awk '{print substr($2, 3, length($2)-4) }')
  5. RD=$(echo "\033[01;31m")
  6. BL=$(echo "\033[36m")
  7. CM='\xE2\x9C\x94\033'
  8. GN=$(echo "\033[1;92m")
  9. CL=$(echo "\033[m")
  10. function update_info {
  11. echo -e "${RD}
  12. _ _ _____ __ __
  13. | \ | | | __ \ | \/ |
  14. | \| | | |__) | | \ / |
  15. | | | ___/ | |\/| |
  16. | |\ | | | | | | |
  17. |_| \_| |_| |_| |_|
  18. UPDATE v${RELEASE}
  19. ${CL}"
  20. }
  21. update_info
  22. while true; do
  23. read -p "This will update Nginx Proxy Manager to v${RELEASE}. Proceed(y/n)?" yn
  24. case $yn in
  25. [Yy]*) break ;;
  26. [Nn]*) exit ;;
  27. *) echo "Please answer yes or no." ;;
  28. esac
  29. done
  30. clear
  31. update_info
  32. set -o errexit
  33. set -o errtrace
  34. set -o nounset
  35. set -o pipefail
  36. shopt -s expand_aliases
  37. alias die='EXIT=$? LINE=$LINENO error_exit'
  38. trap die ERR
  39. trap 'die "Script interrupted."' INT
  40. function error_exit() {
  41. trap - ERR
  42. local DEFAULT='Unknown failure occured.'
  43. local REASON="\e[97m${1:-$DEFAULT}\e[39m"
  44. local FLAG="\e[91m[ERROR:LXC] \e[93m$EXIT@$LINE"
  45. msg "$FLAG $REASON"
  46. exit $EXIT
  47. }
  48. function msg() {
  49. local TEXT="$1"
  50. echo -e "$TEXT"
  51. }
  52. if [ -f /lib/systemd/system/npm.service ]; then
  53. echo -en "${GN} Prep For Update... "
  54. sleep 2
  55. echo -e "${CM}${CL} \r"
  56. echo -en "${GN} Stopping Services... "
  57. systemctl stop openresty
  58. systemctl stop npm
  59. echo -e "${CM}${CL} \r"
  60. echo -en "${GN} Cleaning Old Files... "
  61. rm -rf /app \
  62. /var/www/html \
  63. /etc/nginx \
  64. /var/log/nginx \
  65. /var/lib/nginx \
  66. /var/cache/nginx &>/dev/null
  67. echo -e "${CM}${CL} \r"
  68. else
  69. echo -en "${RD} No NPM to Update! ${CL}"
  70. exit
  71. fi
  72. echo -en "${GN} Downloading NPM v${RELEASE}... "
  73. wget -q https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE} -O - | tar -xz &>/dev/null
  74. cd ./nginx-proxy-manager-${RELEASE}
  75. echo -e "${CM}${CL} \r"
  76. echo -en "${GN} Setting up Enviroment... "
  77. ln -sf /usr/bin/python3 /usr/bin/python
  78. ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
  79. ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
  80. ln -sf /usr/local/openresty/nginx/ /etc/nginx
  81. sed -i "s+0.0.0+${RELEASE}+g" backend/package.json
  82. sed -i "s+0.0.0+${RELEASE}+g" frontend/package.json
  83. sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
  84. NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
  85. for NGINX_CONF in $NGINX_CONFS; do
  86. sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
  87. done
  88. mkdir -p /var/www/html /etc/nginx/logs
  89. cp -r docker/rootfs/var/www/html/* /var/www/html/
  90. cp -r docker/rootfs/etc/nginx/* /etc/nginx/
  91. cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
  92. cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
  93. ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
  94. rm -f /etc/nginx/conf.d/dev.conf
  95. mkdir -p /tmp/nginx/body \
  96. /run/nginx \
  97. /data/nginx \
  98. /data/custom_ssl \
  99. /data/logs \
  100. /data/access \
  101. /data/nginx/default_host \
  102. /data/nginx/default_www \
  103. /data/nginx/proxy_host \
  104. /data/nginx/redirection_host \
  105. /data/nginx/stream \
  106. /data/nginx/dead_host \
  107. /data/nginx/temp \
  108. /var/lib/nginx/cache/public \
  109. /var/lib/nginx/cache/private \
  110. /var/cache/nginx/proxy_temp
  111. chmod -R 777 /var/cache/nginx
  112. chown root /tmp/nginx
  113. echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf
  114. echo -e "${CM}${CL} \r"
  115. if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
  116. echo -e "${CHECKMARK} \e[1;92m Generating dummy SSL Certificate... \e[0m"
  117. openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem &>/dev/null
  118. fi
  119. mkdir -p /app/global /app/frontend/images
  120. cp -r backend/* /app
  121. cp -r global/* /app/global
  122. echo -en "${GN} Building Frontend... "
  123. cd ./frontend
  124. export NODE_ENV=development
  125. yarn install --network-timeout=30000 &>/dev/null
  126. yarn build &>/dev/null
  127. cp -r dist/* /app/frontend
  128. cp -r app-images/* /app/frontend/images
  129. echo -e "${CM}${CL} \r"
  130. echo -en "${GN} Initializing Backend... "
  131. rm -rf /app/config/default.json &>/dev/null
  132. if [ ! -f /app/config/production.json ]; then
  133. cat <<'EOF' >/app/config/production.json
  134. {
  135. "database": {
  136. "engine": "knex-native",
  137. "knex": {
  138. "client": "sqlite3",
  139. "connection": {
  140. "filename": "/data/database.sqlite"
  141. }
  142. }
  143. }
  144. }
  145. EOF
  146. fi
  147. cd /app
  148. export NODE_ENV=development
  149. yarn install --network-timeout=30000 &>/dev/null
  150. echo -e "${CM}${CL} \r"
  151. echo -en "${GN} Starting Services... "
  152. systemctl enable npm &>/dev/null
  153. systemctl start openresty
  154. systemctl start npm
  155. echo -e "${CM}${CL} \r"
  156. IP=$(hostname -I | cut -f1 -d ' ')
  157. echo -e "${GN}Successfully Updated Nginx Proxy Manager to ${RD}${RELEASE}${CL}.
  158. NPM should be reachable at ${BL}http://${IP}:81 ${CL}
  159. "