优化脚本命令

This commit is contained in:
kuaifan 2021-12-09 09:05:25 +08:00
parent ee7a53ff89
commit 9e54c689a1
8 changed files with 111 additions and 90 deletions

View File

@ -58,5 +58,3 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
LARAVELS_LISTEN_IP=0.0.0.0 LARAVELS_LISTEN_IP=0.0.0.0
LARAVELS_LISTEN_PORT=20000 LARAVELS_LISTEN_PORT=20000
DOCKER_ID=

View File

@ -28,13 +28,6 @@ cd dootask
``` ```
Installed, project url: **`http://IP:PORT`**`PORT`Default is`2222`)。 Installed, project url: **`http://IP:PORT`**`PORT`Default is`2222`)。
### Default Account
```text
account: admin@dootask.com
password: 123456
```
### Change port ### Change port
```bash ```bash
@ -57,19 +50,22 @@ password: 123456
# You can do this using the following command # You can do this using the following command
./cmd artisan "your command" // To run a artisan command ./cmd artisan "your command" // To run a artisan command
./cmd php "your command" // To run a php 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 composer "your command" // To run a composer command
./cmd supervisorctl "your command" // To run a supervisorctl command ./cmd supervisorctl "your command" // To run a supervisorctl command
./cmd test "your command" // To run a phpunit 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) ./cmd mysql "your command" // To run a mysql command (backup: Backup database, recovery: Restore database)
``` ```
### NGINX OPEN HTTPS ### NGINX PROXY SSL
```
// .env add
APP_SCHEME=1
// nginx add ```bash
# 1、nginx config add
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
# 2、execute command
./cmd https
``` ```
## Upgrade ## Upgrade

View File

@ -28,13 +28,6 @@ cd dootask
``` ```
安装完毕,项目地址为:**`http://IP:PORT`**`PORT`默认为`2222`)。 安装完毕,项目地址为:**`http://IP:PORT`**`PORT`默认为`2222`)。
### 默认账号
```text
account: admin@dootask.com
password: 123456
```
### 更换端口 ### 更换端口
```bash ```bash
@ -57,19 +50,22 @@ password: 123456
# 你可以使用以下命令来执行 # 你可以使用以下命令来执行
./cmd artisan "your command" // 运行 artisan 命令 ./cmd artisan "your command" // 运行 artisan 命令
./cmd php "your command" // 运行 php 命令 ./cmd php "your command" // 运行 php 命令
./cmd nginx "your command" // 运行 nginx 命令
./cmd redis "your command" // 运行 redis 命令
./cmd composer "your command" // 运行 composer 命令 ./cmd composer "your command" // 运行 composer 命令
./cmd supervisorctl "your command" // 运行 supervisorctl 命令 ./cmd supervisorctl "your command" // 运行 supervisorctl 命令
./cmd test "your command" // 运行 phpunit 命令 ./cmd test "your command" // 运行 phpunit 命令
./cmd mysql "your command" // 运行 mysql 命令 (backup: 备份数据库recovery: 还原数据库) ./cmd mysql "your command" // 运行 mysql 命令 (backup: 备份数据库recovery: 还原数据库)
``` ```
### 代理开启 HTTPS ### NGINX 代理 SSL
```
// .env 文件添加
APP_SCHEME=1
// nginx 代理配置添加 ```bash
# 1、nginx 代理配置添加
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
# 2、执行命令
./cmd https
``` ```
## 升级更新 ## 升级更新

122
cmd
View File

