#!/bin/bash # 本脚本用于修改mysql安装配置文件信息 # 获取脚本运行所在路径 SCRIPT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd) echo -e "\033[33m --------------- -----SZHFY----- ----GB28181---- --------------- \033[0m"; echo -e "\033[33m 欢迎使用深圳合方圆科技一键部署国标平台安装程序 \033[0m"; # 读取配置文件 source ./config.cfg # 检查必要启动参数是否存在 #sql_host="0.0.0.0" #sql_port=3306 #sql_user="hfygb" #sql_passwd="hfygb28181" #sql_db="gb_db" #sql_path="sqlRuning" #redis_host="0.0.0.0" #redis_port=7654 #redis_db=6 #redis_passwd="hfyredis28181" echo "检查基础参数中,,,,,," if [ ! -n "$sql_host" ]; then echo "sql_host 未设置" exit 1 fi if [ ! -n "$sql_user" ]; then echo "sql_user 未设置" exit 1 fi if [ ! -n "$sql_passwd" ]; then echo "sql_passwd 未设置" exit 1 fi if [ ! -n "$sql_db" ]; then echo "sql_db 未设置" exit 1 fi echo "开始启动mysql" #检查是否启用docker安装 enable_sql 为1时启用 为0时不启用 if [ "$enable_sql" == "1" ];then # 判断是否存在mysql目录,没有则创建 if [ ! -d "$SCRIPT_DIR/sql" ]; then mkdir -p /data/mysql fi # 导入mysql镜像 docker load -i ./hfysql.tar # 检查容器是否已经启动,如果已经启动则尝试导出数据库 docker ps -a | grep hfysql if [ $? -eq 0 ]; then # 导出数据库 docker exec -it hfysql mysqldump -uroot -p"$sql_root_passwd" --all-databases > /data/sqlBack/hfysqlSave.sql # 停止容器 docker stop hfysql # 删除容器 docker rm hfysql # 移除容器占用的mysql目录 echo "移除容器占用的mysql目录" rm -rf ./mysql/* fi # 修改mysql配置文件 sed -i \ -e "s/^port .*$/port=$sql_port/g" \ "$SCRIPT_DIR/mysqlConf/my.cnf"; # 启动mysql容器,使用三目语句判断sql_enable_host为1时设置网络模式为host if [ "$sql_enable_host" == "1" ];then docker run -d --name hfysql \ --net=host \ -v "$SCRIPT_DIR/mysql":/var/lib/mysql \ -v "$SCRIPT_DIR/sqlBack":/data/sqlBack \ --mount type=bind,src="$SCRIPT_DIR/mysqlConf/my.cnf",dst=/etc/mysql/my.cnf \ -e MYSQL_ROOT_PASSWORD="$sql_root_passwd"mysql -u root -p12345678 \ hfysql:latest else docker run -d --name hfysql \ -p "$sql_port":3306 \ -v "$SCRIPT_DIR/mysql":/var/lib/mysql \ -v "$SCRIPT_DIR/sqlBack":/data/sqlBack \ -e MYSQL_ROOT_PASSWORD="$sql_root_passwd" \ hfysql:latest fi if [ $? -ne 0 ]; then echo "run mysql docker failed"; fi # 等待mysql启动 sleep 5 fi echo "开始启动redis" sleep 2 # 检查是否启用redis安装 enable_redis 为1时启用 为0时不启用 if [ "$enable_redis" == "1" ];then # # 修改配置redis配置文件 sed -i \ -e "s/^port .*$/port $redis_port/g" \ -e "s/^requirepass .*$/requirepass $redis_passwd/g" \ "$SCRIPT_DIR/redis/redis.conf"; # 导入redis镜像 docker load -i ./hfyredis.tar # 检查容器是否已经启动,如果已经启动则关闭并且删除容器 docker ps -a | grep hfy_redis if [ $? -eq 0 ]; then # 停止容器 docker stop hfy_redis # 删除容器 docker rm hfy_redis fi # 启动redis容器 host 模式启动,端口映射到宿主机 docker run -it -p "$redis_port":"$redis_port" \ -v /data/redis:/data/redis \ -v /data/redis/logs:/data/redis/logs \ -v "$SCRIPT_DIR/redis/redis.conf":/etc/redis/redis.conf \ --name hfy_redis -itd hfyredis:latest fi echo "检查是否需要配置sql" sleep 2 if [ "$enable_sql" == "1" ];then echo "等待尝试修改数据库参数" isTrue=1 reConnect=0 while [[ $isTrue == 1 ]] do # 尝试连接数据库 docker exec -it hfysql mysql \ -uroot -p"$sql_root_passwd" \ -e "show databases;" if [ $? -eq 0 ]; then isTrue=0 else echo "数据库连接失败,等待3秒后重试" reConnect=$(($reConnect+1)) if(($reConnect>150));then echo "数据库连接失败失败次数$reConnect,退出程序" exit 1 fi sleep 3 fi done docker ps -a | grep hfysql if [ $? -eq 0 ]; then # 导出数据库 echo "mysql 数据库已经启动" else echo "mysql 数据库启动失败" docker logs hfysql exit 1 fi # 修改数据库名,无法修改数据库名,拒绝操作 # docker exec -it hfysql mysql \ # -uroot -p"hfy$sql_passwd" \ # -e "ALTER DATABASE gb_db TO $sql_db;" # 创建单独用户 docker exec -it hfysql mysql \ -uroot -p"$sql_root_passwd" \ -e "CREATE USER '$sql_user'@'%' IDENTIFIED BY '$sql_passwd';" # 不限制ip访问 docker exec -it hfysql mysql \ -uroot -p"$sql_root_passwd" \ -e "GRANT ALL PRIVILEGES ON $sql_db.* TO '$sql_user'@'%';" # 刷新权限 docker exec -it hfysql mysql \ -uroot -p"$sql_root_passwd" \ -e " FLUSH PRIVILEGES;" echo "等待sql重启,等待15秒" sleep 15 reConnect=0 isTrue=1 while [[ $isTrue == 1 ]] do # 尝试连接数据库 docker exec -it hfysql mysql \ -uroot -p"$sql_root_passwd" \ -e "show databases;" if [ $? -eq 0 ]; then isTrue=0 else echo "数据库连接失败,等待3秒后重试" reConnect=$(($reConnect+1)) if(($reConnect>150));then echo "数据库连接失败失败次数$reConnect,退出程序" exit 1 fi sleep 3 fi done sleep 10 if [ $? -ne 0 ]; then echo "run gb docker failed"; fi fi echo "开始启动国标平台" # 根据参数生成国标平台配置文件 gb_certName="" gb_keyName="" # 判断是否有证书地址 gb_certPath 与 gb_keyPath if [ "$gb_certPath" != "" ] && [ "$gb_keyPath" != "" ];then # 判断证书是否存在 if [ ! -f "$gb_certPath" ];then echo "证书文件不存在,请检查证书路径是否正确" exit 1 fi if [ ! -f "$gb_keyPath" ];then echo "证书文件不存在,请检查证书路径是否正确" exit 1 fi # 获取证书文件名 gb_certName=$(basename "$gb_certPath") gb_keyName=$(basename "$gb_keyPath") # 拷贝证书到容器中 cp "$gb_certPath" "$SCRIPT_DIR/gbRunning/keys" cp "$gb_keyPath" "$SCRIPT_DIR/gbRunning/keys" fi source ./gbRunning/createConfig.sh echo "$gb_WebPort" echo "$gb_sipPort" # 导入国标平台镜像 docker load -i ./hfygb.tar # 检查容器是否已经启动,如果已经启动则关闭并且删除容器 hfy_gb docker ps -a | grep hfy_gp if [ $? -eq 0 ]; then # 停止容器 docker stop hfy_gp # 删除容器 docker rm hfy_gp fi sudo docker run -it --net=host \ -v /data/gb:/data/gb -e LANG=C.UTF-8 \ -v $SCRIPT_DIR"/gbRunning/logs":/data/hfygb/logs \ -v $SCRIPT_DIR"/gbRunning/mFile":/data/hfygb/mFile \ -v $SCRIPT_DIR"/gbRunning/libImages":/data/hfygb/libImages \ -v $SCRIPT_DIR"/gbRunning/keys":/data/hfygb/keys \ -v $SCRIPT_DIR"/gbRunning/application_product.yml":/data/hfygb/config/application_product.yml --name hfy_gp -it hfygb:latest if [ $? -ne 0 ]; then echo "run gb docker failed"; fi echo -e "\033[33m国标平台以全部启动,请使用浏览器访问 http://$gb_host:$gb_WebPort\033[0m";