From 9e54c689a18e4879da5cb68a403ed87c9f0c346b Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 9 Dec 2021 09:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=84=9A=E6=9C=AC=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 | 2 - README.md | 20 +++--- README_CN.md | 20 +++--- cmd | 122 +++++++++++++++++++++---------------- docker-compose.yml | 3 +- docker/dns/dns.conf | 10 --- docker/mysql/.gitignore | 1 + docker/mysql/repassword.sh | 23 +++++++ 8 files changed, 111 insertions(+), 90 deletions(-) delete mode 100644 docker/dns/dns.conf create mode 100644 docker/mysql/repassword.sh diff --git a/.env.docker b/.env.docker index bc64392e9..3dd499bb2 100644 --- a/.env.docker +++ b/.env.docker @@ -58,5 +58,3 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" LARAVELS_LISTEN_IP=0.0.0.0 LARAVELS_LISTEN_PORT=20000 - -DOCKER_ID= diff --git a/README.md b/README.md index d645f1525..7aee32d41 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,6 @@ cd dootask ``` Installed, project url: **`http://IP:PORT`**(`PORT`Default is`2222`)。 -### Default Account - -```text -account: admin@dootask.com -password: 123456 -``` - ### Change port ```bash @@ -57,19 +50,22 @@ password: 123456 # You can do this using the following command ./cmd artisan "your command" // To run a artisan command ./cmd php "your command" // To run a php command +./cmd nginx "your command" // To run a nginx command +./cmd redis "your command" // To run a redis command ./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 mysql "your command" // To run a mysql command (backup: Backup database, recovery: Restore database) ``` -### NGINX OPEN HTTPS -``` -// .env add -APP_SCHEME=1 +### NGINX PROXY SSL -// nginx add +```bash +# 1、nginx config add proxy_set_header X-Forwarded-Proto $scheme; + +# 2、execute command +./cmd https ``` ## Upgrade diff --git a/README_CN.md b/README_CN.md index cae3223ee..85324b547 100644 --- a/README_CN.md +++ b/README_CN.md @@ -28,13 +28,6 @@ cd dootask ``` 安装完毕,项目地址为:**`http://IP:PORT`**(`PORT`默认为`2222`)。 -### 默认账号 - -```text -account: admin@dootask.com -password: 123456 -``` - ### 更换端口 ```bash @@ -57,19 +50,22 @@ password: 123456 # 你可以使用以下命令来执行 ./cmd artisan "your command" // 运行 artisan 命令 ./cmd php "your command" // 运行 php 命令 +./cmd nginx "your command" // 运行 nginx 命令 +./cmd redis "your command" // 运行 redis 命令 ./cmd composer "your command" // 运行 composer 命令 ./cmd supervisorctl "your command" // 运行 supervisorctl 命令 ./cmd test "your command" // 运行 phpunit 命令 ./cmd mysql "your command" // 运行 mysql 命令 (backup: 备份数据库,recovery: 还原数据库) ``` -### 代理开启 HTTPS -``` -// .env 文件添加 -APP_SCHEME=1 +### NGINX 代理 SSL -// nginx 代理配置添加 +```bash +# 1、nginx 代理配置添加 proxy_set_header X-Forwarded-Proto $scheme; + +# 2、执行命令 +./cmd https ``` ## 升级更新 diff --git a/cmd b/cmd index 84ac3a350..de98655e9 100755 --- a/cmd +++ b/cmd @@ -23,7 +23,7 @@ judge() { fi } -rand(){ +rand() { local min=$1 local max=$(($2-$min+1)) local num=$(($RANDOM+1000000000)) @@ -32,7 +32,7 @@ rand(){ supervisorctl_restart() { local RES=`run_exec php "supervisorctl update $1"` - if [ -z "$RES" ];then + if [ -z "$RES" ]; then run_exec php "supervisorctl restart $1" else echo -e "$RES" @@ -60,6 +60,10 @@ check_node() { fi } +docker_name() { + echo `docker-compose ps | awk '{print $1}' | grep "\-$1\-"` +} + run_compile() { local type=$1 local npxcmd="" @@ -85,22 +89,56 @@ run_compile() { run_exec() { local container=$1 local cmd=$2 - local name=`get_docker_name $container` - if [ "$container" = "mariadb" ]; then + local name=`docker_name $container` + if [ -z "$name" ]; then + echo -e "${Error} ${RedBG} 没有找到 $container 容器! ${Font}" + exit 1 + fi + if [ "$container" = "mariadb" ] || [ "$container" = "nginx" ] || [ "$container" = "redis" ]; 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 +run_mysql() { + if [ "$1" = "backup" ]; then + # 备份数据库 + database=$(env_get DB_DATABASE) + 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 [ "$1" = "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=`docker_name mariadb` + if [ -z "$container_name" ]; then + echo -e "${Error} ${RedBG} 没有找到 mariadb 容器! ${Font}" + exit 1 + fi + docker cp $filename $container_name:/ + run_exec mariadb "gunzip < /$inputname | mysql -u$username -p$password $database" + judge "还原数据库" fi - echo $name } env_get() { @@ -113,7 +151,7 @@ env_set() { local key=$1 local val=$2 local exist=`cat ${cur_path}/.env | grep "^$key="` - if [ -z "$exist" ];then + if [ -z "$exist" ]; then echo "$key=$val" >> $cur_path/.env else command="sed -i '/^$key=/c\\$key=$val' /www/.env" @@ -126,16 +164,16 @@ env_set() { } env_init() { - if [ ! -f ".env" ];then + if [ ! -f ".env" ]; then cp .env.docker .env fi - if [ -z "$(env_get DB_ROOT_PASSWORD)" ];then + 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 APP_ID)" ];then + 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 + if [ -z "$(env_get APP_IPPR)" ]; then env_set APP_IPPR "10.$(rand 50 100).$(rand 100 200)" fi } @@ -147,7 +185,7 @@ env_init() { env_init check_docker -if [ $# -gt 0 ];then +if [ $# -gt 0 ]; then if [[ "$1" == "init" ]] || [[ "$1" == "install" ]]; then shift 1 rm -rf composer.lock @@ -155,13 +193,14 @@ if [ $# -gt 0 ];then mkdir -p ${cur_path}/docker/mysql/data chmod -R 777 ${cur_path}/docker/mysql/data docker-compose up -d - sleep 3 + docker-compose restart php 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 + run_exec mariadb "sh /etc/mysql/repassword.sh" elif [[ "$1" == "update" ]]; then shift 1 git fetch --all @@ -185,7 +224,6 @@ if [ $# -gt 0 ];then ;; 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 @@ -202,7 +240,7 @@ if [ $# -gt 0 ];then 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 + if [[ "$@" == "close" ]]; then env_set APP_DEBUG "false" else env_set APP_DEBUG "true" @@ -210,7 +248,7 @@ if [ $# -gt 0 ];then supervisorctl_restart php elif [[ "$1" == "https" ]]; then shift 1 - if [[ "$@" == "auto" ]];then + if [[ "$@" == "auto" ]]; then env_set APP_SCHEME "auto" else env_set APP_SCHEME "true" @@ -222,40 +260,18 @@ if [ $# -gt 0 ];then elif [[ "$1" == "php" ]]; then shift 1 e="php $@" && run_exec php "$e" + elif [[ "$1" == "nginx" ]]; then + shift 1 + e="nginx $@" && run_exec nginx "$e" + elif [[ "$1" == "redis" ]]; then + shift 1 + e="redis $@" && run_exec redis "$e" elif [[ "$1" == "mysql" ]]; then shift 1 - if [[ "$@" == "backup" ]]; then - # 备份数据库 - database=$(env_get DB_DATABASE) - 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 "还原数据库" + if [ "$1" = "backup" ]; then + run_mysql backup + elif [ "$1" = "recovery" ]; then + run_mysql recovery else e="mysql $@" && run_exec mariadb "$e" fi diff --git a/docker-compose.yml b/docker-compose.yml index d651602f3..08780ec9f 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,6 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock - ./docker/crontab/crontab.conf:/etc/supervisor/conf.d/crontab.conf - - ./docker/dns/dns.conf:/etc/supervisor/conf.d/dns.conf - ./docker/php/php.conf:/etc/supervisor/conf.d/php.conf - ./docker/php/php.ini:/usr/local/etc/php/php.ini - ./docker/log/supervisor:/var/log/supervisor @@ -65,10 +64,12 @@ services: ports: # mysql ports item - "33062:3306" # mysql ports value volumes: + - ./docker/mysql/repassword.sh:/etc/mysql/repassword.sh - ./docker/mysql/conf.d:/etc/mysql/conf.d - ./docker/mysql/data:/var/lib/mysql environment: TZ: "Asia/Shanghai" + MYSQL_PREFIX: "${DB_PREFIX}" MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" MYSQL_DATABASE: "${DB_DATABASE}" MYSQL_USER: "${DB_USERNAME}" diff --git a/docker/dns/dns.conf b/docker/dns/dns.conf deleted file mode 100644 index 53c1a97ad..000000000 --- a/docker/dns/dns.conf +++ /dev/null @@ -1,10 +0,0 @@ -[program:dns] -directory=/var/www/docker/dns -command=/etc/init.d/dnsmasq restart -numprocs=1 -autostart=true -autorestart=false -startretries=1 -user=root -redirect_stderr=true -stdout_logfile=/var/log/supervisor/%(program_name)s.log diff --git a/docker/mysql/.gitignore b/docker/mysql/.gitignore index 32868fed8..a36272c18 100644 --- a/docker/mysql/.gitignore +++ b/docker/mysql/.gitignore @@ -1,2 +1,3 @@ data +backup bak diff --git a/docker/mysql/repassword.sh b/docker/mysql/repassword.sh new file mode 100644 index 000000000..54fc375b1 --- /dev/null +++ b/docker/mysql/repassword.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +GreenBG="\033[42;37m" +Font="\033[0m" + +new_encrypt=$(date +%s%N | md5sum | awk '{print $1}' | cut -c 1-6) +new_password=$(date +%s%N | md5sum | awk '{print $1}' | cut -c 1-16) +md5_password=$(echo -n `echo -n $new_password | md5sum | awk '{print $1}'`$new_encrypt | md5sum | awk '{print $1}') + +content=$(echo "select \`email\` from ${MYSQL_PREFIX}users where \`userid\`=1;" | mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE) +account=$(echo "$content" | sed -n '2p') + +if [ -z "$account" ]; then + echo "错误:账号不存在!" + exit 1 +fi + +mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE <