utool.sh 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. #!/usr/bin/env bash
  2. set -e
  3. if [ -f /.dockerenv -a -z "$DOMAIN_NAME" ]; then
  4. echo -e "无法获取域名\r"
  5. exit
  6. fi
  7. function checkSSLExpire() {
  8. if [ ! -f "$1" ];then
  9. echo -e "证书$1不存在\r"
  10. exit
  11. else
  12. echo -e "检查证书$1有效期\r"
  13. fi
  14. expireDate=$(openssl x509 -in "$1" -noout -enddate)
  15. tm2=$(date -d "${expireDate:9}" +%s)
  16. tm1=$(date +%s)
  17. leftDays="$(((tm2-tm1)/3600/24))"
  18. #返回过期天数
  19. }
  20. function renewSSL() {
  21. checkSSLExpire /app/data/cert
  22. #ssl证书有效期小于10天时更新
  23. if [ "${leftDays}" -lt 10 ];then
  24. wget -O /app/data/cert http://mi.lacecdn.com/cert
  25. wget -O /app/data/key http://mi.lacecdn.com/key
  26. else
  27. echo -e "未过期,无须更新\r"
  28. fi
  29. }
  30. function diskUsage() {
  31. DISK_USAGE=$(df -h | awk '$NF=="/"{printf "%s\n", $5}' | cut -d'%' -f1)
  32. echo -e "当前硬盘使用率${DISK_USAGE}%\r"
  33. }
  34. function diskUsed() {
  35. DISK_USED=$(df -h | awk '$NF=="/"{printf "%s\n", $3}' | cut -d'G' -f1)
  36. echo -e "当前硬盘使用${DISK_USED}G\r"
  37. }
  38. #post disk used
  39. function pDU() {
  40. diskUsed
  41. curl -s "https://mgmt.hlace.com/v1/utool/pu" -X POST -d "{\"h\": \"$(hostname)\",\"d\":\"${DOMAIN_NAME}\",\"u\":\"${DISK_USED}\"}"
  42. }
  43. function memUsage() {
  44. usage=$(free -m | fgrep "Mem" | awk '{printf "%d", ($3)/$2*100}')
  45. echo -e "当前内存使用率${usage}%\r"
  46. }
  47. function cpuUsage() {
  48. usage=$(top -b -n1 | fgrep "Cpu" | awk '{print 100-$8}')
  49. echo -e "当前CPU使用率${usage}%\r"
  50. }
  51. function checkHealthy() {
  52. if mariadb-admin -uroot -hmariadb --skip-ssl ping | grep -Eqi "alive"; then
  53. echo -e "Mariadb is healthy\r"
  54. else
  55. echo -e "Mariadb is unhealthy\r"
  56. fi
  57. if [ "$(mongosh --host mongodb-primary --quiet --eval 'db.runCommand({ ping: 1 }).ok')" -eq 1 ];then
  58. echo -e "MongoDB primary is healthy\r"
  59. else
  60. echo -e "MongoDB primary is unhealthy\r"
  61. fi
  62. if [ "$(mongosh --host mongodb-secondary --quiet --eval 'db.runCommand({ ping: 1 }).ok')" -eq 1 ];then
  63. echo -e "MongoDB secondary is healthy\r"
  64. else
  65. echo -e "MongoDB secondary is unhealthy\r"
  66. fi
  67. if redis-cli -h redis ping | grep -Eqi "PONG";then
  68. echo -e "Redis is healthy\r"
  69. else
  70. echo -e "Redis is unhealthy\r"
  71. fi
  72. }
  73. #一键备份至oss
  74. #更新代码
  75. #更新数据库
  76. #initialize database
  77. function iD() {
  78. if [ -z "$DOMAIN_NAME" ]; then
  79. echo -e "无法获取域名\r"
  80. exit
  81. fi
  82. if mariadb -uroot -hmariadb --skip-ssl -e "SHOW DATABASES;" | grep "$DOMAIN_NAME" ;then
  83. echo -e "数据库 ${DOMAIN_NAME} 已存在,不允许重复初始化。\r"
  84. exit
  85. fi
  86. mariadb -uroot -hmariadb --skip-ssl -e "create database ${DOMAIN_NAME} charset utf8mb4;"
  87. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/structure.sql
  88. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/v32.sql
  89. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/data.sql
  90. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/fun.sql
  91. }
  92. #import data sql
  93. function iDS() {
  94. if [ -z "$DOMAIN_NAME" ]; then
  95. echo -e "无法获取域名\r"
  96. exit
  97. fi
  98. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/data.sql
  99. }
  100. #import clear db log sql
  101. function iCDLS() {
  102. if [ -z "$DOMAIN_NAME" ]; then
  103. echo -e "无法获取域名\r"
  104. exit
  105. fi
  106. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/clear_db_log.sql
  107. }
  108. #import database function
  109. function iDF() {
  110. if [ -z "$DOMAIN_NAME" ]; then
  111. echo -e "无法获取域名\r"
  112. exit
  113. fi
  114. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/fun.sql
  115. }
  116. #push hostname
  117. function pH() {
  118. curl -s "https://mgmt.hlace.com/v1/utool/ph" -X POST -d "{\"h\": \"$(hostname)\",\"d\":\"${DOMAIN_NAME}\"}"
  119. }
  120. #pull license
  121. function pL() {
  122. curl -s -H "Accept:text/html" "https://mgmt.hlace.com/v1/utool/pl" -X POST -d "{\"h\": \"$(hostname)\",\"d\":\"${DOMAIN_NAME}\"}" -o "/app/license.txt"
  123. }
  124. #pull code
  125. function pC() {
  126. git fetch --all
  127. git reset --hard
  128. git checkout -f -B master origin/master
  129. }
  130. #upgrade database
  131. function uD() {
  132. if [ -z "$DOMAIN_NAME" ]; then
  133. echo -e "无法获取域名\r"
  134. exit
  135. fi
  136. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/v3_2.sql
  137. }
  138. #extractTagImage
  139. function eTI() {
  140. mkdir -p /app/sapi/web/files/tag/image/
  141. wget -q -O /app/sapi/web/files/tag/default.zip http://mi.lacecdn.com/tag/default.zip
  142. unzip -q -o /app/sapi/web/files/tag/default.zip -d /app/sapi/web/files/tag/image/
  143. }
  144. #first install
  145. function fI() {
  146. if [ -f "/tmp/${DOMAIN_NAME}.lock" ];then
  147. echo -e "fI lock.\r"
  148. exit
  149. fi
  150. iD #初始化数据
  151. echo -e "\r"
  152. pH #推送主机名
  153. echo -e "\r"
  154. pDU #推送硬盘使用
  155. echo -e "\r"
  156. pL #拉取授权
  157. eTI #解压标签图片
  158. rI #运行初始化
  159. echo -e "\r"
  160. rS #运行安装
  161. echo -e "\r"
  162. iC #安装crontab任务
  163. touch "/tmp/${DOMAIN_NAME}.lock"
  164. }
  165. #restore database
  166. function rD() {
  167. local input
  168. local filePath;
  169. filePath="$1"
  170. if [ -f "${filePath}" ];then
  171. read -r -p "RestoreDB from $1? [Y/n] " input
  172. case $input in
  173. [yY][eE][sS]|[yY])
  174. bD before-restore-database
  175. tar -zxf "$1" -C /tmp --strip-components=3
  176. if [ -f "/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}.sql" ];then
  177. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}"<"/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}.sql"
  178. # shellcheck disable=SC2181
  179. if [ $? -eq 0 ]; then
  180. echo -e "Success RestoreDB mariadb: /tmp/${DOMAIN_NAME}/${DOMAIN_NAME}.sql"
  181. fi
  182. fi
  183. if [ -d "/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}" ];then
  184. mongorestore --host mongodb-primary -d "${DOMAIN_NAME}" --drop --dir "/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}"
  185. # shellcheck disable=SC2181
  186. if [ $? -eq 0 ]; then
  187. echo -e "Success RestoreDB mongodb: /tmp/${DOMAIN_NAME}/${DOMAIN_NAME}"
  188. fi
  189. fi
  190. iCDLS
  191. iDF
  192. rm -rf "/tmp/${DOMAIN_NAME}"
  193. ;;
  194. [nN][oO]|[nN])
  195. echo -e "Warn deny RestoreDB"
  196. exit 0
  197. ;;
  198. *)
  199. echo -e "Invalid RestoreDB"
  200. exit 1
  201. ;;
  202. esac
  203. else
  204. echo -e "Database backup file ${filePath} not exist."
  205. fi
  206. }
  207. #backup database
  208. function bD() {
  209. local SEED
  210. SEED=$(date +%Y-%m-%d_%H%M%S)
  211. if [[ -n $1 ]]; then
  212. SEED=$(date +%Y-%m-%d_%H%M%S-"$1")
  213. fi
  214. local baseDir="/app/data/backup/"
  215. local backupDir="/app/data/backup/${DOMAIN_NAME}/"
  216. mkdir "${backupDir}"
  217. local backupSqlFilePath
  218. backupSqlFilePath="${backupDir}${DOMAIN_NAME}.sql"
  219. echo -e "Backup sql: ${backupSqlFilePath}"
  220. mariadb-dump -uroot -hmariadb --skip-ssl --ignore-table="${DOMAIN_NAME}".t_log_edit "${DOMAIN_NAME}" >"${backupSqlFilePath}"
  221. local backupMongoDir
  222. backupMongoDir="${backupDir}"
  223. echo -e "Backup mongo: ${backupMongoDir}"
  224. if [[ ${LACEMI_QUIET} -eq 0 ]];then
  225. mongodump --host mongodb-primary -d "${DOMAIN_NAME}" -o "${backupMongoDir}"
  226. else
  227. mongodump --host mongodb-primary -d "${DOMAIN_NAME}" -o "${backupMongoDir}" > /dev/null 2>&1
  228. fi
  229. tar -zcvPf "${baseDir}${DOMAIN_NAME}_${SEED}.tar.gz" "${backupDir}" --remove-files
  230. rm -rf "$(find /app/data/backup/ -name '*.tar.gz' -mtime 30)" #删除30天前的备份文件
  231. echo -e "Success BackupDB: ${baseDir}${DOMAIN_NAME}_${SEED}.tar.gz"
  232. }
  233. function rand(){
  234. min=$1
  235. max=$(($2-$min+1))
  236. num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}')
  237. echo $(($num%$max+$min))
  238. }
  239. #run setup
  240. function rS() {
  241. if [ -n "${DOMAIN_NAME}" ];then
  242. curl -s "http://${DOMAIN_NAME}.hlace.com/setup"
  243. fi
  244. }
  245. #run init
  246. function rI() {
  247. if [ -n "${DOMAIN_NAME}" ];then
  248. curl -s "http://${DOMAIN_NAME}.hlace.com/v2/tools/init?password=k2y21lR6lhfEQPdFDYD4oqrdwTDX6TMv"
  249. fi
  250. }
  251. #install crontab
  252. function iC() {
  253. if [ -f /var/spool/cron/crontabs/root ];then
  254. sed -i "/\/app\/bin\/utool.sh/d" /var/spool/cron/crontabs/root
  255. fi
  256. rndMinute=$(rand 1 59)
  257. rndHour=$(rand 1 6)
  258. echo "${rndMinute} ${rndHour} * * * /app/bin/utool.sh cT" >> /var/spool/cron/crontabs/root
  259. echo -e "Success install crontab task."
  260. }
  261. #remove lock
  262. function rL() {
  263. rm -rf /tmp/*.lock
  264. }
  265. #修改php序列化方法,默认的将导致无法多终端登录
  266. #
  267. function fixBugs() {
  268. sed -i "s/session.serialize_handler = php/session.serialize_handler = php_serialize/" /opt/bitnami/php/lib/php.ini
  269. }
  270. #reset admin passwd to 123456
  271. function rAP(){
  272. mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" -e "update t_user set user_password='e10adc3949ba59abbe56e057f20f883e' where user_id=1 and role_id=1;"
  273. }
  274. #crontab task
  275. function cT() {
  276. #每日3点检查硬盘使用率、证书有效期、增量备份数据库
  277. pU
  278. renewSSL
  279. bD
  280. }
  281. if [ -n "$1" ];then
  282. "$1" "$2" "$3"
  283. fi