startDockerImage.sh 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #!/bin/bash
  2. # 本脚本用于修改mysql安装配置文件信息
  3. # 获取脚本运行所在路径
  4. SCRIPT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd)
  5. echo -e "\033[33m
  6. ---------------
  7. -----SZHFY-----
  8. ----GB28181----
  9. ---------------
  10. \033[0m";
  11. echo -e "\033[33m 欢迎使用深圳合方圆科技一键部署国标平台安装程序 \033[0m";
  12. # 读取配置文件
  13. source ./config.cfg
  14. # 检查必要启动参数是否存在
  15. #sql_host="0.0.0.0"
  16. #sql_port=3306
  17. #sql_user="hfygb"
  18. #sql_passwd="hfygb28181"
  19. #sql_db="gb_db"
  20. #sql_path="sqlRuning"
  21. #redis_host="0.0.0.0"
  22. #redis_port=7654
  23. #redis_db=6
  24. #redis_passwd="hfyredis28181"
  25. echo "检查基础参数中,,,,,,"
  26. if [ ! -n "$sql_host" ]; then
  27. echo "sql_host 未设置"
  28. exit 1
  29. fi
  30. if [ ! -n "$sql_user" ]; then
  31. echo "sql_user 未设置"
  32. exit 1
  33. fi
  34. if [ ! -n "$sql_passwd" ]; then
  35. echo "sql_passwd 未设置"
  36. exit 1
  37. fi
  38. if [ ! -n "$sql_db" ]; then
  39. echo "sql_db 未设置"
  40. exit 1
  41. fi
  42. echo "开始启动mysql"
  43. #检查是否启用docker安装 enable_sql 为1时启用 为0时不启用
  44. if [ "$enable_sql" == "1" ];then
  45. # 判断是否存在mysql目录,没有则创建
  46. if [ ! -d "$SCRIPT_DIR/sql" ]; then
  47. mkdir -p /data/mysql
  48. fi
  49. # 导入mysql镜像
  50. docker load -i ./hfysql.tar
  51. # 检查容器是否已经启动,如果已经启动则尝试导出数据库
  52. docker ps -a | grep hfysql
  53. if [ $? -eq 0 ]; then
  54. # 导出数据库
  55. docker exec -it hfysql mysqldump -uroot -p"$sql_root_passwd" --all-databases > /data/sqlBack/hfysqlSave.sql
  56. # 停止容器
  57. docker stop hfysql
  58. # 删除容器
  59. docker rm hfysql
  60. # 移除容器占用的mysql目录
  61. echo "移除容器占用的mysql目录"
  62. rm -rf ./mysql/*
  63. fi
  64. # 修改mysql配置文件
  65. sed -i \
  66. -e "s/^port .*$/port=$sql_port/g" \
  67. "$SCRIPT_DIR/mysqlConf/my.cnf";
  68. # 启动mysql容器,使用三目语句判断sql_enable_host为1时设置网络模式为host
  69. if [ "$sql_enable_host" == "1" ];then
  70. docker run -d --name hfysql \
  71. --net=host \
  72. -v "$SCRIPT_DIR/mysql":/var/lib/mysql \
  73. -v "$SCRIPT_DIR/sqlBack":/data/sqlBack \
  74. --mount type=bind,src="$SCRIPT_DIR/mysqlConf/my.cnf",dst=/etc/mysql/my.cnf \
  75. -e MYSQL_ROOT_PASSWORD="$sql_root_passwd" \
  76. hfysql:latest
  77. else
  78. docker run -d --name hfysql \
  79. -p "$sql_port":"$sql_port" \
  80. -v "$SCRIPT_DIR/mysql":/var/lib/mysql \
  81. -v "$SCRIPT_DIR/sqlBack":/data/sqlBack \
  82. --mount type=bind,src="$SCRIPT_DIR/mysqlConf/my.cnf",dst=/etc/mysql/my.cnf \
  83. -e MYSQL_ROOT_PASSWORD="$sql_root_passwd" \
  84. hfysql:latest
  85. fi
  86. if [ $? -ne 0 ]; then
  87. echo "run mysql docker failed";
  88. fi
  89. # 等待mysql启动
  90. sleep 5
  91. fi
  92. echo "开始启动redis"
  93. sleep 2
  94. # 检查是否启用redis安装 enable_redis 为1时启用 为0时不启用
  95. if [ "$enable_redis" == "1" ];then
  96. #
  97. # 修改配置redis配置文件
  98. sed -i \
  99. -e "s/^port .*$/port $redis_port/g" \
  100. -e "s/^requirepass .*$/requirepass $redis_passwd/g" \
  101. "$SCRIPT_DIR/redis/redis.conf";
  102. # 导入redis镜像
  103. docker load -i ./hfyredis.tar
  104. # 检查容器是否已经启动,如果已经启动则关闭并且删除容器
  105. docker ps -a | grep hfy_redis
  106. if [ $? -eq 0 ]; then
  107. # 停止容器
  108. docker stop hfy_redis
  109. # 删除容器
  110. docker rm hfy_redis
  111. fi
  112. # 启动redis容器 host 模式启动,端口映射到宿主机
  113. docker run -it -p "$redis_port":"$redis_port" \
  114. -v /data/redis:/data/redis \
  115. -v /data/redis/logs:/data/redis/logs \
  116. -v "$SCRIPT_DIR/redis/redis.conf":/etc/redis/redis.conf \
  117. --name hfy_redis -itd hfyredis:latest
  118. fi
  119. echo "检查是否需要配置sql"
  120. sleep 2
  121. if [ "$enable_sql" == "1" ];then
  122. echo "等待尝试修改数据库参数"
  123. isTrue=1
  124. reConnect=0
  125. while [[ $isTrue == 1 ]]
  126. do
  127. # 尝试连接数据库
  128. docker exec -it hfysql mysql \
  129. -uroot -p"$sql_root_passwd" \
  130. -e "show databases;"
  131. if [ $? -eq 0 ]; then
  132. isTrue=0
  133. else
  134. echo "数据库连接失败,等待3秒后重试"
  135. reConnect=$(($reConnect+1))
  136. if(($reConnect>150));then
  137. echo "数据库连接失败失败次数$reConnect,退出程序"
  138. exit 1
  139. fi
  140. sleep 3
  141. fi
  142. done
  143. docker ps -a | grep hfysql
  144. if [ $? -eq 0 ]; then
  145. # 导出数据库
  146. echo "mysql 数据库已经启动"
  147. else
  148. echo "mysql 数据库启动失败"
  149. docker logs hfysql
  150. exit 1
  151. fi
  152. # 修改数据库名,无法修改数据库名,拒绝操作
  153. # docker exec -it hfysql mysql \
  154. # -uroot -p"hfy$sql_passwd" \
  155. # -e "ALTER DATABASE gb_db TO $sql_db;"
  156. # 创建单独用户
  157. docker exec -it hfysql mysql \
  158. -uroot -p"$sql_root_passwd" \
  159. -e "CREATE USER '$sql_user'@'%' IDENTIFIED BY '$sql_passwd';"
  160. # 不限制ip访问
  161. docker exec -it hfysql mysql \
  162. -uroot -p"$sql_root_passwd" \
  163. -e "GRANT ALL PRIVILEGES ON $sql_db.* TO '$sql_user'@'%';"
  164. # 刷新权限
  165. docker exec -it hfysql mysql \
  166. -uroot -p"$sql_root_passwd" \
  167. -e "FLUSH PRIVILEGES;"
  168. echo "等待sql重启,等待15秒"
  169. sleep 15
  170. reConnect=0
  171. isTrue=1
  172. while [[ $isTrue == 1 ]]
  173. do
  174. # 尝试连接数据库
  175. docker exec -it hfysql mysql \
  176. -uroot -p"$sql_root_passwd" \
  177. -e "show databases;"
  178. if [ $? -eq 0 ]; then
  179. isTrue=0
  180. else
  181. echo "数据库连接失败,等待3秒后重试"
  182. reConnect=$(($reConnect+1))
  183. if(($reConnect>150));then
  184. echo "数据库连接失败失败次数$reConnect,退出程序"
  185. exit 1
  186. fi
  187. sleep 3
  188. fi
  189. done
  190. sleep 10
  191. if [ $? -ne 0 ]; then
  192. echo "run gb docker failed";
  193. fi
  194. fi
  195. echo "开始启动国标平台"
  196. # 根据参数生成国标平台配置文件
  197. source ./gbRunning/createConfig.sh
  198. echo "$gb_WebPort"
  199. echo "$gb_sipPort"
  200. # 导入国标平台镜像
  201. docker load -i ./hfygb.tar
  202. # 检查容器是否已经启动,如果已经启动则关闭并且删除容器 hfy_gb
  203. docker ps -a | grep hfy_gp
  204. if [ $? -eq 0 ]; then
  205. # 停止容器
  206. docker stop hfy_gp
  207. # 删除容器
  208. docker rm hfy_gp
  209. fi
  210. sudo docker run -it --net=host \
  211. -v /data/gb:/data/gb -e LANG=C.UTF-8 \
  212. -v $SCRIPT_DIR"/gbRunning/logs":/data/hfygb/logs \
  213. -v $SCRIPT_DIR"/gbRunning/mFile":/data/hfygb/mFile \
  214. -v $SCRIPT_DIR"/gbRunning/libImages":/data/hfygb/libImages \
  215. -v $gb_certPath:/data/hfygb/keys/cert.pem \
  216. -v $gb_keyPath:/data/hfygb/keys/key.pem \
  217. -v $SCRIPT_DIR"/gbRunning/application_product.yml":/data/hfygb/config/application_product.yml --name hfy_gp -it hfygb:latest
  218. if [ $? -ne 0 ]; then
  219. echo "run gb docker failed";
  220. fi
  221. echo -e "\033[33m国标平台以全部启动,请使用浏览器访问 http://$gb_host:$gb_WebPort\033[0m";