123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- #!/usr/bin/env bash
- set -e
- if [ -f /.dockerenv -a -z "$DOMAIN_NAME" ]; then
- echo -e "无法获取域名\r"
- exit
- fi
- function checkSSLExpire() {
- if [ ! -f "$1" ];then
- echo -e "证书$1不存在\r"
- exit
- else
- echo -e "检查证书$1有效期\r"
- fi
- expireDate=$(openssl x509 -in "$1" -noout -enddate)
- tm2=$(date -d "${expireDate:9}" +%s)
- tm1=$(date +%s)
- leftDays="$(((tm2-tm1)/3600/24))"
- #返回过期天数
- }
- function renewSSL() {
- checkSSLExpire /app/data/cert
- #ssl证书有效期小于10天时更新
- if [ "${leftDays}" -lt 10 ];then
- wget -O /app/data/cert http://mi.lacecdn.com/cert
- wget -O /app/data/key http://mi.lacecdn.com/key
- else
- echo -e "未过期,无须更新\r"
- fi
- }
- function diskUsage() {
- DISK_USAGE=$(df -h | awk '$NF=="/"{printf "%s\n", $5}' | cut -d'%' -f1)
- echo -e "当前硬盘使用率${DISK_USAGE}%\r"
- }
- function diskUsed() {
- DISK_USED=$(df -h | awk '$NF=="/"{printf "%s\n", $3}' | cut -d'G' -f1)
- echo -e "当前硬盘使用${DISK_USED}G\r"
- }
- #post disk used
- function pDU() {
- diskUsed
- curl -s "https://mgmt.hlace.com/v1/utool/pu" -X POST -d "{\"h\": \"$(hostname)\",\"d\":\"${DOMAIN_NAME}\",\"u\":\"${DISK_USED}\"}"
- }
- function memUsage() {
- usage=$(free -m | fgrep "Mem" | awk '{printf "%d", ($3)/$2*100}')
- echo -e "当前内存使用率${usage}%\r"
- }
- function cpuUsage() {
- usage=$(top -b -n1 | fgrep "Cpu" | awk '{print 100-$8}')
- echo -e "当前CPU使用率${usage}%\r"
- }
- function checkHealthy() {
- if mariadb-admin -uroot -hmariadb --skip-ssl ping | grep -Eqi "alive"; then
- echo -e "Mariadb is healthy\r"
- else
- echo -e "Mariadb is unhealthy\r"
- fi
- if [ "$(mongosh --host mongodb-primary --quiet --eval 'db.runCommand({ ping: 1 }).ok')" -eq 1 ];then
- echo -e "MongoDB primary is healthy\r"
- else
- echo -e "MongoDB primary is unhealthy\r"
- fi
- if [ "$(mongosh --host mongodb-secondary --quiet --eval 'db.runCommand({ ping: 1 }).ok')" -eq 1 ];then
- echo -e "MongoDB secondary is healthy\r"
- else
- echo -e "MongoDB secondary is unhealthy\r"
- fi
- if redis-cli -h redis ping | grep -Eqi "PONG";then
- echo -e "Redis is healthy\r"
- else
- echo -e "Redis is unhealthy\r"
- fi
- }
- #一键备份至oss
- #更新代码
- #更新数据库
- #initialize database
- function iD() {
- if [ -z "$DOMAIN_NAME" ]; then
- echo -e "无法获取域名\r"
- exit
- fi
- if mariadb -uroot -hmariadb --skip-ssl -e "SHOW DATABASES;" | grep "$DOMAIN_NAME" ;then
- echo -e "数据库 ${DOMAIN_NAME} 已存在,不允许重复初始化。\r"
- exit
- fi
- mariadb -uroot -hmariadb --skip-ssl -e "create database ${DOMAIN_NAME} charset utf8mb4;"
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/structure.sql
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/v32.sql
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/data.sql
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/fun.sql
- }
- #import data sql
- function iDS() {
- if [ -z "$DOMAIN_NAME" ]; then
- echo -e "无法获取域名\r"
- exit
- fi
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/data.sql
- }
- #import clear db log sql
- function iCDLS() {
- if [ -z "$DOMAIN_NAME" ]; then
- echo -e "无法获取域名\r"
- exit
- fi
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/clear_db_log.sql
- }
- #import database function
- function iDF() {
- if [ -z "$DOMAIN_NAME" ]; then
- echo -e "无法获取域名\r"
- exit
- fi
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/fun.sql
- }
- #push hostname
- function pH() {
- curl -s "https://mgmt.hlace.com/v1/utool/ph" -X POST -d "{\"h\": \"$(hostname)\",\"d\":\"${DOMAIN_NAME}\"}"
- }
- #pull license
- function pL() {
- 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"
- }
- #pull code
- function pC() {
- git fetch --all
- git reset --hard
- git checkout -f -B master origin/master
- }
- #upgrade database
- function uD() {
- if [ -z "$DOMAIN_NAME" ]; then
- echo -e "无法获取域名\r"
- exit
- fi
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" < /app/data/sql/v3_2.sql
- }
- #extractTagImage
- function eTI() {
- mkdir -p /app/sapi/web/files/tag/image/
- wget -q -O /app/sapi/web/files/tag/default.zip http://mi.lacecdn.com/tag/default.zip
- unzip -q -o /app/sapi/web/files/tag/default.zip -d /app/sapi/web/files/tag/image/
- }
- #first install
- function fI() {
- if [ -f "/tmp/${DOMAIN_NAME}.lock" ];then
- echo -e "fI lock.\r"
- exit
- fi
- iD #初始化数据
- echo -e "\r"
- pH #推送主机名
- echo -e "\r"
- pDU #推送硬盘使用
- echo -e "\r"
- pL #拉取授权
- eTI #解压标签图片
- rI #运行初始化
- echo -e "\r"
- rS #运行安装
- echo -e "\r"
- iC #安装crontab任务
- touch "/tmp/${DOMAIN_NAME}.lock"
- }
- #restore database
- function rD() {
- local input
- local filePath;
- filePath="$1"
- if [ -f "${filePath}" ];then
- read -r -p "RestoreDB from $1? [Y/n] " input
- case $input in
- [yY][eE][sS]|[yY])
- bD before-restore-database
- tar -zxf "$1" -C /tmp --strip-components=3
- if [ -f "/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}.sql" ];then
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}"<"/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}.sql"
- # shellcheck disable=SC2181
- if [ $? -eq 0 ]; then
- echo -e "Success RestoreDB mariadb: /tmp/${DOMAIN_NAME}/${DOMAIN_NAME}.sql"
- fi
- fi
- if [ -d "/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}" ];then
- mongorestore --host mongodb-primary -d "${DOMAIN_NAME}" --drop --dir "/tmp/${DOMAIN_NAME}/${DOMAIN_NAME}"
- # shellcheck disable=SC2181
- if [ $? -eq 0 ]; then
- echo -e "Success RestoreDB mongodb: /tmp/${DOMAIN_NAME}/${DOMAIN_NAME}"
- fi
- fi
- iCDLS
- iDF
- rm -rf "/tmp/${DOMAIN_NAME}"
- ;;
- [nN][oO]|[nN])
- echo -e "Warn deny RestoreDB"
- exit 0
- ;;
- *)
- echo -e "Invalid RestoreDB"
- exit 1
- ;;
- esac
- else
- echo -e "Database backup file ${filePath} not exist."
- fi
- }
- #backup database
- function bD() {
- local SEED
- SEED=$(date +%Y-%m-%d_%H%M%S)
- if [[ -n $1 ]]; then
- SEED=$(date +%Y-%m-%d_%H%M%S-"$1")
- fi
- local baseDir="/app/data/backup/"
- local backupDir="/app/data/backup/${DOMAIN_NAME}/"
- mkdir "${backupDir}"
- local backupSqlFilePath
- backupSqlFilePath="${backupDir}${DOMAIN_NAME}.sql"
- echo -e "Backup sql: ${backupSqlFilePath}"
- mariadb-dump -uroot -hmariadb --skip-ssl --ignore-table="${DOMAIN_NAME}".t_log_edit "${DOMAIN_NAME}" >"${backupSqlFilePath}"
- local backupMongoDir
- backupMongoDir="${backupDir}"
- echo -e "Backup mongo: ${backupMongoDir}"
- if [[ ${LACEMI_QUIET} -eq 0 ]];then
- mongodump --host mongodb-primary -d "${DOMAIN_NAME}" -o "${backupMongoDir}"
- else
- mongodump --host mongodb-primary -d "${DOMAIN_NAME}" -o "${backupMongoDir}" > /dev/null 2>&1
- fi
- tar -zcvPf "${baseDir}${DOMAIN_NAME}_${SEED}.tar.gz" "${backupDir}" --remove-files
- rm -rf "$(find /app/data/backup/ -name '*.tar.gz' -mtime 30)" #删除30天前的备份文件
- echo -e "Success BackupDB: ${baseDir}${DOMAIN_NAME}_${SEED}.tar.gz"
- }
- function rand(){
- min=$1
- max=$(($2-$min+1))
- num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}')
- echo $(($num%$max+$min))
- }
- #run setup
- function rS() {
- if [ -n "${DOMAIN_NAME}" ];then
- curl -s "http://${DOMAIN_NAME}.hlace.com/setup"
- fi
- }
- #run init
- function rI() {
- if [ -n "${DOMAIN_NAME}" ];then
- curl -s "http://${DOMAIN_NAME}.hlace.com/v2/tools/init?password=k2y21lR6lhfEQPdFDYD4oqrdwTDX6TMv"
- fi
- }
- #install crontab
- function iC() {
- if [ -f /var/spool/cron/crontabs/root ];then
- sed -i "/\/app\/bin\/utool.sh/d" /var/spool/cron/crontabs/root
- fi
- rndMinute=$(rand 1 59)
- rndHour=$(rand 1 6)
- echo "${rndMinute} ${rndHour} * * * /app/bin/utool.sh cT" >> /var/spool/cron/crontabs/root
- echo -e "Success install crontab task."
- }
- #remove lock
- function rL() {
- rm -rf /tmp/*.lock
- }
- #修改php序列化方法,默认的将导致无法多终端登录
- #
- function fixBugs() {
- sed -i "s/session.serialize_handler = php/session.serialize_handler = php_serialize/" /opt/bitnami/php/lib/php.ini
- }
- #reset admin passwd to 123456
- function rAP(){
- mariadb -uroot -hmariadb --skip-ssl "${DOMAIN_NAME}" -e "update t_user set user_password='e10adc3949ba59abbe56e057f20f883e' where user_id=1 and role_id=1;"
- }
- #crontab task
- function cT() {
- #每日3点检查硬盘使用率、证书有效期、增量备份数据库
- pU
- renewSSL
- bD
- }
- if [ -n "$1" ];then
- "$1" "$2" "$3"
- fi
|