1+ #! /usr/bin/env bash
2+
3+ set -eu
4+
5+ # 脚本所在目录
6+ CWD=$( dirname $( readlink -f " $0 " ) )
7+ # 相关目录
8+ DIR_DATA=${CWD} /data
9+ DIR_LOGS=${CWD} /logs
10+ DIR_SERVICES=${CWD} /services
11+ # 数据子目录
12+ DATA_DIRS=(
13+ composer
14+ elasticsearch
15+ mongodb
16+ mysql5
17+ mysql8
18+ rabbitmq
19+ redis
20+ )
21+ # 日志子目录
22+ LOGS_DIRS=(
23+ mongodb
24+ mysql/5
25+ mysql/8
26+ nginx
27+ php/73/log
28+ php/73/supervisor
29+ php/74/log
30+ php/74/supervisor
31+ php/80/log
32+ php/80/supervisor
33+ php/81/log
34+ php/81/supervisor
35+ rabbitmq
36+ )
37+ # 服务子目录
38+ LOGS_DIRS=(
39+ elasticsearch
40+ mongodb
41+ mysql
42+ nginx
43+ php/73/log
44+ php/73/supervisor
45+ php/74/log
46+ php/74/supervisor
47+ php/80/log
48+ php/80/supervisor
49+ php/81/log
50+ php/81/supervisor
51+ rabbitmq
52+ )
53+
54+ # 输出
55+ message () {
56+ if [[ $# -lt 1 ]]; then
57+ return
58+ fi
59+
60+ echo -e " # $1 "
61+ }
62+
63+ # 初始化 docker-compose.yml 和 .env 文件
64+ init_startup_files () {
65+ local compose_file_example=$CWD /docker-compose.yml.example
66+ local compose_file=$CWD /docker-compose.yml
67+ local env_file_example=$CWD /.env.example
68+ local env_file=$CWD /.env
69+
70+ message " 正在初始化 docker-compose.yml"
71+ if [[ -f $compose_file ]]; then
72+ message " ${compose_file} 文件已存在"
73+ else
74+ cp $compose_file_example $compose_file
75+ message " ${compose_file} 初始化成功"
76+ fi
77+
78+ message " 正在初始化 .env"
79+ if [[ -f $env_file ]]; then
80+ message " ${env_file} 文件已存在"
81+ else
82+ cp $env_file_example $env_file
83+ message " ${env_file} 初始化成功"
84+ fi
85+ }
86+
87+ # 初始化 DIR_DATA
88+ init_data () {
89+ for d in ${DATA_DIRS[@]}
90+ do
91+ local item=$DIR_DATA /$d
92+ if [[ -d $item ]]; then
93+ message " 处理目录 chmod 777 ${item} "
94+ chmod 777 $item
95+ fi
96+ done
97+ }
98+
99+ # 初始化 DIR_LOGS
100+ init_logs () {
101+ for d in ${LOGS_DIRS[@]}
102+ do
103+ local item=$DIR_LOGS /$d
104+ if [[ -d $item ]]; then
105+ message " 处理目录 chmod 777 ${item} "
106+ chmod 777 $item
107+ fi
108+ done
109+ }
110+
111+ # 初始化 DIR_SERVICES
112+ init_services () {
113+ if [[ $# -lt 1 ]]; then
114+ local p=$DIR_SERVICES
115+ else
116+ local p=$1
117+ fi
118+
119+ if [[ ! -d $p ]]; then
120+ message " ${p} 不是有效的目录"
121+ return
122+ fi
123+
124+ message " 遍历目录 ${p} "
125+ for file in ` ls -A ${p} `
126+ do
127+ local item=$p /$file
128+ if [[ -d $item ]]; then
129+ message " 处理目录 chmod 777 ${item} "
130+ chmod 777 $item
131+ init_services $item
132+ elif [[ -f $item ]]; then
133+ message " 处理文件 chmod 644 ${item} "
134+ chmod 644 $item
135+ fi
136+ done
137+ }
138+
139+ # 清空数据
140+ clean_data () {
141+ for d in ${DATA_DIRS[@]}
142+ do
143+ local item=$DIR_DATA /$d
144+ local item_ignore=$item /.gitignore
145+ if [[ -d $item && -f $item_ignore ]]; then
146+ message " 正在遍历 ${item} "
147+ for file in ` ls -A ${item} `
148+ do
149+ if [[ " .gitignore" != " $file " ]]; then
150+ message " 正在删除 rm -rf ${item} /${file} "
151+ rm -rf " ${item} /${file} "
152+ fi
153+ done
154+ fi
155+ done
156+ }
157+
158+ # 清空数据
159+ clean_logs () {
160+ for d in ${LOGS_DIRS[@]}
161+ do
162+ local item=$DIR_LOGS /$d
163+ local item_ignore=$item /.gitignore
164+ if [[ -d $item && -f $item_ignore ]]; then
165+ message " 正在遍历 ${item} "
166+ for file in ` ls -A ${item} `
167+ do
168+ if [[ " .gitignore" != " $file " ]]; then
169+ message " 正在删除 rm -rf ${item} /${file} "
170+ rm -rf " ${item} /${file} "
171+ fi
172+ done
173+ fi
174+ done
175+ }
176+
177+ init () {
178+ message " ---------------------------------------------"
179+ message " 正在初始化文件"
180+ message " ---------------------------------------------"
181+ init_startup_files
182+
183+ message " ---------------------------------------------"
184+ message " 正在初始化 ${DIR_DATA} "
185+ message " ---------------------------------------------"
186+ init_data
187+
188+ message " ---------------------------------------------"
189+ message " 正在初始化 ${DIR_LOGS} "
190+ message " ---------------------------------------------"
191+ init_logs
192+
193+ message " ---------------------------------------------"
194+ message " 正在初始化 ${DIR_SERVICES} "
195+ message " ---------------------------------------------"
196+ init_services
197+
198+ message " ---------------------------------------------"
199+ message " 初始化完成"
200+ message " ---------------------------------------------"
201+ }
202+
203+ clean () {
204+ message " ---------------------------------------------"
205+ message " 正在清空 ${DIR_DATA} "
206+ message " ---------------------------------------------"
207+ clean_data
208+
209+ message " ---------------------------------------------"
210+ message " 正在清空 ${DIR_LOGS} "
211+ message " ---------------------------------------------"
212+ clean_logs
213+ }
214+
215+ usage () {
216+ cat << HELP
217+ Usage: dpe.sh <init|clean>
218+
219+ # dpe.sh init 初始化目录和配置文件权限
220+ # dpe.sh clean 删除现有的数据和日志文件
221+ HELP
222+ }
223+
224+ if [[ $# -ge 1 ]]; then
225+ case $1 in
226+ " init" )
227+ init
228+ ;;
229+ " clean" )
230+ clean
231+ ;;
232+ * )
233+ message " 无效参数 ${1} "
234+ ;;
235+ esac
236+ else
237+ usage
238+ fi
0 commit comments