Laravel Sail và Docker: Môi Trường Dev Không Cần Cấu Hình

· 3 min read

Thiết lập PHP, Nginx, MySQL, Redis, và Mailpit trên máy local có thể rất tẻ nhạt. Docker giải quyết vấn đề này, và Laravel Sail làm cho Docker trở nên liền mạch với các lập trình viên Laravel.

Sail Là Gì?

Sail là một giao diện command-line nhẹ để tương tác với môi trường phát triển Docker mặc định của Laravel. Nó cung cấp một file docker-compose.yml và một script helper sail.

Cài Đặt

Nếu bạn đang tạo dự án mới:

curl -s "https://laravel.build/example-app" | bash

Với các dự án đã có:

composer require laravel/sail --dev
php artisan sail:install

Lệnh này sẽ hỏi bạn cần những services nào (MySQL, Redis, v.v.) và tạo file docker-compose.yml.

Sử Dụng Cơ Bản

Khởi động môi trường:

./vendor/bin/sail up

Hoặc chạy trong nền (detached mode):

./vendor/bin/sail up -d

Dừng môi trường:

./vendor/bin/sail stop

Chạy Các Lệnh

Thay vì chạy php, composer, hoặc npm trên máy local, hãy chạy chúng qua Sail (bên trong container):

# Artisan
./vendor/bin/sail artisan migrate

# Composer
./vendor/bin/sail composer require some/package

# NPM
./vendor/bin/sail npm install
./vendor/bin/sail npm run dev

Cấu Hình Alias

./vendor/bin/sail rất phiền. Thêm alias này vào shell profile (~/.zshrc hoặc ~/.bashrc):

alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

Bây giờ bạn chỉ cần gõ:

sail up
sail artisan migrate

Tùy Chỉnh

File nền tảng chỉ là một docker-compose.yml tiêu chuẩn. Bạn có thể mở nó và sửa đổi versions, thêm services (như MinIO hoặc Meilisearch), hoặc thay đổi ports.

Nếu bạn cần tùy chỉnh nhiều hơn (ví dụ: PHP extensions tùy chỉnh), bạn có thể publish các Dockerfiles:

sail artisan sail:publish

Điều này đặt các Dockerfiles vào ./docker nơi bạn có thể chỉnh sửa tự do.

Ưu Điểm

  1. Nhất Quán: Mọi người trong team chạy cùng một phiên bản PHP/Database.
  2. Cô Lập: Các dependencies chi tiết của dự án không làm lộn xộn OS chính của bạn.
  3. Nhanh Chóng: Khởi động một full stack trong vài giây.

Sail là tiêu chuẩn cho phát triển local Laravel hiện đại.

Bình luận