-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmanage-service.sh
More file actions
executable file
·396 lines (354 loc) · 10.5 KB
/
manage-service.sh
File metadata and controls
executable file
·396 lines (354 loc) · 10.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
#!/bin/bash
# 帳戶申請系統 Docker 管理腳本
# 使用方法: ./manage-docker.sh [command]
set -e
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印彩色信息
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 顯示幫助信息
show_help() {
echo "帳戶申請系統 Docker 管理腳本"
echo ""
echo "使用方法: ./manage-docker.sh [command]"
echo ""
echo "環境管理:"
echo " dev - 啟動開發環境"
echo " prod - 啟動生產環境"
echo " stop - 停止所有服務"
echo " restart - 重新啟動服務"
echo " status - 查看服務狀態"
echo ""
echo "構建管理:"
echo " build - 重新構建生產環境鏡像"
echo " build-dev - 重新構建開發環境鏡像"
echo " rebuild - 完全重新構建生產環境(無快取)"
echo " rebuild-dev - 完全重新構建開發環境(無快取)"
echo ""
echo "容器操作:"
echo " shell - 進入生產環境應用容器shell"
echo " shell-dev - 進入開發環境應用容器shell"
echo " db-shell - 進入生產環境資料庫shell"
echo " db-shell-dev - 進入開發環境資料庫shell"
echo " logs - 查看生產環境日誌"
echo " logs-dev - 查看開發環境日誌"
echo ""
echo "Django管理 (生產環境):"
echo " migrate - 執行資料庫遷移"
echo " makemigrations - 創建新的遷移文件"
echo " collectstatic - 收集靜態文件"
echo " createsuperuser - 創建超級用戶"
echo " test - 運行測試"
echo ""
echo "Django管理 (開發環境):"
echo " migrate-dev - 執行資料庫遷移 (開發環境)"
echo " makemigrations-dev - 創建新的遷移文件 (開發環境)"
echo " collectstatic-dev - 收集靜態文件 (開發環境)"
echo " createsuperuser-dev - 創建超級用戶 (開發環境)"
echo " test-dev - 運行測試 (開發環境)"
echo ""
echo "系統管理:"
echo " clean - 清理未使用的Docker資源"
echo " reset - 重置整個環境(危險操作)"
echo " help - 顯示此幫助信息"
}
# 檢查Docker和Docker Compose是否安裝
check_dependencies() {
if ! command -v docker &> /dev/null; then
print_error "Docker 未安裝或未在PATH中"
exit 1
fi
if [ ! -f .env ]; then
print_error ".env 文件不存在"
exit 1
fi
# 檢查新版本的 docker compose(沒有連字符)
if docker compose version &> /dev/null; then
DOCKER_COMPOSE="docker compose"
# 檢查舊版本的 docker-compose(有連字符)
elif command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE="docker-compose"
else
print_error "Docker Compose 未安裝或未在PATH中"
exit 1
fi
print_info "使用 Docker Compose: $DOCKER_COMPOSE"
}
# 啟動開發環境
start_dev() {
print_info "啟動開發環境..."
$DOCKER_COMPOSE -f docker-compose.dev.yml up -d
print_success "開發環境啟動完成!"
print_info "訪問地址: http://localhost:8001"
}
# 啟動生產環境
start_prod() {
print_info "啟動生產環境..."
$DOCKER_COMPOSE up -d
print_success "生產環境啟動完成!"
print_info "訪問地址: http://localhost:8000"
}
# 停止所有服務
stop_services() {
print_info "停止所有服務..."
$DOCKER_COMPOSE down
$DOCKER_COMPOSE -f docker-compose.dev.yml down
print_success "所有服務已停止"
}
# 重新啟動服務
restart_services() {
print_info "重新啟動服務..."
$DOCKER_COMPOSE down
$DOCKER_COMPOSE up -d
print_success "服務重新啟動完成"
}
# 構建鏡像
build_images() {
print_info "構建生產環境鏡像..."
$DOCKER_COMPOSE build
print_success "生產環境鏡像構建完成"
}
# 構建開發環境鏡像
build_dev_images() {
print_info "構建開發環境鏡像..."
$DOCKER_COMPOSE -f docker-compose.dev.yml build
print_success "開發環境鏡像構建完成"
}
# 完全重新構建
rebuild_images() {
print_info "完全重新構建生產環境鏡像(無快取)..."
$DOCKER_COMPOSE build --no-cache
print_success "生產環境鏡像重新構建完成"
}
# 完全重新構建開發環境
rebuild_dev_images() {
print_info "完全重新構建開發環境鏡像(無快取)..."
$DOCKER_COMPOSE -f docker-compose.dev.yml build --no-cache
print_success "開發環境鏡像重新構建完成"
}
# 查看日誌
show_logs() {
print_info "顯示production環境服務日誌..."
$DOCKER_COMPOSE logs -f
}
# 查看開發環境日誌
show_dev_logs() {
print_info "顯示開發環境服務日誌..."
$DOCKER_COMPOSE -f docker-compose.dev.yml logs -f
}
# 進入應用容器shell
enter_app_shell() {
print_info "進入生產環境應用容器shell..."
$DOCKER_COMPOSE exec app bash
}
# 進入開發環境應用容器shell
enter_dev_app_shell() {
print_info "進入開發環境應用容器shell..."
$DOCKER_COMPOSE -f docker-compose.dev.yml exec app-dev bash
}
# 進入資料庫shell
enter_db_shell() {
print_info "進入生產環境資料庫shell..."
$DOCKER_COMPOSE exec db psql -U postgres -d postgres
}
# 進入開發環境資料庫shell
enter_dev_db_shell() {
print_info "進入開發環境資料庫shell..."
$DOCKER_COMPOSE -f docker-compose.dev.yml exec db-dev psql -U postgres -d postgres
}
# 執行資料庫遷移
run_migrate() {
print_info "執行資料庫遷移 (生產環境)..."
$DOCKER_COMPOSE exec app uv run python manage.py migrate
print_success "資料庫遷移完成 (生產環境)"
}
# 執行開發環境資料庫遷移
run_dev_migrate() {
print_info "執行資料庫遷移 (開發環境)..."
$DOCKER_COMPOSE -f docker-compose.dev.yml exec app-dev uv run python manage.py migrate
print_success "資料庫遷移完成 (開發環境)"
}
# 創建遷移文件
make_migrations() {
print_info "創建遷移文件 (生產環境)..."
$DOCKER_COMPOSE exec app uv run python manage.py makemigrations
print_success "遷移文件創建完成 (生產環境)"
}
# 創建開發環境遷移文件
make_dev_migrations() {
print_info "創建遷移文件 (開發環境)..."
$DOCKER_COMPOSE -f docker-compose.dev.yml exec app-dev uv run python manage.py makemigrations
print_success "遷移文件創建完成 (開發環境)"
}
# 收集靜態文件
collect_static() {
print_info "收集靜態文件 (生產環境)..."
$DOCKER_COMPOSE exec app uv run python manage.py collectstatic --noinput
print_success "靜態文件收集完成 (生產環境)"
}
# 收集開發環境靜態文件
collect_dev_static() {
print_info "收集靜態文件 (開發環境)..."
$DOCKER_COMPOSE -f docker-compose.dev.yml exec app-dev uv run python manage.py collectstatic --noinput
print_success "靜態文件收集完成 (開發環境)"
}
# 創建admin用戶
create_superuser() {
print_info "創建admin用戶 (production環境)..."
$DOCKER_COMPOSE exec app uv run python manage.py createsuperuser
}
# 創建開發環境超級用戶
create_dev_superuser() {
print_info "創建admin用戶 (開發環境)..."
$DOCKER_COMPOSE -f docker-compose.dev.yml exec app-dev uv run python manage.py createsuperuser
}
# 運行測試
run_tests() {
print_info "運行測試 (production環境)..."
$DOCKER_COMPOSE exec app uv run python manage.py test
}
# 運行開發環境測試
run_dev_tests() {
print_info "運行測試 (開發環境)..."
$DOCKER_COMPOSE -f docker-compose.dev.yml exec app-dev uv run python manage.py test
}
# 重置整個環境
reset_environment() {
print_warning "這將刪除所有容器、鏡像和數據!"
read -p "確定要繼續嗎?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_info "重置環境..."
$DOCKER_COMPOSE down -v
$DOCKER_COMPOSE -f docker-compose.dev.yml down -v
print_success "環境重置完成"
else
print_info "操作已取消"
fi
}
# 查看服務狀態
show_status() {
print_info "查看服務狀態..."
echo ""
echo "=== 生產環境服務狀態 ==="
$DOCKER_COMPOSE ps
echo ""
echo "=== 開發環境服務狀態 ==="
$DOCKER_COMPOSE -f docker-compose.dev.yml ps
}
# 主要邏輯
main() {
# 檢查依賴
check_dependencies
# 檢查參數
if [ $# -eq 0 ]; then
show_help
exit 0
fi
case "$1" in
"dev")
start_dev
;;
"prod")
start_prod
;;
"stop")
stop_services
;;
"restart")
restart_services
;;
"build")
build_images
;;
"build-dev")
build_dev_images
;;
"rebuild")
rebuild_images
;;
"rebuild-dev")
rebuild_dev_images
;;
"logs")
show_logs
;;
"logs-dev")
show_dev_logs
;;
"shell")
enter_app_shell
;;
"shell-dev")
enter_dev_app_shell
;;
"db-shell")
enter_db_shell
;;
"db-shell-dev")
enter_dev_db_shell
;;
"migrate")
run_migrate
;;
"makemigrations")
make_migrations
;;
"makemigrations-dev")
make_dev_migrations
;;
"migrate-dev")
run_dev_migrate
;;
"collectstatic")
collect_static
;;
"collectstatic-dev")
collect_dev_static
;;
"createsuperuser")
create_superuser
;;
"createsuperuser-dev")
create_dev_superuser
;;
"test")
run_tests
;;
"test-dev")
run_dev_tests
;;
"reset")
reset_environment
;;
"status")
show_status
;;
"help"|"-h"|"--help")
show_help
;;
*)
print_error "未知指令: $1"
echo ""
show_help
exit 1
;;
esac
}
# 執行主函數
main "$@"