+3

Laravel Configuration

Application Overview

  • Xem thông tin config của ứng dụng:
php artisan about

image.png

  • Xem only config:
php artisan about --only=environment

image.png

Environment Variable Types

image.png

Nếu cần định nghĩa biến môi trường có giá trị chưa khoảng trắng, có thể dùng dấu "": VD:

APP_NAME="My Application"

Retrieving Environment Configuration

'debug' => env('APP_DEBUG', false)

Determining The Current Environment

  • Môi trường hiện tại của ứng dụng được xác định thông qua giá trị biến môi trường APP_ENV
  • Bạn có thể truy cập giá trị biến môi trường thông qua hàm environment() của App facade:
use Illuminate\Support\Facades\App;
 
$environment = App::environment();
  • Check môi trường hiện tại:
if (App::environment('local')) {
    // The environment is local
}
 
if (App::environment(['local', 'staging'])) {
    // The environment is either local OR staging...
}

Encrypting Environment Files

Encryption

  • Để mã hóa file .env có thể dùng command: env:encrypt
  • Chạy lệnh env:encrypt sẽ mã hóa tệp .env của bạn và đặt nội dung được mã hóa vào tệp .env.encrypted
php artisan env:encrypt
  • Khóa giải mã được hiển thị ở đầu ra của lệnh và phải được lưu trữ trong trình quản lý mật khẩu an toàn
  • Mặc định thì Laravel sẽ sử dụng kiểu mã hóa AES-256-CBC yêu cầu khóa 32 ký tự. image.png
  • Bạn có thể tự đặt key khi thêm option --key hoặc có thể thay đổi kiểu mã hóa khi thêm option --cipher (Kiểu mã hóa phải được Laravel hỗ trợ: AES-256 and AES-128)
php artisan env:encrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBC

image.png

** Nếu ứng dụng của bạn có nhiều tệp môi trường, chẳng hạn như .env và .env.staging, bạn có thể chỉ định tệp môi trường cần được giải mã bằng cách cung cấp tên môi trường thông qua tùy chọn --env

php artisan env:encrypt --env=staging

image.png

  • Nếu đã tồn tại file mã hóa .encrypted bạn có thể ghi đè file mã hóa bằng option --force image.png

Decryption

  • Để giải mã file .env.encrypted có thể dùng command: env:decrypt kèm theo key --key
  • Chạy lệnh env:decrypt sẽ giải mã tệp .env.encrypted của bạn trở về tệp .env
php artisan env:decrypt --key=base64:tNj21hFpMCZBdDfRdsxOTG/jEJo13vBHIUyKBo69Rgk=

image.png

  • Nếu ứng dụng của bạn có nhiều tệp môi trường, chẳng hạn như .env và .env.staging, bạn có thể chỉ định tệp môi trường cần được giải mã bằng cách cung cấp tên môi trường thông qua tùy chọn `--env``
php artisan env:decrypt --env=staging
  • Để ghi đè lên tệp môi trường hiện có, bạn có thể cung cấp tùy chọn --force cho lệnh env:decrypt:
php artisan env:decrypt --force

image.png

Accessing Configuration Values

  • Lấy giá trị configuration:
$value = config('app.timezone');
 
// Retrieve a default value if the configuration value does not exist...
$value = config('app.timezone', 'Asia/Seoul');
  • Set configuration value:
config(['app.timezone' => 'America/Chicago']);

Configuration Caching

  • Để tăng tốc độ cho ứng dụng của bạn, bạn nên lưu trữ tất cả các tệp cấu hình của mình vào một tệp duy nhất bằng cách sử dụng lệnh config:cache
  • Khi sử dụng lệnh config:cache thì tất cả các file trong thư mục config sẽ được tổng hợp thành 1 file duy nhất được sinh ra trong thư mục \boostrap\cache\config.php
  • Khi chạy lệnh config:cache thì tất cả các giá trị trả về của hàm env() đều là Null nên chú ý tất cả các hàm env() chỉ sử dụng trong các tệp cấu hình
php artisan config:cache
  • Clear cache config
  • Tệp cấu hình \boostrap\cache\config.php sẽ bị xóa
php artisan config:clear

Debug Mode

  • Debug mode được cấu hình trong file config/app.php
  • Mặc định giá trị debug mode này lấy giá trị từ biến APP_DEBUG trong file .env (true or false)
  • Trong môi trường phát triển bạn nên đặt giá trị là true, còn trên môi trường sản xuất thì luôn luôn để là false vì nếu đặt là true thì sẽ có rủi ro bị lộ thông tin nhạy cảm
'debug' => (bool) env('APP_DEBUG', false),

Maintenance Mode

  • Khi ứng dụng ở trạng thái maintenance mode thì mọi request sẽ return 1 view thông báo mã lỗi 503
  • Bạn có thể custom view trả về tại template resources/views/errors/503.blade.php
php artisan down
  • Refersh trình duyệt sau số giây chỉ định
php artisan down --refresh=15
  • Bạn cũng có thể cung cấp tùy chọn thử lại cho lệnh down, tùy chọn này sẽ được đặt làm giá trị của tiêu đề HTTP Thử lại sau, mặc dù các trình duyệt thường bỏ qua tiêu đề này:
php artisan down --retry=60

Bypassing Maintenance Mode (Bỏ qua chế độ bảo trì bằng mã bí mật)

  • Để cho phép bỏ qua chế độ bảo trì bằng mã thông báo bí mật, bạn có thể sử dụng tùy chọn bí mật để chỉ định mã thông báo bỏ qua chế độ bảo trì:
  • Mã bí mật không có quy định về độ dài
  • Mã bí mật của bạn thường phải bao gồm các ký tự chữ và số và dấu gạch ngang (tùy chọn). Bạn nên tránh sử dụng các ký tự có ý nghĩa đặc biệt trong URL như ? hoặc &.
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
  • Sau khi đặt ứng dụng ở chế độ bảo trì, bạn có thể điều hướng đến URL ứng dụng khớp với mã thông báo này và Laravel sẽ cấp cookie bỏ qua chế độ bảo trì cho trình duyệt của bạn:
https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515
  • Khi truy cập vào tuyến đường ẩn này, bạn sẽ được chuyển hướng đến tuyến đường / của ứng dụng. Khi cookie đã được cấp cho trình duyệt của bạn, bạn sẽ có thể duyệt ứng dụng bình thường như thể nó không ở chế độ bảo trì. image.png

Redirecting Maintenance Mode Requests

  • Chuyển hướng tất cả các request về 1 url cụ thể:
php artisan down --redirect=/
  • Có thể chuyển hướng đến 1 tên miền khác
php artisan down --redirect=https://viblo.asia/

Disabling Maintenance Mode

php artisan up

Maintenance Mode & Queues

  • Khi ứng dụng của bạn đang ở chế độ bảo trì, sẽ không có queued jobs nào được xử lý. Các công việc sẽ tiếp tục được xử lý như bình thường khi ứng dụng thoát khỏi chế độ bảo trì

Alternatives To Maintenance Mode

  • Chế độ bảo trì yêu cầu ứng dụng của bạn phải ngừng hoạt động trong vài giây
  • Có thể xem xét thay thế tùy tình huống để sử dụng Laravel Vapor and Envoyer để thực hiện việc triển khai không có thời gian chết với Laravel.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.