publish_wp_site.sh 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #!/bin/bash
  2. #### 从临时服务器发布站点到正式环境
  3. #### Author: chenpeiqing
  4. #### Date: 2025-01-07
  5. SITE_CODE=$1
  6. DOMAIN_NAME=$2
  7. DATABASE_NAME=$3
  8. TEMP_DOMAIN='v3-site.adwebcloud.com'
  9. RDS_HOST='127.0.0.1'
  10. RDS_ADMIN='root'
  11. RDS_PWD='Admin@123.com'
  12. TEMP_USER_NAME='ubuntu'
  13. TEMP_IP='35.87.155.71'
  14. TEMP_PEM='/opt/adweb3/pem/adweb3.pem'
  15. first_time=$(date +'%s')
  16. #打印入参
  17. echo "SITE_CODE":$SITE_CODE
  18. echo "DOMAIN_NAME":$DOMAIN_NAME
  19. echo "DATABASE_NAME":$DATABASE_NAME
  20. #临时服务器打包项目代码和数据库文件
  21. ssh -i $TEMP_PEM -p 22 -o IdentitiesOnly=yes $TEMP_USER_NAME@$TEMP_IP << EOF
  22. sudo -i
  23. sh /opt/adweb3/shell/bak-wpsite.sh $SITE_CODE
  24. exit
  25. EOF
  26. #创建空数据库以及指定用户
  27. mysql -h $RDS_HOST -u$RDS_ADMIN -p$RDS_PWD<< EOF
  28. DROP DATABASE IF EXISTS $DATABASE_NAME;
  29. CREATE DATABASE $DATABASE_NAME CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  30. DROP USER IF EXISTS $SITE_CODE;
  31. CREATE USER '$SITE_CODE'@'%' IDENTIFIED BY 'Admin@123.com';
  32. GRANT ALL ON $DATABASE_NAME.* TO '$SITE_CODE'@'%';
  33. flush privileges;
  34. exit
  35. EOF
  36. #创建站点文件夹
  37. if [ ! -d "/usr/local/wwwroot/$DOMAIN_NAME" ]; then
  38. mkdir -p /usr/local/wwwroot/$DOMAIN_NAME
  39. fi
  40. #下载SQL文件
  41. wget -P /usr/local/wwwroot/$DOMAIN_NAME/ http://download-template-v3.adwebcloud.com/$SITE_CODE.sql
  42. mysql -h $RDS_HOST -u$SITE_CODE -p'Admin@123.com' $DATABASE_NAME</usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE.sql
  43. #下载站点文件
  44. wget -P /usr/local/wwwroot/$DOMAIN_NAME/ http://download-template-v3.adwebcloud.com/$SITE_CODE.tar.gz
  45. tar -zxf /usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE.tar.gz -C /usr/local/wwwroot/$DOMAIN_NAME/
  46. mv /usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE/* /usr/local/wwwroot/$DOMAIN_NAME/
  47. rm -rf /usr/local/wwwroot/$DOMAIN_NAME/$SITE_CODE
  48. #更新站点配置文件
  49. chown -R www-data:www-data /usr/local/wwwroot/$DOMAIN_NAME
  50. #替换redis object cache 键值
  51. sed -i "s:'$SITE_CODE.$TEMP_DOMAIN':'$DOMAIN_NAME':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
  52. #替换sql数据库名称
  53. sed -i "s:'$SITE_CODE':'$DATABASE_NAME':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
  54. #替换sql数据库用户名
  55. sed -i "s:'adweb':'$SITE_CODE':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
  56. #替换sql数据库密码
  57. sed -i "s:'2024_RqBQxctjakHCJVq8kmmYHQKZQGU4YMUH':'Admin@123.com':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
  58. #替换sql数据库链接地址
  59. sed -i "s:'127.0.0.1':'$RDS_HOST':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
  60. sed -i "s:'localhost':'$RDS_HOST':g" /usr/local/wwwroot/$DOMAIN_NAME/wp-config.php
  61. #删除下载站点文件和sql文件压缩包
  62. cd /usr/local/wwwroot/$DOMAIN_NAME/
  63. rm -rf $SITE_CODE.sql.tar.gz $SITE_CODE.tar.gz $SITE_CODE.sql
  64. #更新站点域名
  65. cp /opt/adweb3/config/wp-cli.phar /usr/local/wwwroot/$DOMAIN_NAME
  66. cd /usr/local/wwwroot/$DOMAIN_NAME
  67. # 解析域名
  68. result=$(nslookup $DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
  69. result_www=$(nslookup www.$DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
  70. # 判断解析结果是否为空
  71. if [ ! -z "$result" ] && [ ! -z "$result_www" ]; then
  72. #替换为www域名
  73. php ./wp-cli.phar search-replace "$SITE_CODE.$TEMP_DOMAIN" "www.$DOMAIN_NAME" --allow-root
  74. echo "result:"$result
  75. echo "result_www:"$result_www
  76. elif [ ! -z "$result" ] && [ -z "$result_www" ]; then
  77. #替换域名
  78. php ./wp-cli.phar search-replace "$SITE_CODE.$TEMP_DOMAIN" "$DOMAIN_NAME" --allow-root
  79. echo "result":$result
  80. elif [ -z "$result" ] && [ ! -z "$result_www" ]; then
  81. #替换为www域名
  82. php ./wp-cli.phar search-replace "$SITE_CODE.$TEMP_DOMAIN" "www.$DOMAIN_NAME" --allow-root
  83. echo "result:"$result
  84. echo "result_www:"$result_www
  85. else
  86. echo "Parsing failed"
  87. fi
  88. #清除站点缓存
  89. php ./wp-cli.phar cache flush --allow-root
  90. rm -rf /usr/local/wwwroot/$DOMAIN_NAME/wp-cli.phar
  91. # 重启nginx
  92. cp /opt/adweb3/nginx_template/wp-site.conf /usr/local/openresty/nginx/vhost/$DOMAIN_NAME.conf
  93. sed -i "s:DOMAIN_NAME:$DOMAIN_NAME:g" /usr/local/openresty/nginx/vhost/$DOMAIN_NAME.conf
  94. echo "开始重启nginx配置"
  95. /usr/local/openresty/nginx/sbin/nginx -s reload
  96. echo "nginx配置重启完成"echo "开始重启nginx配置"
  97. #生成ssl证书
  98. echo "生成$DOMAIN_NAME的ssl证书开始:"
  99. start_time=$(date +'%s')
  100. # 解析域名
  101. result=$(nslookup $DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
  102. result_www=$(nslookup www.$DOMAIN_NAME | grep -Po 'Address: \K[\d.]+')
  103. # 判断解析结果是否为空
  104. if [ ! -z "$result" ] && [ ! -z "$result_www" ]; then
  105. #生成SSL证书
  106. #生成位置 /root/.acme.sh/$DOMAIN_NAME
  107. /root/.acme.sh/acme.sh --issue -d $DOMAIN_NAME -d "www.$DOMAIN_NAME" --webroot /usr/local/wwwroot/$DOMAIN_NAME
  108. echo "result:"$result
  109. echo "result_www:"$result_www
  110. elif [ ! -z "$result" ] && [ -z "$result_www" ]; then
  111. /root/.acme.sh/acme.sh --issue -d $DOMAIN_NAME --webroot /usr/local/wwwroot/$DOMAIN_NAME
  112. echo "result":$result
  113. elif [ -z "$result" ] && [ ! -z "$result_www" ]; then
  114. /root/.acme.sh/acme.sh --issue -d "www.$DOMAIN_NAME" --webroot /usr/local/wwwroot/$DOMAIN_NAME
  115. echo "result:"$result
  116. echo "result_www:"$result_www
  117. else
  118. echo "Parsing failed"
  119. fi
  120. #等待30s,确保SSL证书目录生成
  121. sleep 30
  122. if [ -d "/root/.acme.sh/$DOMAIN_NAME" ]; then
  123. fullchain=$(cat /root/.acme.sh/$DOMAIN_NAME/fullchain.cer)
  124. awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "fullchain" n ".pem"}' < /root/.acme.sh/$DOMAIN_NAME/fullchain.cer
  125. Certificate_body=$(cat fullchain.pem)
  126. echo '[start cert.pem]'
  127. echo $Certificate_body
  128. echo '[end cert.pem]'
  129. Certificate_chain=$(cat fullchain1.pem)
  130. Certificate_chain1=$(cat fullchain2.pem)
  131. echo '[start chain.pem]'
  132. echo ${Certificate_chain}" "${Certificate_chain1}
  133. echo '[end chain.pem]'
  134. Certificate_private_key=$(cat /root/.acme.sh/$DOMAIN_NAME/*key)
  135. echo '[start privkey.pem]'
  136. echo $Certificate_private_key
  137. echo '[end privkey.pem]'
  138. rm -rf *.pem
  139. elif [ -d "/root/.acme.sh/${DOMAIN_NAME}_ecc" ]; then
  140. fullchain=$(cat /root/.acme.sh/${DOMAIN_NAME}_ecc/fullchain.cer)
  141. 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
  142. Certificate_body=$(cat fullchain.pem)
  143. echo '[start cert.pem]'
  144. echo $Certificate_body
  145. echo '[end cert.pem]'
  146. Certificate_chain=$(cat fullchain1.pem)
  147. Certificate_chain1=$(cat fullchain2.pem)
  148. echo '[start chain.pem]'
  149. echo ${Certificate_chain}" "${Certificate_chain1}
  150. echo '[end chain.pem]'
  151. Certificate_private_key=$(cat /root/.acme.sh/${DOMAIN_NAME}_ecc/*key)
  152. echo '[start privkey.pem]'
  153. echo $Certificate_private_key
  154. echo '[end privkey.pem]'
  155. rm -rf *.pem
  156. else
  157. echo "SSL Certificate not found"
  158. fi
  159. end_time=$(date +'%s')
  160. echo "生成$DOMAIN_NAME的ssl证书开始花费:"$((end_time - start_time))"s"
  161. #开启nginx证书 ssl 配置
  162. #重启nginx
  163. sed -i "s:####::g" /usr/local/openresty/nginx/vhost/$DOMAIN_NAME.conf
  164. echo "开始重启nginx配置"
  165. /usr/local/openresty/nginx/sbin/nginx -s reload
  166. echo "nginx配置重启完成"echo "开始重启nginx配置"
  167. echo "[Creation completed]"