From f796c2c1e2aae8ee01ece815197821fae7bce679 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Wed, 8 Dec 2021 17:27:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=89=E8=A3=85=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.docker | 6 +- README.md | 4 +- README_CN.md | 4 +- app/Http/Controllers/Api/FileController.php | 2 +- app/Http/Controllers/Api/UsersController.php | 4 +- cmd | 184 ++++++++++++------ database/seeders/UsersTableSeeder.php | 8 +- docker-compose.yml | 29 +-- docker/nginx/default.conf | 4 +- docker/office/data/.gitignore | 0 docker/office/logs/.gitignore | 0 resources/assets/js/components/OnlyOffice.vue | 2 +- resources/views/main.blade.php | 2 +- 13 files changed, 159 insertions(+), 90 deletions(-) mode change 100644 => 100755 docker/office/data/.gitignore mode change 100644 => 100755 docker/office/logs/.gitignore diff --git a/.env.docker b/.env.docker index 9b72dda04..9afb58d1d 100644 --- a/.env.docker +++ b/.env.docker @@ -4,6 +4,8 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost +APP_ID= +APP_IPPR= APP_PORT=2222 APP_PORT_SSL=2223 @@ -11,7 +13,7 @@ LOG_CHANNEL=stack LOG_LEVEL=debug DB_CONNECTION=mysql -DB_HOST=10.22.22.5 +DB_HOST="${APP_IPPR}.5" DB_PORT=3306 DB_DATABASE=dootask DB_USERNAME=dootask @@ -28,7 +30,7 @@ SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1 -REDIS_HOST=10.22.22.4 +REDIS_HOST="${APP_IPPR}.4" REDIS_PASSWORD=null REDIS_PORT=6379 diff --git a/README.md b/README.md index 21dc4e016..2e3b7cefb 100644 --- a/README.md +++ b/README.md @@ -60,9 +60,7 @@ password: 123456 ./cmd composer "your command" // To run a composer command ./cmd supervisorctl "your command" // To run a supervisorctl command ./cmd test "your command" // To run a phpunit command -./cmd npm "your command" // To run a npm command -./cmd yarn "your command" // To run a yarn command -./cmd mysql "your command" // To run a mysql command (use `./cmd mysql bak` Backup database) +./cmd mysql "your command" // To run a mysql command (backup: Backup database, recovery: Restore database) ``` ## Upgrade diff --git a/README_CN.md b/README_CN.md index b249f1916..7f0cb49c9 100644 --- a/README_CN.md +++ b/README_CN.md @@ -60,9 +60,7 @@ password: 123456 ./cmd composer "your command" // 运行 composer 命令 ./cmd supervisorctl "your command" // 运行 supervisorctl 命令 ./cmd test "your command" // 运行 phpunit 命令 -./cmd npm "your command" // 运行 npm 命令 -./cmd yarn "your command" // 运行 yarn 命令 -./cmd mysql "your command" // 运行 mysql 命令 (可以使用 `./cmd mysql bak` 命令来备份数据库) +./cmd mysql "your command" // 运行 mysql 命令 (backup: 备份数据库,recovery: 还原数据库) ``` ## 升级更新 diff --git a/app/Http/Controllers/Api/FileController.php b/app/Http/Controllers/Api/FileController.php index 78d07f7ac..4493aece6 100755 --- a/app/Http/Controllers/Api/FileController.php +++ b/app/Http/Controllers/Api/FileController.php @@ -353,7 +353,7 @@ class FileController extends AbstractController // if ($status === 2) { $parse = parse_url($url); - $from = 'http://10.22.22.6' . $parse['path'] . '?' . $parse['query']; + $from = 'http://' . env('APP_IPPR') . '.6' . $parse['path'] . '?' . $parse['query']; $path = 'uploads/office/' . date("Ym") . '/' . $file->id . '/' . $user->userid . '-' . $key; $save = public_path($path); Base::makeDir(dirname($save)); diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 41e0a6006..935ec4fd1 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -175,9 +175,9 @@ class UsersController extends AbstractController "userimg": "", "login_num": 10, "changepass": 0, - "last_ip": "10.22.22.1", + "last_ip": "127.0.0.1", "last_at": "2021-06-01 12:00:00", - "line_ip": "10.22.22.1", + "line_ip": "127.0.0.1", "line_at": "2021-06-01 12:00:00", "created_ip": "", } diff --git a/cmd b/cmd index 773c3ceba..47bcb4f97 100755 --- a/cmd +++ b/cmd @@ -23,10 +23,17 @@ judge() { fi } +rand(){ + local min=$1 + local max=$(($2-$min+1)) + local num=$(($RANDOM+1000000000)) + echo $(($num%$max+$min)) +} + supervisorctl_restart() { - RES=`docker-compose exec php /bin/bash -c "supervisorctl update $1"` + local RES=`run_exec php "supervisorctl update $1"` if [ -z "$RES" ];then - docker-compose exec php /bin/bash -c "supervisorctl restart $1" + run_exec php "supervisorctl restart $1" else echo -e "$RES" fi @@ -53,16 +60,59 @@ check_node() { fi } +run_compile() { + local type=$1 + local npxcmd="" + check_node + if [ ! -d "./node_modules" ]; then + npm install + fi + run_exec php "php bin/run --mode=$type" + supervisorctl_restart php + # + mix -V &> /dev/null + if [ $? -ne 0 ]; then + npxcmd="npx" + fi + if [ "$type" = "prod" ]; then + rm -rf "./public/js/build" + $npxcmd mix --production + else + $npxcmd mix watch --hot + fi +} + +run_exec() { + local container=$1 + local cmd=$2 + local name=`get_docker_name $container` + if [ "$container" = "mariadb" ]; then + docker exec -it "$name" /bin/sh -c "$cmd" + else + docker exec -it "$name" /bin/bash -c "$cmd" + fi +} + +get_docker_name() { + local container=$1 + local name=`docker-compose ps | awk '{print $1}' | grep "\-$container\-"` + if [ -z "$name" ]; then + echo -e "${Error} ${RedBG} 没有找到 $container 容器! ${Font}" + exit 1 + fi + echo $name +} + env_get() { - key=$1 - value=`cat ${cur_path}/.env | grep "^$key=" | awk -F '=' '{print $2}'` + local key=$1 + local value=`cat ${cur_path}/.env | grep "^$key=" | awk -F '=' '{print $2}'` echo "$value" } env_set() { - key=$1 - val=$2 - exist=`cat ${cur_path}/.env | grep "^$key="` + local key=$1 + local val=$2 + local exist=`cat ${cur_path}/.env | grep "^$key="` if [ -z "$exist" ];then echo "$key=$val" >> $cur_path/.env else @@ -78,8 +128,11 @@ env_init() { if [ -z "$(env_get DB_ROOT_PASSWORD)" ];then env_set DB_ROOT_PASSWORD "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-16")" fi - if [ -z "$(env_get DOCKER_ID)" ];then - env_set DOCKER_ID "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-6")" + if [ -z "$(env_get APP_ID)" ];then + env_set APP_ID "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-6")" + fi + if [ -z "$(env_get APP_IPPR)" ];then + env_set APP_IPPR "10.$(rand 50 100).$(rand 100 200)" fi } @@ -87,38 +140,33 @@ env_init() { #################################################################################### #################################################################################### -COMPOSE="docker-compose" env_init check_docker if [ $# -gt 0 ];then if [[ "$1" == "init" ]] || [[ "$1" == "install" ]]; then shift 1 - networkid=`docker network ls | grep "dooteak-networks-" | awk '{print $1}'` - if [ -n "$networkid" ]; then - docker network rm "$networkid" > /dev/null - fi rm -rf composer.lock rm -rf package-lock.json mkdir -p ${cur_path}/docker/mysql/data chmod -R 777 ${cur_path}/docker/mysql/data - $COMPOSE up -d - $COMPOSE restart php - $COMPOSE exec php /bin/bash -c "composer install" - [ -z "$(env_get APP_KEY)" ] && $COMPOSE exec php /bin/bash -c "php artisan key:generate" - $COMPOSE exec php /bin/bash -c "php artisan migrate --seed" - $COMPOSE exec php /bin/bash -c "php bin/run --port=2222 --ssl=2223" - $COMPOSE exec php /bin/bash -c "php bin/run --mode=prod" - $COMPOSE stop - $COMPOSE start + docker-compose up -d + sleep 3 + run_exec php "composer install" + [ -z "$(env_get APP_KEY)" ] && run_exec php "php artisan key:generate" + run_exec php "php artisan migrate --seed" + run_exec php "php bin/run --mode=prod" + docker-compose stop + docker-compose start elif [[ "$1" == "update" ]]; then shift 1 git fetch --all git reset --hard origin/$(git branch | sed -n -e 's/^\* \(.*\)/\1/p') git pull - $COMPOSE exec php /bin/bash -c "composer update" - $COMPOSE exec php /bin/bash -c "php artisan migrate" + run_exec php "composer update" + run_exec php "php artisan migrate" supervisorctl_restart php + docker-compose up -d elif [[ "$1" == "uninstall" ]]; then shift 1 read -rp "确定要卸载(含:删除容器、数据库、日志)吗?(y/n): " uninstall @@ -132,27 +180,22 @@ if [ $# -gt 0 ];then exit 2 ;; esac + docker-compose down docker-compose rm -fs rm -rf "./docker/mysql/data" rm -rf "./docker/log/supervisor" find "./storage/logs" -name "*.log" | xargs rm -rf echo -e "${OK} ${GreenBG} 卸载完成 ${Font}" - elif [[ "$1" == "dev" ]]; then + elif [[ "$1" == "dev" ]] || [[ "$1" == "development" ]]; then shift 1 - check_node - $COMPOSE exec php /bin/bash -c "php bin/run --mode=dev" - supervisorctl_restart php - mix watch --hot - elif [[ "$1" == "prod" ]]; then + run_compile dev + elif [[ "$1" == "prod" ]] || [[ "$1" == "production" ]]; then shift 1 - check_node - $COMPOSE exec php /bin/bash -c "php bin/run --mode=prod" - supervisorctl_restart php - rm -rf "./public/js/build" - mix --production - elif [[ "$1" == "super" ]]; then + run_compile prod + elif [[ "$1" == "doc" ]]; then shift 1 - supervisorctl_restart "$@" + run_exec php "php app/Http/Controllers/Api/apidoc.php" + docker run -it --rm -v ${cur_path}:/home/node/apidoc kuaifan/apidoc -i app/Http/Controllers/Api -o public/docs elif [[ "$1" == "debug" ]]; then shift 1 if [[ "$@" == "close" ]];then @@ -171,44 +214,69 @@ if [ $# -gt 0 ];then supervisorctl_restart php elif [[ "$1" == "artisan" ]]; then shift 1 - e="php artisan $@" && $COMPOSE exec php /bin/bash -c "$e" + e="php artisan $@" && run_exec php "$e" elif [[ "$1" == "php" ]]; then shift 1 - e="php $@" && $COMPOSE exec php /bin/bash -c "$e" + e="php $@" && run_exec php "$e" elif [[ "$1" == "mysql" ]]; then shift 1 - if [[ "$@" == "bak" ]];then + if [[ "$@" == "backup" ]]; then + # 备份数据库 database=$(env_get DB_DATABASE) - password=$(env_get DB_ROOT_PASSWORD) - filename="${cur_path}/docker/mysql/bak/${database}_$(date "+%Y%m%d%H%M%S").sql.gz" - $COMPOSE exec mariadb /bin/sh -c "exec mysqldump --databases $database -uroot -p\"$password\"" | gzip > $filename + username=$(env_get DB_USERNAME) + password=$(env_get DB_PASSWORD) + mkdir -p ${cur_path}/docker/mysql/backup + filename="${cur_path}/docker/mysql/backup/${database}_$(date "+%Y%m%d%H%M%S").sql.gz" + run_exec mariadb "exec mysqldump --databases $database -u$username -p$password" | gzip > $filename judge "备份数据库" [ -f "$filename" ] && echo -e "备份文件:$filename" + elif [[ "$@" == "recovery" ]];then + # 还原数据库 + database=$(env_get DB_DATABASE) + username=$(env_get DB_USERNAME) + password=$(env_get DB_PASSWORD) + mkdir -p ${cur_path}/docker/mysql/backup + list=`ls -1 "${cur_path}/docker/mysql/backup" | grep ".sql.gz"` + if [ -z "$list" ]; then + echo -e "${Error} ${RedBG} 没有备份文件!${Font}" + exit 1 + fi + echo "$list" + read -rp "请输入备份文件名称还原:" inputname + filename="${cur_path}/docker/mysql/backup/${inputname}" + if [ ! -f "$filename" ]; then + echo -e "${Error} ${RedBG} 备份文件:${inputname} 不存在! ${Font}" + exit 1 + fi + container_name=`get_docker_name mariadb` + docker cp $filename $container_name:/ + run_exec mariadb "gunzip < /$inputname | mysql -u$username -p$password $database" + judge "还原数据库" else - e="mysql $@" && $COMPOSE exec mariadb /bin/sh -c "$e" + e="mysql $@" && run_exec mariadb "$e" fi elif [[ "$1" == "composer" ]]; then shift 1 - e="composer $@" && $COMPOSE exec php /bin/bash -c "$e" + e="composer $@" && run_exec php "$e" + elif [[ "$1" == "super" ]]; then + shift 1 + supervisorctl_restart "$@" elif [[ "$1" == "supervisorctl" ]]; then shift 1 - e="supervisorctl $@" && $COMPOSE exec php /bin/bash -c "$e" + e="supervisorctl $@" && run_exec php "$e" + elif [[ "$1" == "models" ]]; then + shift 1 + run_exec php "php artisan ide-helper:models -W" elif [[ "$1" == "test" ]]; then shift 1 - e="./vendor/bin/phpunit $@" && $COMPOSE exec php /bin/bash -c "$e" - elif [[ "$1" == "npm" ]]; then - shift 1 - e="npm $@" && $COMPOSE exec php /bin/bash -c "$e" - elif [[ "$1" == "yarn" ]]; then - shift 1 - e="yarn $@" && $COMPOSE exec php /bin/bash -c "$e" + e="./vendor/bin/phpunit $@" && run_exec php "$e" elif [[ "$1" == "restart" ]]; then shift 1 - $COMPOSE stop "$@" - $COMPOSE start "$@" + docker-compose stop "$@" + docker-compose start "$@" else - $COMPOSE "$@" + docker-compose "$@" fi else - $COMPOSE ps + docker-compose ps fi diff --git a/database/seeders/UsersTableSeeder.php b/database/seeders/UsersTableSeeder.php index 8161805c5..92ebc56f1 100644 --- a/database/seeders/UsersTableSeeder.php +++ b/database/seeders/UsersTableSeeder.php @@ -34,9 +34,9 @@ class UsersTableSeeder extends Seeder 'password' => '7d996ac317f1b9db564750ef3b8790fc', 'changepass' => 0, 'login_num' => 73, - 'last_ip' => '10.22.22.1', + 'last_ip' => '127.0.0.1', 'last_at' => seeders_at('2021-07-01 16:58:16'), - 'line_ip' => '10.22.22.1', + 'line_ip' => '127.0.0.1', 'line_at' => seeders_at('2021-07-01 17:43:48'), 'task_dialog_id' => 18, 'created_ip' => '', @@ -56,9 +56,9 @@ class UsersTableSeeder extends Seeder 'password' => '7eedd4cbf70da996d21f641bcc6cb412', 'changepass' => 0, 'login_num' => 63, - 'last_ip' => '10.22.22.1', + 'last_ip' => '127.0.0.1', 'last_at' => seeders_at('2021-07-01 16:57:40'), - 'line_ip' => '10.22.22.1', + 'line_ip' => '127.0.0.1', 'line_at' => seeders_at('2021-07-01 16:57:40'), 'task_dialog_id' => 16, 'created_ip' => '', diff --git a/docker-compose.yml b/docker-compose.yml index 676a1eafe..40bc3dbcb 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: php: - container_name: "dooteak-php-${DOCKER_ID}" + container_name: "dootask-php-${APP_ID}" image: "kuaifan/phpswoole:8.0" volumes: - /var/run/docker.sock:/var/run/docker.sock @@ -24,14 +24,14 @@ services: MYSQL_PASSWORD: "${DB_PASSWORD}" networks: extnetwork: - ipv4_address: 10.22.22.2 + ipv4_address: "${APP_IPPR}.2" depends_on: - redis - mariadb restart: unless-stopped nginx: - container_name: "dooteak-nginx-${DOCKER_ID}" + container_name: "dootask-nginx-${APP_ID}" image: "nginx:alpine" ports: - "${APP_PORT}:80" @@ -44,23 +44,26 @@ services: TZ: "Asia/Shanghai" networks: extnetwork: - ipv4_address: 10.22.22.3 + ipv4_address: "${APP_IPPR}.3" depends_on: - php + links: + - php + - office restart: unless-stopped redis: - container_name: "dooteak-redis-${DOCKER_ID}" + container_name: "dootask-redis-${APP_ID}" image: "redis:alpine" environment: TZ: "Asia/Shanghai" networks: extnetwork: - ipv4_address: 10.22.22.4 + ipv4_address: "${APP_IPPR}.4" restart: unless-stopped mariadb: - container_name: "dooteak-mariadb-${DOCKER_ID}" + container_name: "dootask-mariadb-${APP_ID}" image: "mariadb" ports: # mysql ports item - "33062:3306" # mysql ports value @@ -76,11 +79,11 @@ services: MYSQL_PASSWORD: "${DB_PASSWORD}" networks: extnetwork: - ipv4_address: 10.22.22.5 + ipv4_address: "${APP_IPPR}.5" restart: unless-stopped office: - container_name: "dooteak-office-${DOCKER_ID}" + container_name: "dootask-office-${APP_ID}" image: "onlyoffice/documentserver:6.3.1.32" volumes: - ./docker/office/data:/var/www/onlyoffice/Data @@ -92,13 +95,13 @@ services: TZ: "Asia/Shanghai" networks: extnetwork: - ipv4_address: 10.22.22.6 + ipv4_address: "${APP_IPPR}.6" restart: unless-stopped networks: extnetwork: - name: "dooteak-networks-${DOCKER_ID}" + name: "dootask-networks-${APP_ID}" ipam: config: - - subnet: 10.22.22.0/24 - gateway: 10.22.22.1 + - subnet: "${APP_IPPR}.0/24" + gateway: "${APP_IPPR}.1" diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index e024d19e3..52918c885 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -3,11 +3,11 @@ map $http_upgrade $connection_upgrade { '' close; } upstream service { - server 10.22.22.2:20000 weight=5 max_fails=3 fail_timeout=30s; + server php:20000 weight=5 max_fails=3 fail_timeout=30s; keepalive 16; } upstream office { - server 10.22.22.6 weight=5 max_fails=3 fail_timeout=30s; + server office weight=5 max_fails=3 fail_timeout=30s; keepalive 16; } server { diff --git a/docker/office/data/.gitignore b/docker/office/data/.gitignore old mode 100644 new mode 100755 diff --git a/docker/office/logs/.gitignore b/docker/office/logs/.gitignore old mode 100644 new mode 100755 diff --git a/resources/assets/js/components/OnlyOffice.vue b/resources/assets/js/components/OnlyOffice.vue index 613671cbe..c80a800c8 100644 --- a/resources/assets/js/components/OnlyOffice.vue +++ b/resources/assets/js/components/OnlyOffice.vue @@ -44,7 +44,7 @@ export default { data() { return { - serverUrl: 'http://10.22.22.3/', + serverUrl: 'http://' + window.systemInformation.ippr + '.3/', fileName: null, fileType: null, diff --git a/resources/views/main.blade.php b/resources/views/main.blade.php index 9d294032e..1ac9be582 100755 --- a/resources/views/main.blade.php +++ b/resources/views/main.blade.php @@ -17,7 +17,7 @@