Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến ZPython công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.

Chuyển website sang chế độ bảo trì trong Laravel

Trong quá trình vận hành một website, sẽ có bạn cần bật chế độ bảo trì, tức là tất cả các đường dẫn đều thông báo website đang bảo trì. Chế độ bảo trì cần thiết cho những mục đích như cập nhật cơ sở dữ liệu hoặc có một số thay đổi trong ứng dụng, với Laravel, việc chuyển sang chế độ bảo trì là rất đơn giản.

Bật chế độ bảo trì bằng câu lệnh php artisan

Laravel hỗ trợ chuyển toàn bộ website sang chế độ bảo trì bằng câu lệnh php artisan down

c:\xampp\htdocs\spa-forum>php artisan down
Application is now in maintenance mode.

Khi đó, bạn vào bất kỳ đường dẫn nào của website cũng sẽ chỉ nhận được thông báo như dưới đây "Be right back".

Chế độ bảo trì website trong Laravel

Nếu bạn muốn thay đổi thông báo "Be right back", có thể sử dụng tham số --message, nó sẽ hiển thị message này thay thế cho thông báo trên. Tham số thứ hai là --retry giúp thêm giá trị Retry-After vào header khi response, nó giúp cho các bộ máy tìm kiếm như Google chẳng hạn biết để quay lại và crawl dữ liệu.

php artisan down --message="Upgrading Database" --retry=60

Khi muốn chuyển toàn bộ website về trạng thái hoạt động bình thường, bạn chỉ cần thực hiện câu lệnh php artisan up

c:\xampp\htdocs\spa-forum>php artisan up
Application is now live.

Giao diện maintenance mode thật nhàm chán và bạn muốn thay đổi nó như thêm vài bức ảnh mùi mẫn, hoặc vài đoạn text đầy nước mắt để độc giả quay trở lại sau vài tiếng bảo trì. Ok, việc đó hoàn toàn làm được, đơn giản là bạn chỉ cần thay đổi code trong view resources/views/errors/503.blade.php. Nếu bạn không tìm thấy thư mục errors và file 503.blade.php bạn có thể tự tạo ra. Chú ý: Khi ứng dụng web ở chế độ bảo trì, các queue job sẽ không được thực hiện cho đến khi ứng dụng hoạt động trở lại bình thường. ## Bật chế độ bảo trì khi sử dụng host dùng chung

Khi website của bạn được triển khai trên host dùng chung, khi đó bạn sẽ không có màn hình console để thực hiện các câu lệnh php artisan, vậy phải làm thế nào để chuyển sang chế độ bảo trì. Bạn có thể tìm đến thư mục storage\framework tạo một file down, khi đó toàn bộ website sẽ chuyển sang chế độ bảo trì.

Chuyển chế độ bảo trì bằng tạo file

Muốn chuyển sang chế độ bình thường, bạn chỉ cần xóa file down đi là ok. ## Bật chế độ bảo trì trong ứng dụng

Với hai cách thức ở trên, chúng ta cần có quyền quản trị máy chủ để thực hiện, trong các ứng dụng lớn, chúng ta nên có những tính năng trong ứng dụng giúp bật tắt chế độ bảo trì giúp quản trị viên website thao tác đơn giản hơn. Laravel hỗ trợ việc gọi các lệnh Artisan trong ứng dụng:

Artisan::call('down');
Artisan::call('up');

Tuy nhiên, khi chúng ta thực hiện gọi Artisan::call('down') thì tất cả các đường dẫn sẽ không thể truy cập được nữa do nó đã chuyển sang dạng response 503 maintenance mode. Chúng ta cần thay đổi một số đoạn code để chừa ra các kẽ hở cho quản trị viên thực hiện bật tắt chế độ bảo trì. Mặc định, Laravel xử lý chế độ bảo trì thông qua middleware CheckForMaintenanceMode, bạn có thể xem thiết lập trong app\Http\Kernel.php:

<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        ...
    ];

