优化脚本命令

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_PORT=20000
DOCKER_ID=

View File

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

View File

@ -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
```
## 升级更新

122
cmd
View File

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

View File

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

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
backup
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}"