Browse Source

增加备份脚本,增加线上发布

chenlei1231 2 months ago
parent
commit
47d7fe1313
4 changed files with 371 additions and 0 deletions
  1. 55 0
      bak-wpsite.sh
  2. 73 0
      general_site_ssl.sh
  3. 210 0
      publish_wp_site.sh
  4. 33 0
      replace_file.sh

+ 55 - 0
bak-wpsite.sh

@@ -0,0 +1,55 @@
+#!/bin/bash
+
+#### 临时服务器自动打包项目代码和数据库到指定位置
+#### Author: chenpeiqing
+#### Date: 2025-01-07
+
+SITE_CODE=$1
+
+# 定义要检查的目录路径
+
+FROM_DIR="/usr/local/wwwroot/"
+
+DIR_TO_CHECK=$FROM_DIR$SITE_CODE
+
+# 定义目标目录路径
+TARGET_DIR="/opt/adweb3/wp_bak/"
+
+# 定义数据库连接信息
+RDS_HOST='127.0.0.1'
+RDS_ADMIN='root'
+RDS_PWD='Initial0_123'
+
+# 检查目录是否存在
+if [ -d "$DIR_TO_CHECK" ]; then
+
+  #############
+  ## 备份代码 ##
+  ############
+  # 目录存在,执行移动操作
+
+  cd $FROM_DIR
+  echo "开始打包项目到$TARGET_DIR$SITE_CODE.tar.gz"
+  sudo tar -czf $TARGET_DIR$SITE_CODE.tar.gz $SITE_CODE
+
+  # 检查移动操作是否成功
+  if [ $? -eq 0 ]; then
+    echo "目标项目已经成功打包到$TARGET_DIR$SITE_CODE.tar.gz"
+  else
+    echo "Failed to move the directory."
+  fi
+
+  #############
+  # 备份数据库 #
+  ############
+
+  mysqldump --user=$RDS_ADMIN --password=$RDS_PWD --host=localhost --port=3306 --no-create-db --default-character-set=utf8 $SITE_CODE > $TARGET_DIR$SITE_CODE.sql
+
+  # 检查 MySQL 命令是否成功执行
+  if [ $? -eq 0 ]; then
+    echo "Database $SITE_CODE has been backup."
+  else
+    echo "Failed to backup database $SITE_CODE."
+  fi
+
+fi

+ 73 - 0
general_site_ssl.sh

