cmd 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #!/bin/bash
  2. #fonts color
  3. Green="\033[32m"
  4. Red="\033[31m"
  5. GreenBG="\033[42;37m"
  6. RedBG="\033[41;37m"
  7. Font="\033[0m"
  8. #notification information
  9. OK="${Green}[OK]${Font}"
  10. Error="${Red}[错误]${Font}"
  11. cur_path="$(pwd)"
  12. judge() {
  13. if [[ 0 -eq $? ]]; then
  14. echo -e "${OK} ${GreenBG} $1 完成 ${Font}"
  15. sleep 1
  16. else
  17. echo -e "${Error} ${RedBG} $1 失败${Font}"
  18. exit 1
  19. fi
  20. }
  21. supervisorctl_restart() {
  22. RES=`docker-compose exec php /bin/bash -c "supervisorctl update $1"`
  23. if [ -z "$RES" ];then
  24. docker-compose exec php /bin/bash -c "supervisorctl restart $1"
  25. else
  26. echo -e "$RES"
  27. fi
  28. }
  29. check_docker() {
  30. docker --version &> /dev/null
  31. if [ $? -ne 0 ]; then
  32. echo -e "${Error} ${RedBG} 未安装 Docker!${Font}"
  33. exit 1
  34. fi
  35. docker-compose --version &> /dev/null
  36. if [ $? -ne 0 ]; then
  37. echo -e "${Error} ${RedBG} 未安装 Docker-compose!${Font}"
  38. exit 1
  39. fi
  40. }
  41. check_node() {
  42. npm --version > /dev/null
  43. if [ $? -ne 0 ]; then
  44. echo -e "${Error} ${RedBG} 未安装nodejs!${Font}"
  45. exit 1
  46. fi
  47. }
  48. env_get() {
  49. key=$1
  50. value=`cat ${cur_path}/.env | grep "^$key=" | awk -F '=' '{print $2}'`
  51. echo "$value"
  52. }
  53. env_set() {
  54. key=$1
  55. val=$2
  56. exist=`cat ${cur_path}/.env | grep "^$key="`
  57. if [ -z "$exist" ];then
  58. echo "$key=$val" >> $cur_path/.env
  59. else
  60. command="sed -i '/^$key=/c\\$key=$val' /www/.env"
  61. docker run -it --rm -v ${cur_path}:/www alpine sh -c "$command"
  62. fi
  63. }
  64. env_init() {
  65. if [ ! -f ".env" ];then
  66. cp .env.docker .env
  67. fi
  68. if [ -z "$(env_get DB_ROOT_PASSWORD)" ];then
  69. env_set DB_ROOT_PASSWORD "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-16")"
  70. fi
  71. if [ -z "$(env_get DOCKER_ID)" ];then
  72. env_set DOCKER_ID "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-6")"
  73. fi
  74. }
  75. ####################################################################################
  76. ####################################################################################
  77. ####################################################################################
  78. COMPOSE="docker-compose"
  79. env_init
  80. check_docker
  81. if [ $# -gt 0 ];then
  82. if [[ "$1" == "init" ]] || [[ "$1" == "install" ]]; then
  83. shift 1
  84. networkid=`docker network ls | grep "wookteam-networks-" | awk '{print $1}'`
  85. if [ -n "$networkid" ]; then
  86. docker network rm "$networkid" > /dev/null
  87. fi
  88. rm -rf composer.lock
  89. rm -rf package-lock.json
  90. mkdir -p ${cur_path}/docker/log/supervisor
  91. mkdir -p ${cur_path}/docker/mariadb/data
  92. chmod -R 777 ${cur_path}/docker/mariadb/data
  93. $COMPOSE up -d
  94. $COMPOSE restart php
  95. $COMPOSE exec php /bin/bash -c "composer install"
  96. [ -z "$(env_get APP_KEY)" ] && $COMPOSE exec php /bin/bash -c "php artisan key:generate"
  97. $COMPOSE exec php /bin/bash -c "php artisan migrate --seed"
  98. $COMPOSE exec php /bin/bash -c "php bin/wookteam --port=8000 --ssl=44300"
  99. $COMPOSE exec php /bin/bash -c "php bin/wookteam --wookteam=prod"
  100. $COMPOSE stop
  101. $COMPOSE start
  102. elif [[ "$1" == "update" ]]; then
  103. shift 1
  104. git fetch --all
  105. git reset --hard origin/$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
  106. git pull
  107. $COMPOSE exec php /bin/bash -c "composer update"
  108. $COMPOSE exec php /bin/bash -c "php artisan migrate"
  109. supervisorctl_restart php
  110. elif [[ "$1" == "uninstall" ]]; then
  111. shift 1
  112. read -rp "确定要卸载(含:删除容器、数据库、日志)吗?(y/n): " uninstall
  113. [[ -z ${uninstall} ]] && uninstall="N"
  114. case $uninstall in
  115. [yY][eE][sS] | [yY])
  116. echo -e "${RedBG} 开始卸载... ${Font}"
  117. ;;
  118. *)
  119. echo -e "${GreenBG} 终止卸载。 ${Font}"
  120. exit 2
  121. ;;
  122. esac
  123. docker-compose rm -fs
  124. rm -rf "./docker/mariadb/data"
  125. rm -rf "./docker/log/supervisor"
  126. find "./storage/logs" -name "*.log" | xargs rm -rf
  127. echo -e "${OK} ${GreenBG} 卸载完成 ${Font}"
  128. elif [[ "$1" == "dev" ]]; then
  129. shift 1
  130. check_node
  131. $COMPOSE exec php /bin/bash -c "php bin/wookteam --wookteam=dev"
  132. supervisorctl_restart php
  133. npm run hot
  134. elif [[ "$1" == "prod" ]]; then
  135. shift 1
  136. check_node
  137. $COMPOSE exec php /bin/bash -c "php bin/wookteam --wookteam=prod"
  138. supervisorctl_restart php
  139. rm -rf "./public/js/build"
  140. npm run prod
  141. elif [[ "$1" == "artisan" ]]; then
  142. shift 1
  143. e="php artisan $@" && $COMPOSE exec php /bin/bash -c "$e"
  144. elif [[ "$1" == "php" ]]; then
  145. shift 1
  146. e="php $@" && $COMPOSE exec php /bin/bash -c "$e"
  147. elif [[ "$1" == "composer" ]]; then
  148. shift 1
  149. e="composer $@" && $COMPOSE exec php /bin/bash -c "$e"
  150. elif [[ "$1" == "supervisorctl" ]]; then
  151. shift 1
  152. e="supervisorctl $@" && $COMPOSE exec php /bin/bash -c "$e"
  153. elif [[ "$1" == "test" ]]; then
  154. shift 1
  155. e="./vendor/bin/phpunit $@" && $COMPOSE exec php /bin/bash -c "$e"
  156. elif [[ "$1" == "npm" ]]; then
  157. shift 1
  158. e="npm $@" && $COMPOSE exec php /bin/bash -c "$e"
  159. elif [[ "$1" == "yarn" ]]; then
  160. shift 1
  161. e="yarn $@" && $COMPOSE exec php /bin/bash -c "$e"
  162. elif [[ "$1" == "mysql" ]]; then
  163. shift 1
  164. if [[ "$@" == "bak" ]];then
  165. chmod -R 777 ${cur_path}/docker/mariadb/bak
  166. database=$(env_get DB_DATABASE)
  167. password=$(env_get DB_ROOT_PASSWORD)
  168. filename="${cur_path}/docker/mariadb/bak/${database}_$(date "+%Y%m%d%H%M%S").sql.gz"
  169. $COMPOSE exec mariadb /bin/sh -c "exec mysqldump --databases $database -uroot -p\"$password\"" | gzip > $filename
  170. judge "备份数据库"
  171. [ -f "$filename" ] && echo -e "备份文件:$filename"
  172. else
  173. e="mysql $@" && $COMPOSE exec mariadb /bin/sh -c "$e"
  174. fi
  175. elif [[ "$1" == "restart" ]]; then
  176. shift 1
  177. $COMPOSE stop "$@"
  178. $COMPOSE start "$@"
  179. else
  180. $COMPOSE "$@"
  181. fi
  182. else
  183. $COMPOSE ps
  184. fi