publish_wp_site.sh 8.0 KB

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