
7459
1 Mục Tiêu
- Khi bật Maintenance Mode, hầu hết người dùng sẽ thấy trang bảo trì, nhưng một số IP có thể được whitelist để truy cập bình thường.
- Khi tắt Maintenance Mode, toàn bộ người dùng truy cập bình thường.
- Bật/tắt Maintenance Mode thông qua file flag trên server.
- Cung cấp script để bật/tắt thủ công và hỗ trợ tích hợp CI/CD.
2 Kiến Trúc
- File Flag:
- Tạo một file đặc biệt (VD:
/var/www/metax/maintenance.flag
). - Nếu file tồn tại → Bật Maintenance Mode.
- Nếu file không tồn tại → Tắt Maintenance Mode.
- Tạo một file đặc biệt (VD:
- Nginx Config:
- Nếu maintenance.flag tồn tại → Kiểm tra IP.
- Nếu IP không trong whitelist → Trả về 503 + hiển thị trang bảo trì.
- Nếu IP trong whitelist → Truy cập bình thường.
- Trang Maintenance (
maintenance.html
):- File HTML tĩnh, có thể chứa ảnh từ S3/CDN.
- Script bật/tắt Maintenance Mode (
maintenance.sh
):./maintenance.sh 1
→ Bật maintenance (tạo file flag & reload Nginx)../maintenance.sh 0
→ Tắt maintenance (xóa flag & reload Nginx).
- CI/CD:
- Tích hợp với GitHub Actions, bật/tắt maintenance bằng input
workflow_dispatch
.
- Tích hợp với GitHub Actions, bật/tắt maintenance bằng input
3 Cách Cài Đặt
Bước 1: Tạo Trang Maintenance HTML
- Tạo file
/var/www/metax/maintenance.html
:
<!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Bảo trì hệ thống</title> <style> body { text-align: center; font-family: Arial, sans-serif; background: #f4f4f4; } .container { margin-top: 10%; } h1 { color: #ff0000; } </style> </head> <body> <div class="container"> <h1>🚧 Hệ thống đang bảo trì 🚧</h1> <p>Chúng tôi đang nâng cấp hệ thống. Vui lòng quay lại sau.</p> </div> </body> </html>
Bước 2: Cấu Hình Nginx
- Mở file cấu hình Nginx (VD:
/etc/nginx/conf.d/metax.conf
) và cập nhật:
server { listen 80; server_name myapp.com; set $maintenance 0; if (-f /var/www/metax/maintenance.flag) { set $maintenance 1; } location / { if ($maintenance = 1) { return 503; } proxy_pass http://backend_server; } error_page 503 @maintenance; location @maintenance { root /var/www/metax; index maintenance.html; } }
-
Giải thích:
- Nếu
/var/www/metax/maintenance.flag
tồn tại → Trả về mã lỗi 503. - Người dùng sẽ thấy maintenance.html thay vì truy cập backend.
- Nếu
-
Reload Nginx để áp dụng cấu hình:
Bước 3: Tạo Script Bật/Tắt Maintenance Mode
-
Tạo file
maintenance.sh
: -
Cấp quyền thực thi:
Bước 4: Kiểm Tra Hoạt Động
-
Bật Maintenance Mode:
- Tạo file flag
/var/www/metax/maintenance.flag
. - Reload Nginx → Trả về 503 Maintenance.
- Kiểm tra bằng trình duyệt (
myapp.com
→ thấy trang bảo trì).
- Tạo file flag
-
Tắt Maintenance Mode:
- Xóa file flag
/var/www/metax/maintenance.flag
. - Reload Nginx → Người dùng truy cập lại bình thường.
- Xóa file flag
4 Tích Hợp CI/CD với GitHub Actions
- Tạo workflow GitHub Actions (
.github/workflows/maintenance.yml
)
name: Maintenance Mode Toggle on: workflow_dispatch: inputs: maintenance_mode: description: 'Bật (on) hoặc tắt (off) Maintenance Mode' required: true default: 'off' jobs: maintenance: runs-on: ubuntu-latest steps: - name: SSH vào Server và thay đổi trạng thái Maintenance Mode uses: appleboy/ssh-action@v0.1.7 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | cd /var/www/metax if [ "${{ github.event.inputs.maintenance_mode }}" == "on" ]; then ./maintenance.sh 1 else ./maintenance.sh 0 fi
- Giải thích:
- Khi chạy workflow, chọn on hoặc off để bật/tắt maintenance mode.
- GitHub Actions SSH vào server, thực thi script maintenance.sh.
Bước 5: Kiểm Tra CI/CD
- Vào GitHub Actions → Chạy workflow.
- Chọn "on" để bật Maintenance Mode, kiểm tra myapp.com.
- Chọn "off" để tắt Maintenance Mode, kiểm tra lại.
5 Tổng Kết
✅ Bật/Tắt Maintenance Mode bằng file flag trên server.
✅ Cấu hình Nginx để hiển thị trang bảo trì khi bật maintenance.
✅ Dùng script thủ công (maintenance.sh
) để quản lý Maintenance Mode.
✅ Tích hợp GitHub Actions để bật/tắt tự động qua CI/CD.
Danh mục
Bài viết liên quan

AWS Region
27.09.2024
Author: | ADMIN |
---|
Bài viết này giải thích chi tiết về AWS Region, bao gồm đặc điểm, lợi ích và cách chọn Region phù hợp. Tìm hiểu về Availability Zones, tuân thủ quy định, tối ưu hóa chi phí và giảm độ trễ. Nắm vững kiến thức để triển khai ứng dụng đám mây hiệu quả.

Auto Trigger Notification to Discord/Teams/Slack
05.02.2025
Author: | ADMIN |
---|
Hướng dẫn chi tiết giám sát lỗi backend với AWS CloudWatch Logs, AWS Lambda, Discord. Phân loại lỗi, chống spam, thông báo lỗi nghiêm trọng. Cấu hình CloudWatch Logs, Lambda, S3.

CI/CD Pipeline
05.02.2025
Author: | ADMIN |
---|
Hướng dẫn chi tiết thiết lập CI/CD Pipeline tự động hóa build, test, deploy qua Bastion Host, dùng GitHub Actions/CodePipeline. Cấu hình SSH Proxy, triển khai staging & production an toàn, hiệu quả.
Bài viết khác

Blade Basics
01.08.2024
Author: | ADMIN |
---|
Khám phá Blade trong Laravel: từ if-else, loops, kế thừa layout đến include sub-views. Giúp code gọn gàng, dễ quản lý và bảo trì hơn!

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel
01.08.2024
Author: | ADMIN |
---|
Khám phá 9 mẹo Blade giúp bạn viết code Laravel sạch, tối ưu và chuyên nghiệp hơn. Từ @forelse, @auth, @guest, đến format ngày, tối ưu SEO – tất cả trong một bài viết súc tích, dễ áp dụng!

Hiển thị giá trị trong Blade
01.08.2024
Author: | ADMIN |
---|
Hướng dẫn hiển thị biến trong Laravel Blade: escape HTML tự động, hiển thị dữ liệu thô, giá trị mặc định và cách truy xuất mảng, đối tượng. Giúp bạn tối ưu hiển thị dữ liệu một cách an toàn!