Phương thức handle() của middleware này thực hiện kiểm tra maintenance mode và bung ra HttpException 503.

public function handle($request, Closure $next)
{
    if ($this->app->isDownForMaintenance()) {
        throw new HttpException(503);
    }
    return $next($request);
}

Như vậy, nếu muốn can thiệp vào chế độ bảo trì, chúng ta chỉ cần tạo mới một Laravel Middleware và thay thế cho middleware mặc định đang được sử dụng. Thực hiện tạo mới middleware bằng lệnh php artisan make:middleware

c:\xampp\htdocs\spa-forum>php artisan make:middleware CheckForMaintenanceMode
Middleware created successfully.

Khi đó trong middleware mới tạo ra này (app\Http\Middleware\CheckForMaintenanceMode.php) chúng ta sẽ thực hiện các đoạn mã theo logic riêng, một số cách thức thường thực hiện như sau:

  1. Khi chuyển sang chế độ bảo trì, vẫn có thể vào được phần quản trị website, giả sử đường dẫn phần quản trị là http://yourdomain.com/quan-tri. Trong phần quản trị này chúng ta có thể gọi đến Artisan::call(up) để chuyển website về chế độ hoạt động bình thường.

  2. Một cách nữa cũng hay dùng là tạo ra các danh sách IP được phép hoạt động ngay cả trong chế độ bảo trì.

    Chúng ta sẽ thực hiện cả hai cách trên trong đoạn code sau, bạn có thể tùy chọn cách thức phù hợp.

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Foundation\Application;

class CheckForMaintenanceMode
{
    protected $app;
    public function __construct(Application $app)
    {
        $this->app = $app;
    }
    public function handle($request, Closure $next)
    {
        if ($this->app->isDownForMaintenance() && (!$this->isAdminRequest($request) || !$this->isAdminIpAdress($request))) {
            return response('Website đang bảo trì', 503);
        }
        return $next($request);
    }
    private function isAdminIpAdress($request)
    {
        return !in_array($request->ip(), ['14.162.167.166', '42.112.111.20']);
    }
    private function isAdminRequest($request)
    {
        return ($request->is('quan-tri/*') or $request->is('dang-nhap'));
    }
}

Tiếp theo chúng ta sẽ đăng ký middleware này thay thế cho middleware CheckForMaintenanceMode mặc định trong Kernel.php:

    protected $middleware = [
        // \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        ...
    ];

Ok, như vậy đã xong, bạn thử chuyển website sang chế độ bảo trì sau đó thực hiện truy nhập vào http://yourdomain.com/dang-nhap hoặc http://yourdomain.com/quan-tri/chuc-nang-xyz hoặc thử đưa địa chỉ IP của bạn vào danh sách IP cho phép, bạn sẽ thấy website hoạt động bình thường và tại các trang này bạn có thể gọi đến Artisan::call(up) trong ứng dụng để chuyển website về chế độ hoạt động bình thường. ## Lời kết

Với các cách thức trên, Laravel giúp bạn quản trị website một cách dễ dàng. Bạn có thể lựa chọn những cách thức phù hợp cho từng ứng dụng và tình huống thực tế. Tuy nhiên, trong thực tế cố gắng tránh chuyển website sang chế độ bảo trì trừ những trường hợp bắt buộc do nó ảnh hưởng đến người dùng cũng như nếu để trong thời gian dài sẽ ảnh hưởng đến SEO Google, Bing...


CÁC BÀI VIẾT KHÁC

FirebirD

Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.

Strategy Pattern xây dựng chiến lược trong lúc chạy

Lưu dữ liệu store Vuex trong Local Storage: Giảm tải đáng kể WebServer

1 Bình luận trong "Chuyển website sang chế độ bảo trì trong Laravel"

  1. nghi luan

    2 years ago

    Phản hồi
    Admin cho mình hỏi có cách nào tùy chỉnh điều hướng trang 404 trong laravel mà không dùng file .htaccess không vậy ?

Thêm bình luận