npm_update.sh 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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. T="$(date +%M)"
  53. if [ -f /lib/systemd/system/npm.service ]; then
  54. echo -en "${GN} Prep For Update... "
  55. sleep 2
  56. echo -e "${CM}${CL} \r"
  57. echo -en "${GN} Stopping Services... "
  58. systemctl stop openresty
  59. systemctl stop npm
  60. echo -e "${CM}${CL} \r"
  61. echo -en "${GN} Cleaning Old Files... "
  62. rm -rf /app \
  63. /var/www/html \
  64. /etc/nginx \
  65. /var/log/nginx \
  66. /var/lib/nginx \
  67. /var/cache/nginx &>/dev/null
  68. echo -e "${CM}${CL} \r"
  69. else
  70. echo -en "${RD} No NPM to Update! ${CL}"
  71. exit
  72. fi
  73. echo -en "${GN} Downloading NPM v${RELEASE}... "
  74. wget -q https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE} -O - | tar -xz &>/dev/null
  75. cd ./nginx-proxy-manager-${RELEASE}
  76. echo -e "${CM}${CL} \r"
  77. echo -en "${GN} Setting up Enviroment... "
  78. ln -sf /usr/bin/python3 /usr/bin/python
  79. ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
  80. ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
  81. ln -sf /usr/local/openresty/nginx/ /etc/nginx
  82. sed -i "s+0.0.0+${RELEASE}+g" backend/package.json
  83. sed -i "s+0.0.0+${RELEASE}+g" frontend/package.json
  84. sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
  85. NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
  86. for NGINX_CONF in $NGINX_CONFS; do
  87. sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
  88. done
  89. mkdir -p /var/www/html /etc/nginx/logs
  90. cp -r docker/rootfs/var/www/html/* /var/www/html/
  91. cp -r docker/rootfs/etc/nginx/* /etc/nginx/
  92. cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
  93. cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
  94. ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
  95. rm -f /etc/nginx/conf.d/dev.conf
  96. mkdir -p /tmp/nginx/body \
  97. /run/nginx \
  98. /data/nginx \
  99. /data/custom_ssl \
  100. /data/logs \
  101. /data/access \
  102. /data/nginx/default_host \
  103. /data/nginx/default_www \
  104. /data/nginx/proxy_host \
  105. /data/nginx/redirection_host \
  106. /data/nginx/stream \
  107. /data/nginx/dead_host \
  108. /data/nginx/temp \
  109. /var/lib/nginx/cache/public \
  110. /var/lib/nginx/cache/private \
  111. /var/cache/nginx/proxy_temp
  112. chmod -R 777 /var/cache/nginx
  113. chown root /tmp/nginx
  114. echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" > /etc/nginx/conf.d/include/resolvers.conf
  115. echo -e "${CM}${CL} \r"
  116. if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
  117. echo -e "${CHECKMARK} \e[1;92m Generating dummy SSL Certificate... \e[0m"
  118. 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
  119. fi
  120. mkdir -p /app/global /app/frontend/images
  121. cp -r backend/* /app
  122. cp -r global/* /app/global
  123. echo -en "${GN} Building Frontend... "
  124. cd ./frontend
  125. export NODE_ENV=development
  126. yarn install --network-timeout=30000 &>/dev/null
  127. yarn build &>/dev/null
  128. cp -r dist/* /app/frontend
  129. cp -r app-images/* /app/frontend/images
  130. echo -e "${CM}${CL} \r"
  131. echo -en "${GN} Initializing Backend... "
  132. rm -rf /app/config/default.json &>/dev/null
  133. if [ ! -f /app/config/production.json ]; then
  134. cat << 'EOF' > /app/config/production.json
  135. {
  136. "database": {
  137. "engine": "knex-native",
  138. "knex": {
  139. "client": "sqlite3",
  140. "connection": {
  141. "filename": "/data/database.sqlite"
  142. }
  143. }
  144. }
  145. }
  146. EOF
  147. fi
  148. cd /app
  149. export NODE_ENV=development
  150. yarn install --network-timeout=30000 &>/dev/null
  151. echo -e "${CM}${CL} \r"
  152. echo -en "${GN} Starting Services... "
  153. systemctl enable npm &>/dev/null
  154. systemctl start openresty
  155. systemctl start npm
  156. echo -e "${CM}${CL} \r"
  157. TS="$(($(date +%M)-T))"
  158. IP=$(hostname -I | cut -f1 -d ' ')
  159. echo -e "${GN}Successfully Updated Nginx Proxy Manager to ${RD}${RELEASE}${CL} and it took ${RD}${TS} minutes.${CL}
  160. NPM should be reachable at ${BL}http://${IP}:81 ${CL}
  161. "