@ -23,7 +23,7 @@ judge() {
fi fi
} }
rand(){ rand() {
local min=$1 local min=$1
local max=$(($2-$min+1)) local max=$(($2-$min+1))
local num=$(($RANDOM+1000000000)) local num=$(($RANDOM+1000000000))
@ -32,7 +32,7 @@ rand(){
supervisorctl_restart() { supervisorctl_restart() {
local RES=`run_exec php "supervisorctl update $1"` local RES=`run_exec php "supervisorctl update $1"`
if [ -z "$RES" ];then if [ -z "$RES" ]; then
run_exec php "supervisorctl restart $1" run_exec php "supervisorctl restart $1"
else else
echo -e "$RES" echo -e "$RES"
@ -60,6 +60,10 @@ check_node() {
fi fi
} }
docker_name() {
echo `docker-compose ps | awk '{print $1}' | grep "\-$1\-"`
}
run_compile() { run_compile() {
local type=$1 local type=$1
local npxcmd="" local npxcmd=""
@ -85,22 +89,56 @@ run_compile() {
run_exec() { run_exec() {
local container=$1 local container=$1
local cmd=$2 local cmd=$2
local name=`get_docker_name $container` local name=`docker_name $container`
if [ "$container" = "mariadb" ]; then 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" docker exec -it "$name" /bin/sh -c "$cmd"
else else
docker exec -it "$name" /bin/bash -c "$cmd" docker exec -it "$name" /bin/bash -c "$cmd"
fi fi
} }
get_docker_name() { run_mysql() {
local container=$1 if [ "$1" = "backup" ]; then
local name=`docker-compose ps | awk '{print $1}' | grep "\-$container\-"` # 备份数据库
if [ -z "$name" ]; then database=$(env_get DB_DATABASE)
echo -e "${Error} ${RedBG} 没有找到 $container 容器! ${Font}" username=$(env_get DB_USERNAME)
exit 1 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 fi
echo $name
} }
env_get() { env_get() {
@ -113,7 +151,7 @@ env_set() {
local key=$1 local key=$1
local val=$2 local val=$2
local exist=`cat ${cur_path}/.env | grep "^$key="` local exist=`cat ${cur_path}/.env | grep "^$key="`
if [ -z "$exist" ];then if [ -z "$exist" ]; then
echo "$key=$val" >> $cur_path/.env echo "$key=$val" >> $cur_path/.env
else else
command="sed -i '/^$key=/c\\$key=$val' /www/.env" command="sed -i '/^$key=/c\\$key=$val' /www/.env"
@ -126,16 +164,16 @@ env_set() {
} }
env_init() { env_init() {
if [ ! -f ".env" ];then if [ ! -f ".env" ]; then
cp .env.docker .env cp .env.docker .env
fi 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")" env_set DB_ROOT_PASSWORD "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-16")"
fi 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")" env_set APP_ID "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-6")"
fi 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)" env_set APP_IPPR "10.$(rand 50 100).$(rand 100 200)"
fi fi
} }
@ -147,7 +185,7 @@ env_init() {
env_init env_init
check_docker check_docker
if [ $# -gt 0 ];then if [ $# -gt 0 ]; then
if [[ "$1" == "init" ]] || [[ "$1" == "install" ]]; then if [[ "$1" == "init" ]] || [[ "$1" == "install" ]]; then
shift 1 shift 1
rm -rf composer.lock rm -rf composer.lock
@ -155,13 +193,14 @@ if [ $# -gt 0 ];then
mkdir -p ${cur_path}/docker/mysql/data mkdir -p ${cur_path}/docker/mysql/data
chmod -R 777 ${cur_path}/docker/mysql/data chmod -R 777 ${cur_path}/docker/mysql/data
docker-compose up -d docker-compose up -d
sleep 3 docker-compose restart php
run_exec php "composer install" run_exec php "composer install"
[ -z "$(env_get APP_KEY)" ] && run_exec php "php artisan key:generate" [ -z "$(env_get APP_KEY)" ] && run_exec php "php artisan key:generate"
run_exec php "php artisan migrate --seed" run_exec php "php artisan migrate --seed"
run_exec php "php bin/run --mode=prod" run_exec php "php bin/run --mode=prod"
docker-compose stop docker-compose stop
docker-compose start docker-compose start
run_exec mariadb "sh /etc/mysql/repassword.sh"
elif [[ "$1" == "update" ]]; then elif [[ "$1" == "update" ]]; then
shift 1 shift 1
git fetch --all git fetch --all
@ -185,7 +224,6 @@ if [ $# -gt 0 ];then
;; ;;
esac esac
docker-compose down docker-compose down
docker-compose rm -fs
rm -rf "./docker/mysql/data" rm -rf "./docker/mysql/data"
rm -rf "./docker/log/supervisor" rm -rf "./docker/log/supervisor"
find "./storage/logs" -name "*.log" | xargs rm -rf 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 docker run -it --rm -v ${cur_path}:/home/node/apidoc kuaifan/apidoc -i app/Http/Controllers/Api -o public/docs
elif [[ "$1" == "debug" ]]; then elif [[ "$1" == "debug" ]]; then
shift 1 shift 1
if [[ "$@" == "close" ]];then if [[ "$@" == "close" ]]; then
env_set APP_DEBUG "false" env_set APP_DEBUG "false"
else else
env_set APP_DEBUG "true" env_set APP_DEBUG "true"
@ -210,7 +248,7 @@ if [ $# -gt 0 ];then
supervisorctl_restart php supervisorctl_restart php
elif [[ "$1" == "https" ]]; then elif [[ "$1" == "https" ]]; then
shift 1 shift 1
if [[ "$@" == "auto" ]];then if [[ "$@" == "auto" ]]; then
env_set APP_SCHEME "auto" env_set APP_SCHEME "auto"
else else
env_set APP_SCHEME "true" env_set APP_SCHEME "true"
@ -222,40 +260,18 @@ if [ $# -gt 0 ];then
elif [[ "$1" == "php" ]]; then elif [[ "$1" == "php" ]]; then
shift 1 shift 1
e="php $@" && run_exec php "$e" 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 elif [[ "$1" == "mysql" ]]; then
shift 1 shift 1
if [[ "$@" == "backup" ]]; then if [ "$1" = "backup" ]; then
# 备份数据库 run_mysql backup
database=$(env_get DB_DATABASE) elif [ "$1" = "recovery" ]; then
username=$(env_get DB_USERNAME) run_mysql recovery
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 else
e="mysql $@" && run_exec mariadb "$e" e="mysql $@" && run_exec mariadb "$e"
fi fi

View File

@ -7,7 +7,6 @@ services:
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
- ./docker/crontab/crontab.conf:/etc/supervisor/conf.d/crontab.conf - ./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.conf:/etc/supervisor/conf.d/php.conf
- ./docker/php/php.ini:/usr/local/etc/php/php.ini - ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./docker/log/supervisor:/var/log/supervisor - ./docker/log/supervisor:/var/log/supervisor
@ -65,10 +64,12 @@ services:
ports: # mysql ports item ports: # mysql ports item
- "33062:3306" # mysql ports value - "33062:3306" # mysql ports value
volumes: volumes:
- ./docker/mysql/repassword.sh:/etc/mysql/repassword.sh
- ./docker/mysql/conf.d:/etc/mysql/conf.d - ./docker/mysql/conf.d:/etc/mysql/conf.d
- ./docker/mysql/data:/var/lib/mysql - ./docker/mysql/data:/var/lib/mysql
environment: environment:
TZ: "Asia/Shanghai" TZ: "Asia/Shanghai"
MYSQL_PREFIX: "${DB_PREFIX}"
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_DATABASE: "${DB_DATABASE}" MYSQL_DATABASE: "${DB_DATABASE}"
MYSQL_USER: "${DB_USERNAME}" MYSQL_USER: "${DB_USERNAME}"

View File

@ -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

View File

@ -1,2 +1,3 @@
data data
backup
bak bak

View File

@ -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 <<EOF
update ${MYSQL_PREFIX}users set \`encrypt\`='${new_encrypt}',\`password\`='${md5_password}' where \`userid\`=1;
EOF
echo "账号: ${GreenBG}${account}${Font}"
echo "密码: ${GreenBG}${new_password}${Font}"