Laravel: Sail
Giải phóng thời gian, khai phóng năng lực
- Giới thiệu
- Cài đặt & Thiết lập
- Bắt đầu & Dừng Sail
- Thực thi lệnh
- Tương tác với cơ sở dữ liệu
- Lưu trữ tập tin
- Chạy thử nghiệm
- Xem trước email
- CLI vùng chứa
- Phiên bản PHP
- Chia sẻ trang web của bạn
- Gỡ lỗi với Xdebug
- Tùy biến
Giới thiệu
Laravel Sail là một giao diện dòng lệnh nhẹ để tương tác với môi trường phát triển Docker mặc định của Laravel. Sail cung cấp một điểm khởi đầu tuyệt vời để xây dựng ứng dụng Laravel bằng PHP, MySQL và Redis mà không yêu cầu kinh nghiệm Docker trước đó.
Về cơ bản, Sail là docker-compose.yml
tệp và sail
tập lệnh được lưu trữ tại thư mục gốc của dự án của bạn. Tập sail
lệnh cung cấp một CLI với các phương thức thuận tiện để tương tác với các vùng chứa Docker được định nghĩa bởi docker-compose.yml
tệp.
Laravel Sail được hỗ trợ trên macOS, Linux và Windows (thông qua WSL2).
Cài đặt & Thiết lập
Laravel Sail được cài đặt tự động với tất cả các ứng dụng Laravel mới nên bạn có thể bắt đầu sử dụng nó ngay lập tức. Để tìm hiểu cách tạo một ứng dụng Laravel mới, vui lòng tham khảo tài liệu cài đặt của Laravel cho hệ điều hành của bạn. Trong khi cài đặt, bạn sẽ được yêu cầu chọn các dịch vụ hỗ trợ Sail mà ứng dụng của bạn sẽ tương tác.
Cài đặt Sail vào các ứng dụng hiện có
Nếu bạn quan tâm đến việc sử dụng Sail với ứng dụng Laravel hiện có, bạn có thể chỉ cần cài đặt Sail bằng trình quản lý gói Composer. Tất nhiên, các bước này giả định rằng môi trường phát triển cục bộ hiện tại của bạn cho phép bạn cài đặt các phần phụ thuộc của Composer:
composer require laravel/sail --dev
Sau khi đã cài đặt Sail, bạn có thể chạy sail:install
lệnh Artisan. Lệnh này sẽ xuất bản docker-compose.yml
tệp của Sail vào thư mục gốc của ứng dụng của bạn:
php artisan sail:install
Cuối cùng, bạn có thể bắt đầu Sail. Để tiếp tục tìm hiểu cách sử dụng Sail, vui lòng tiếp tục đọc phần còn lại của tài liệu này:
./vendor/bin/sail up
Định cấu hình bí danh Bash
Theo mặc định, các lệnh Sail được gọi bằng cách sử dụng vendor/bin/sail
tập lệnh được bao gồm trong tất cả các ứng dụng Laravel mới:
./vendor/bin/sail up
Tuy nhiên, thay vì gõ liên tục vendor/bin/sail
để thực hiện các lệnh Sail, bạn có thể muốn định cấu hình bí danh Bash cho phép bạn thực hiện các lệnh của Sail dễ dàng hơn:
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
Khi bí danh Bash đã được định cấu hình, bạn có thể thực hiện các lệnh Sail bằng cách chỉ cần gõ sail
. Phần còn lại của các ví dụ trong tài liệu này sẽ giả định rằng bạn đã định cấu hình bí danh này:
sail up
Bắt đầu & Dừng Sail
Tệp của Laravel Sail docker-compose.yml
xác định nhiều loại vùng chứa Docker hoạt động cùng nhau để giúp bạn xây dựng các ứng dụng Laravel. Mỗi vùng chứa này là một mục nhập trong services
cấu hình docker-compose.yml
tệp của bạn . Vùng laravel.test
chứa là vùng chứa ứng dụng chính sẽ phục vụ ứng dụng của bạn.
Trước khi bắt đầu Sail, bạn nên đảm bảo rằng không có máy chủ web hoặc cơ sở dữ liệu nào khác đang chạy trên máy tính cục bộ của bạn. Để bắt đầu tất cả các vùng chứa Docker được xác định trong docker-compose.yml
tệp ứng dụng của bạn, bạn nên thực hiện up
lệnh:
sail up
Để khởi động tất cả các vùng chứa Docker trong nền, bạn có thể bắt đầu Sail ở chế độ "tách rời":
sail up -d
Khi vùng chứa của ứng dụng đã được khởi động, bạn có thể truy cập dự án trong trình duyệt web của mình tại: http: // localhost .
Để dừng tất cả các vùng chứa, bạn có thể chỉ cần nhấn Control + C để dừng hoạt động của vùng chứa. Hoặc, nếu các vùng chứa đang chạy trong nền, bạn có thể sử dụng down
lệnh:
sail down
Thực thi lệnh
Khi sử dụng Laravel Sail, ứng dụng của bạn đang thực thi bên trong vùng chứa Docker và được cách ly khỏi máy tính cục bộ của bạn. Tuy nhiên, Sail cung cấp một cách thuận tiện để chạy các lệnh khác nhau chống lại ứng dụng của bạn như lệnh PHP tùy ý, lệnh Artisan, lệnh Composer và lệnh Node / NPM.
Khi đọc tài liệu Laravel, bạn sẽ thường thấy các tham chiếu đến các lệnh Composer, Artisan và Node / NPM không tham chiếu đến Sail. Những ví dụ đó giả định rằng những công cụ này được cài đặt trên máy tính cục bộ của bạn. Nếu bạn đang sử dụng Sail cho môi trường phát triển Laravel cục bộ của mình, bạn nên thực hiện các lệnh đó bằng Sail:
# Running Artisan commands locally...
php artisan queue:work
# Running Artisan commands within Laravel Sail...
sail artisan queue:work
Thực thi các lệnh PHP
Các lệnh PHP có thể được thực thi bằng cách sử dụng php
lệnh. Tất nhiên, các lệnh này sẽ thực thi bằng cách sử dụng phiên bản PHP được cấu hình cho ứng dụng của bạn. Để tìm hiểu thêm về các phiên bản PHP có sẵn cho Laravel Sail, hãy tham khảo tài liệu về phiên bản PHP :
sail php --version
sail php script.php
Thực thi các lệnh của trình soạn thảo
Các lệnh của trình soạn nhạc có thể được thực hiện bằng cách sử dụng composer
lệnh. Vùng chứa ứng dụng của Laravel Sail bao gồm cài đặt Composer 2.x:
sail composer require laravel/sanctum
Cài đặt phụ thuộc của trình soạn nhạc cho các ứng dụng hiện có
Nếu bạn đang phát triển ứng dụng với một nhóm, bạn có thể không phải là người ban đầu tạo ứng dụng Laravel. Do đó, không có phần phụ thuộc Trình soạn thảo nào của ứng dụng, bao gồm cả Sail, sẽ được cài đặt sau khi bạn sao chép kho lưu trữ của ứng dụng vào máy tính cục bộ của mình.
Bạn có thể cài đặt các phần phụ thuộc của ứng dụng bằng cách điều hướng đến thư mục của ứng dụng và thực hiện lệnh sau. Lệnh này sử dụng một vùng chứa Docker nhỏ chứa PHP và Composer để cài đặt các phần phụ thuộc của ứng dụng:
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/opt \
-w /opt \
laravelsail/php80-composer:latest \
composer install --ignore-platform-reqs
Thực hiện các lệnh của nghệ nhân
Các lệnh của Laravel Artisan có thể được thực hiện bằng artisan
lệnh:
sail artisan queue:work
Thực thi lệnh Node / NPM
Các lệnh nút có thể được thực hiện bằng cách sử dụng node
lệnh trong khi các lệnh NPM có thể được thực hiện bằng npm
lệnh:
sail node --version
sail npm run prod
Tương tác với cơ sở dữ liệu
MySQL
Như bạn có thể đã nhận thấy, docker-compose.yml
tệp ứng dụng của bạn chứa một mục nhập cho vùng chứa MySQL. Vùng chứa này sử dụng một ổ đĩa Docker để dữ liệu được lưu trữ trong cơ sở dữ liệu của bạn được duy trì ngay cả khi dừng và khởi động lại vùng chứa của bạn. Ngoài ra, khi vùng chứa MySQL đang khởi động, nó sẽ đảm bảo tồn tại một cơ sở dữ liệu có tên khớp với giá trị của DB_DATABASE
biến môi trường của bạn .
Khi bạn đã khởi động vùng chứa của mình, bạn có thể kết nối với phiên bản MySQL trong ứng dụng của mình bằng cách đặt DB_HOST
biến môi trường trong .env
tệp ứng dụng của bạn thành mysql
.
Để kết nối với cơ sở dữ liệu MySQL của ứng dụng từ máy cục bộ, bạn có thể sử dụng ứng dụng quản lý cơ sở dữ liệu đồ họa như TablePlus . Theo mặc định, cơ sở dữ liệu MySQL có thể truy cập tại localhost
cổng 3306.
Redis
Tệp ứng dụng của bạn docker-compose.yml
cũng chứa một mục nhập cho vùng chứa Redis . Vùng chứa này sử dụng khối lượng Docker để dữ liệu được lưu trữ trong dữ liệu Redis của bạn được duy trì ngay cả khi dừng và khởi động lại vùng chứa của bạn. Khi bạn đã khởi động vùng chứa của mình, bạn có thể kết nối với phiên bản Redis trong ứng dụng của mình bằng cách đặt REDIS_HOST
biến môi trường trong .env
tệp ứng dụng của bạn thành redis
.
Để kết nối với cơ sở dữ liệu Redis của ứng dụng từ máy cục bộ, bạn có thể sử dụng ứng dụng quản lý cơ sở dữ liệu đồ họa như TablePlus . Theo mặc định, cơ sở dữ liệu Redis có thể truy cập tại localhost
cổng 6379.
MeiliSearch
Nếu bạn chọn cài đặt dịch vụ MeiliSearch khi cài đặt Sail, docker-compose.yml
tệp ứng dụng của bạn sẽ chứa một mục nhập cho công cụ tìm kiếm mạnh mẽ này tương thích với Laravel Scout . Khi bạn đã khởi động vùng chứa của mình, bạn có thể kết nối với phiên bản MeiliSearch trong ứng dụng của mình bằng cách đặt MEILISEARCH_HOST
biến môi trường của bạn thành http://meilisearch:7700
.
Từ máy cục bộ của mình, bạn có thể truy cập bảng quản trị dựa trên web của MeiliSearch bằng cách điều hướng đến http://localhost:7700
trong trình duyệt web của bạn.
Lưu trữ tập tin
Nếu bạn định sử dụng Amazon S3 để lưu trữ tệp trong khi chạy ứng dụng của mình trong môi trường sản xuất, bạn có thể muốn cài đặt dịch vụ MinIO khi cài đặt Sail. MinIO cung cấp một API tương thích S3 mà bạn có thể sử dụng để phát triển cục bộ bằng cách sử dụng s3
trình điều khiển lưu trữ tệp của Laravel mà không cần tạo nhóm lưu trữ "thử nghiệm" trong môi trường S3 sản xuất của bạn. Nếu bạn chọn cài đặt MinIO trong khi cài đặt Sail, phần cấu hình MinIO sẽ được thêm vào docker-compose.yml
tệp ứng dụng của bạn .
Theo mặc định, filesystems
tệp cấu hình ứng dụng của bạn đã chứa cấu hình đĩa cho s3
đĩa. Ngoài việc sử dụng đĩa này để tương tác với Amazon S3, bạn có thể sử dụng đĩa này để tương tác với bất kỳ dịch vụ lưu trữ tệp tương thích nào của S3, chẳng hạn như MinIO bằng cách chỉ cần sửa đổi các biến môi trường liên quan kiểm soát cấu hình của nó. Ví dụ: khi sử dụng MinIO, cấu hình biến môi trường hệ thống tệp của bạn phải được xác định như sau:
FILESYSTEM_DRIVER=s3
AWS_ACCESS_KEY_ID=sail
AWS_SECRET_ACCESS_KEY=password
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=local
AWS_ENDPOINT=http://minio:9000
AWS_USE_PATH_STYLE_ENDPOINT=true
Chạy thử nghiệm
Laravel cung cấp hỗ trợ kiểm tra đáng kinh ngạc ngay lập tức và bạn có thể sử dụng test
lệnh của Sail để chạy các kiểm tra tính năng và đơn vị ứng dụng của bạn . Bất kỳ tùy chọn CLI nào được PHPUnit chấp nhận cũng có thể được chuyển đến test
lệnh:
sail test
sail test --group orders
Lệnh Sail test
tương đương với chạy test
lệnh Artisan:
sail artisan test
Laravel Dusk
Laravel Dusk cung cấp một API kiểm tra và tự động hóa trình duyệt nhanh chóng, dễ sử dụng. Nhờ Sail, bạn có thể chạy các thử nghiệm này mà không cần cài đặt Selenium hoặc các công cụ khác trên máy tính cục bộ của mình. Để bắt đầu, hãy bỏ ghi chú dịch vụ Selenium trong docker-compose.yml
tệp ứng dụng của bạn :
selenium:
image: 'selenium/standalone-chrome'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
Tiếp theo, đảm bảo rằng laravel.test
dịch vụ trong docker-compose.yml
tệp ứng dụng của bạn có depends_on
mục nhập cho selenium
:
depends_on:
- mysql
- redis
- selenium
Cuối cùng, bạn có thể chạy bộ thử nghiệm Dusk của mình bằng cách khởi động Sail và chạy dusk
lệnh:
sail dusk
Xem trước email
Tệp mặc định của Laravel Sail docker-compose.yml
chứa một mục nhập dịch vụ cho MailHog . MailHog chặn các email do ứng dụng của bạn gửi trong quá trình phát triển cục bộ và cung cấp giao diện web thuận tiện để bạn có thể xem trước các email trong trình duyệt của mình. Khi sử dụng Sail, máy chủ mặc định của MailHog mailhog
sẽ có sẵn qua cổng 1025:
MAIL_HOST=mailhog
MAIL_PORT=1025
Khi Sail đang chạy, bạn có thể truy cập giao diện web MailHog tại: http: // localhost: 8025
CLI vùng chứa
Đôi khi bạn có thể muốn bắt đầu phiên Bash trong vùng chứa ứng dụng của mình. Bạn có thể sử dụng shell
lệnh để kết nối với vùng chứa của ứng dụng, cho phép bạn kiểm tra các tệp và dịch vụ đã cài đặt của nó cũng như thực thi các lệnh shell tùy ý trong vùng chứa:
sail shell
sail root-shell
Để bắt đầu một phiên Laravel Tinker mới , bạn có thể thực hiện tinker
lệnh:
sail tinker
Phiên bản PHP
Sail hiện hỗ trợ cung cấp ứng dụng của bạn thông qua PHP 8.0 hoặc PHP 7.4. Để thay đổi phiên bản PHP được sử dụng để cung cấp ứng dụng của bạn, bạn nên cập nhật build
định nghĩa của vùng laravel.test
chứa trong docker-compose.yml
tệp ứng dụng của bạn :
# PHP 8.0
context: ./vendor/laravel/sail/runtimes/8.0
# PHP 7.4
context: ./vendor/laravel/sail/runtimes/7.4
Ngoài ra, bạn có thể muốn cập nhật image
tên của mình để phản ánh phiên bản PHP đang được ứng dụng của bạn sử dụng. Tùy chọn này cũng được xác định trong docker-compose.yml
tệp ứng dụng của bạn :
image: sail-8.0/app
Sau khi cập nhật docker-compose.yml
tệp ứng dụng của bạn, bạn nên xây dựng lại hình ảnh vùng chứa của mình:
sail build --no-cache
sail up
Chia sẻ trang web của bạn
Đôi khi, bạn có thể cần chia sẻ công khai trang web của mình để xem trước trang web của bạn cho đồng nghiệp hoặc để kiểm tra tích hợp webhook với ứng dụng của bạn. Để chia sẻ trang web của bạn, bạn có thể sử dụng share
lệnh. Sau khi thực hiện lệnh này, bạn sẽ được cấp một laravel-sail.site
URL ngẫu nhiên mà bạn có thể sử dụng để truy cập ứng dụng của mình:
sail share
Khi chia sẻ trang web của bạn thông qua share
lệnh, bạn nên định cấu hình các proxy đáng tin cậy của ứng dụng trong TrustProxies
phần mềm trung gian. Nếu không, các trình trợ giúp tạo URL chẳng hạn như url
và route
sẽ không thể xác định máy chủ HTTP chính xác sẽ được sử dụng trong quá trình tạo URL:
/**
* The trusted proxies for this application.
*
* @var array|string|null
*/
protected $proxies = '*';
Nếu bạn muốn chọn miền phụ cho trang web được chia sẻ của mình, bạn có thể cung cấp subdomain
tùy chọn khi thực hiện share
lệnh:
sail share --subdomain=my-sail-site
Gỡ lỗi với Xdebug
Cấu hình Docker của Laravel Sail bao gồm hỗ trợ Xdebug , một trình gỡ lỗi phổ biến và mạnh mẽ cho PHP. Để kích hoạt Xdebug, bạn sẽ cần thêm một vài biến vào .env
tệp ứng dụng của mình để định cấu hình Xdebug . Để kích hoạt Xdebug, bạn phải đặt (các) chế độ thích hợp trước khi bắt đầu Sail:
SAIL_XDEBUG_MODE=develop,debug
Cấu hình IP máy chủ Linux
Bên trong, XDEBUG_CONFIG
biến môi trường được định nghĩa client_host=host.docker.internal
để Xdebug sẽ được định cấu hình đúng cho Mac và Windows (WSL2). Nếu máy cục bộ của bạn đang chạy Linux, bạn sẽ cần phải xác định biến môi trường này theo cách thủ công.
Trước tiên, bạn nên xác định địa chỉ IP máy chủ chính xác để thêm vào biến môi trường bằng cách chạy lệnh sau. Thông thường, <container-name>
phải là tên của vùng chứa phục vụ ứng dụng của bạn và thường kết thúc bằng _laravel.test_1
:
docker inspect -f {{range.NetworkSettings.Networks}}{{.Gateway}}{{end}} <container-name>
Khi bạn đã có được địa chỉ IP máy chủ chính xác, bạn nên xác định SAIL_XDEBUG_CONFIG
biến trong .env
tệp ứng dụng của mình :
SAIL_XDEBUG_CONFIG="client_host=<host-ip-address>"
Cách sử dụng Xdebug CLI
Một sail debug
lệnh có thể được sử dụng để bắt đầu phiên gỡ lỗi khi chạy lệnh Artisan:
# Run an Artisan command without Xdebug...
sail artisan migrate
# Run an Artisan command with Xdebug...
sail debug migrate
Sử dụng trình duyệt Xdebug
Để gỡ lỗi ứng dụng của bạn trong khi tương tác với ứng dụng qua trình duyệt web, hãy làm theo hướng dẫn do Xdebug cung cấp để bắt đầu phiên Xdebug từ trình duyệt web.
Nếu bạn đang sử dụng PhpStorm, vui lòng xem lại tài liệu của JetBrain về gỡ lỗi cấu hình 0 .
Tùy biến
Vì Sail chỉ là Docker, bạn có thể tự do tùy chỉnh gần như mọi thứ về nó. Để xuất bản Dockerfiles của riêng Sail, bạn có thể thực hiện sail:publish
lệnh:
sail artisan sail:publish
Sau khi chạy lệnh này, Dockerfiles và các tệp cấu hình khác được Laravel Sail sử dụng sẽ được đặt trong một docker
thư mục trong thư mục gốc của ứng dụng của bạn. Sau khi tùy chỉnh cài đặt Sail, bạn có thể xây dựng lại vùng chứa của ứng dụng bằng build
lệnh:
sail build --no-cache
Giải phóng thời gian, khai phóng năng lực