@@ -0,0 +1,73 @@
+#!/bin/bash
+
+SITE_CODE=$1
+DOMAIN_NAME=$2
+
+# 解析域名
+result=$(nslookup $DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
+result_www=$(nslookup www.$DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
+
+# 判断解析结果是否为空
+if [ ! -z "$result" ] && [ ! -z "$result_www" ]; then
+  #生成SSL证书
+  #生成位置 /root/.acme.sh/$DOMAIN_NAME
+  /root/.acme.sh/acme.sh --issue -d $DOMAIN_NAME -d "www.$DOMAIN_NAME" --webroot /usr/local/wwwroot/$DOMAIN_NAME
+  echo "result:"$result
+  echo "result_www:"$result_www
+elif [ ! -z "$result" ] && [ -z "$result_www" ]; then
+  /root/.acme.sh/acme.sh --issue -d $DOMAIN_NAME  --webroot /usr/local/wwwroot/$DOMAIN_NAME
+  echo "result":$result
+elif [ -z "$result" ] && [ ! -z "$result_www" ]; then
+  /root/.acme.sh/acme.sh --issue -d "www.$DOMAIN_NAME" --webroot /usr/local/wwwroot/$DOMAIN_NAME
+  echo "result:"$result
+  echo "result_www:"$result_www
+else
+  echo "Parsing failed"
+fi
+
+
+#等待30s,确保SSL证书目录生成
+sleep 30
+
+if [ -d "/root/.acme.sh/$DOMAIN_NAME" ]; then
+fullchain=$(cat /root/.acme.sh/$DOMAIN_NAME/fullchain.cer)
+awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "fullchain" n ".pem"}' < /root/.acme.sh/$DOMAIN_NAME/fullchain.cer
+Certificate_body=$(cat fullchain.pem)
+echo '[start cert.pem]'
+echo $Certificate_body
+echo '[end cert.pem]'
+
+Certificate_chain=$(cat fullchain1.pem)
+Certificate_chain1=$(cat fullchain2.pem)
+echo '[start chain.pem]'
+echo ${Certificate_chain}" "${Certificate_chain1}
+echo '[end chain.pem]'
+
+Certificate_private_key=$(cat /root/.acme.sh/$DOMAIN_NAME/*key)
+echo '[start privkey.pem]'
+echo $Certificate_private_key
+echo '[end privkey.pem]'
+
+rm -rf *.pem
+elif [ -d "/root/.acme.sh/${DOMAIN_NAME}_ecc" ]; then
+fullchain=$(cat /root/.acme.sh/${DOMAIN_NAME}_ecc/fullchain.cer)
+awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "fullchain" n ".pem"}' < /root/.acme.sh/${DOMAIN_NAME}_ecc/fullchain.cer
+Certificate_body=$(cat fullchain.pem)
+echo '[start cert.pem]'
+echo $Certificate_body
+echo '[end cert.pem]'
+
+Certificate_chain=$(cat fullchain1.pem)
+Certificate_chain1=$(cat fullchain2.pem)
+echo '[start chain.pem]'
+echo ${Certificate_chain}" "${Certificate_chain1}
+echo '[end chain.pem]'
+
+Certificate_private_key=$(cat /root/.acme.sh/${DOMAIN_NAME}_ecc/*key)
+echo '[start privkey.pem]'
+echo $Certificate_private_key
+echo '[end privkey.pem]'
+rm -rf *.pem
+else
+echo "SSL Certificate not found"
+fi

+ 210 - 0
publish_wp_site.sh

@@ -0,0 +1,210 @@
+#!/bin/bash
+
+#### 从临时服务器发布站点到正式环境
+#### Author: chenpeiqing
+#### Date: 2025-01-07
+
+SITE_CODE=$1
+DOMAIN_NAME=$2
+DATABASE_NAME=$3
+
+TEMP_DOMAIN='v3-site.adwebcloud.com'
+
+RDS_HOST='127.0.0.1'
+RDS_ADMIN='root'
+RDS_PWD='Admin@123.com'
+
+TEMP_USER_NAME='ubuntu'
+TEMP_IP='35.87.155.71'
+TEMP_PEM='/opt/adweb3/pem/adweb3.pem'
+
+first_time=$(date +'%s')
+
+#打印入参
+echo "SITE_CODE":$SITE_CODE
+echo "DOMAIN_NAME":$DOMAIN_NAME
+echo "DATABASE_NAME":$DATABASE_NAME
+
+#临时服务器打包项目代码和数据库文件
+ssh -i $TEMP_PEM -p 22 -o IdentitiesOnly=yes $TEMP_USER_NAME@$TEMP_IP << EOF
+        sudo -i
+        sh /opt/adweb3/shell/bak-wpsite.sh $SITE_CODE
+   exit
+EOF
+
+
+#创建空数据库以及指定用户
+mysql -h $RDS_HOST -u$RDS_ADMIN -p$RDS_PWD<< EOF
+  DROP DATABASE IF EXISTS $DATABASE_NAME;
+  CREATE DATABASE $DATABASE_NAME CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+  DROP USER IF EXISTS $SITE_CODE;
+  CREATE USER '$SITE_CODE'@'%' IDENTIFIED BY 'Admin@123.com';
+  GRANT ALL ON $DATABASE_NAME.* TO '$SITE_CODE'@'%';
+  flush privileges;
+  exit
+EOF
+
+#创建站点文件夹
+if [ ! -d  "/usr/local/wwwroot/$DOMAIN_NAME" ]; then
+     mkdir -p /usr/local/wwwroot/$DOMAIN_NAME
+fi
+
+#下载SQL文件
+wget -P /usr/local/wwwroot/$DOMAIN_NAME/ http://download-template-v3.adwebcloud.com/$SITE_CODE.sql
+
+mysql -h $RDS_HOST -u$SITE_CODE -p'Admin@123.com' $DATABASE_NAME</usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE.sql
+
+#下载站点文件
+wget -P /usr/local/wwwroot/$DOMAIN_NAME/ http://download-template-v3.adwebcloud.com/$SITE_CODE.tar.gz
+tar -zxf /usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE.tar.gz -C /usr/local/wwwroot/$DOMAIN_NAME/
+
+mv /usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE/* /usr/local/wwwroot/$DOMAIN_NAME/
+rm -rf /usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE
+
+#更新站点配置文件
+chown -R www-data:www-data /usr/local/wwwroot/$DOMAIN_NAME
+
+#替换redis object cache 键值
+sed -i "s:'$SITE_CODE.$TEMP_DOMAIN':'$DOMAIN_NAME':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
+
+#替换sql数据库名称
+sed -i "s:'$SITE_CODE':'$DATABASE_NAME':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
+
+#替换sql数据库用户名
+sed -i "s:'adweb':'$SITE_CODE':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
+
+#替换sql数据库密码
+sed -i "s:'2024_RqBQxctjakHCJVq8kmmYHQKZQGU4YMUH':'Admin@123.com':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
+
+#替换sql数据库链接地址
+sed -i "s:'127.0.0.1':'$RDS_HOST':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
+sed -i "s:'localhost':'$RDS_HOST':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
+
+#删除下载站点文件和sql文件压缩包
+cd /usr/local/wwwroot/$DOMAIN_NAME/
+rm -rf $SITE_CODE.sql.tar.gz $SITE_CODE.tar.gz $SITE_CODE.sql
+
+#更新站点域名
+cp /opt/adweb3/config/wp-cli.phar /usr/local/wwwroot/$DOMAIN_NAME
+cd /usr/local/wwwroot/$DOMAIN_NAME
+# 解析域名
+result=$(nslookup $DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
+result_www=$(nslookup www.$DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
+
+# 判断解析结果是否为空
+if [ ! -z "$result" ] && [ ! -z "$result_www" ]; then
+  #替换为www域名
+  php ./wp-cli.phar search-replace "$SITE_CODE.$TEMP_DOMAIN" "www.$DOMAIN_NAME" --allow-root
+  echo "result:"$result
+  echo "result_www:"$result_www
+elif [ ! -z "$result" ] && [ -z "$result_www" ]; then
+  #替换域名
+  php ./wp-cli.phar search-replace "$SITE_CODE.$TEMP_DOMAIN" "$DOMAIN_NAME" --allow-root
+  echo "result":$result
+elif [ -z "$result" ] && [ ! -z "$result_www" ]; then
+  #替换为www域名
+  php ./wp-cli.phar search-replace "$SITE_CODE.$TEMP_DOMAIN" "www.$DOMAIN_NAME" --allow-root
+  echo "result:"$result
+  echo "result_www:"$result_www
+else
+  echo "Parsing failed"
+fi
+
+#清除站点缓存
+php ./wp-cli.phar cache flush --allow-root
+rm -rf /usr/local/wwwroot/$DOMAIN_NAME/wp-cli.phar
+
+
+# 重启nginx
+cp /opt/adweb3/nginx_template/wp-site.conf /usr/local/openresty/nginx/vhost/$DOMAIN_NAME.conf
+sed -i "s:DOMAIN_NAME:$DOMAIN_NAME:g" /usr/local/openresty/nginx/vhost/$DOMAIN_NAME.conf
+echo "开始重启nginx配置"
+/usr/local/openresty/nginx/sbin/nginx -s reload
+echo "nginx配置重启完成"echo "开始重启nginx配置"
+
+#生成ssl证书
+
+echo "生成$DOMAIN_NAME的ssl证书开始:"
+start_time=$(date +'%s')
+
+# 解析域名
+result=$(nslookup $DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
+result_www=$(nslookup www.$DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
+
+# 判断解析结果是否为空
+if [ ! -z "$result" ] && [ ! -z "$result_www" ]; then
+  #生成SSL证书
+  #生成位置 /root/.acme.sh/$DOMAIN_NAME
+  /root/.acme.sh/acme.sh --issue -d $DOMAIN_NAME -d "www.$DOMAIN_NAME" --webroot /usr/local/wwwroot/$DOMAIN_NAME
+  echo "result:"$result
+  echo "result_www:"$result_www
+elif [ ! -z "$result" ] && [ -z "$result_www" ]; then
+  /root/.acme.sh/acme.sh --issue -d $DOMAIN_NAME  --webroot /usr/local/wwwroot/$DOMAIN_NAME
+  echo "result":$result
+elif [ -z "$result" ] && [ ! -z "$result_www" ]; then
+  /root/.acme.sh/acme.sh --issue -d "www.$DOMAIN_NAME" --webroot /usr/local/wwwroot/$DOMAIN_NAME
+  echo "result:"$result
+  echo "result_www:"$result_www
+else
+  echo "Parsing failed"
+fi
+
+
+#等待30s,确保SSL证书目录生成
+sleep 30
+
+if [ -d "/root/.acme.sh/$DOMAIN_NAME" ]; then
+fullchain=$(cat /root/.acme.sh/$DOMAIN_NAME/fullchain.cer)
+awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "fullchain" n ".pem"}' < /root/.acme.sh/$DOMAIN_NAME/fullchain.cer
+Certificate_body=$(cat fullchain.pem)
+echo '[start cert.pem]'
+echo $Certificate_body
+echo '[end cert.pem]'
+
+Certificate_chain=$(cat fullchain1.pem)
+Certificate_chain1=$(cat fullchain2.pem)
+echo '[start chain.pem]'
+echo ${Certificate_chain}" "${Certificate_chain1}
+echo '[end chain.pem]'
+
+Certificate_private_key=$(cat /root/.acme.sh/$DOMAIN_NAME/*key)
+echo '[start privkey.pem]'
+echo $Certificate_private_key
+echo '[end privkey.pem]'
+
+rm -rf *.pem
+elif [ -d "/root/.acme.sh/${DOMAIN_NAME}_ecc" ]; then
+fullchain=$(cat /root/.acme.sh/${DOMAIN_NAME}_ecc/fullchain.cer)
+awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "fullchain" n ".pem"}' < /root/.acme.sh/${DOMAIN_NAME}_ecc/fullchain.cer
+Certificate_body=$(cat fullchain.pem)
+echo '[start cert.pem]'
+echo $Certificate_body
+echo '[end cert.pem]'
+
+Certificate_chain=$(cat fullchain1.pem)
+Certificate_chain1=$(cat fullchain2.pem)
+echo '[start chain.pem]'
+echo ${Certificate_chain}" "${Certificate_chain1}
+echo '[end chain.pem]'
+
+Certificate_private_key=$(cat /root/.acme.sh/${DOMAIN_NAME}_ecc/*key)
+echo '[start privkey.pem]'
+echo $Certificate_private_key
+echo '[end privkey.pem]'
+rm -rf *.pem
+else
+echo "SSL Certificate not found"
+fi
+
+end_time=$(date +'%s')
+echo "生成$DOMAIN_NAME的ssl证书开始花费:"$((end_time - start_time))"s"
+
+#开启nginx证书 ssl 配置
+#重启nginx
+sed -i "s:####::g" /usr/local/openresty/nginx/vhost/$DOMAIN_NAME.conf
+echo "开始重启nginx配置"
+/usr/local/openresty/nginx/sbin/nginx -s reload
+echo "nginx配置重启完成"echo "开始重启nginx配置"
+
+
+echo "[Creation completed]"

+ 33 - 0
replace_file.sh

@@ -0,0 +1,33 @@
+#!/bin/bash
+
+#### 批量替换wp项目代码中的文件
+#### Author: chenpeiqing
+#### Date: 2025-01-07
+
+# 指定源文件和目标目录
+source_file="/opt/adweb3/config/wp-html.php"
+target_directory="/usr/local/wwwtemplate/"
+ 
+# 检查源文件是否存在
+if [ ! -f "$source_file" ]; then
+    echo "源文件不存在"
+    exit 1
+fi
+ 
+# 检查目标目录是否存在
+if [ ! -d "$target_directory" ]; then
+    echo "目标目录不存在"
+    exit 1
+fi
+ 
+# 获取目标目录的第一级子目录
+first_level_subdir=$(find "$target_directory" -maxdepth 1 -type d -printf "%P\n")
+
+echo "获取到所有子目录:$first_level_subdir"
+# 如果目标目录下存在子目录,则复制文件到第一级子目录中
+
+# 循环遍历子目录并复制文件
+for subdir in $first_level_subdir; do
+   cp -f $source_file $target_directory$subdir
+   echo "Copied $source_file to $target_directory$subdir"
+done