Laravel: Sail

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

 

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.ymltệp và sailtập lệnh được lưu trữ tại thư mục gốc của dự án của bạn. Tập saillệ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.ymltệ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:installlệnh Artisan. Lệnh này sẽ xuất bản docker-compose.ymltệ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/sailtậ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.ymlxá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 servicescấu hình docker-compose.ymltệp của bạn . Vùng laravel.testchứ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.ymltệp ứng dụng của bạn, bạn nên thực hiện uplệ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 downlệ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 phplệ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 composerlệ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 artisanlệ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 nodelệnh trong khi các lệnh NPM có thể được thực hiện bằng npmlệ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.ymltệ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_DATABASEbiế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_HOSTbiến môi trường trong .envtệ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 localhostcổng 3306.

 

Redis

Tệp ứng dụng của bạn docker-compose.ymlcũ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_HOSTbiến môi trường trong .envtệ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 localhostcổng 6379.

 

MeiliSearch

Nếu bạn chọn cài đặt dịch vụ MeiliSearch khi cài đặt Sail, docker-compose.ymltệ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_HOSTbiế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:7700trong 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 s3trì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.ymltệp ứng dụng của bạn .

Theo mặc định, filesystemstệ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 testlệ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 testlệnh:

sail test

sail test --group orders

Lệnh Sail testtương đương với chạy testlệ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.ymltệ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.testdịch vụ trong docker-compose.ymltệp ứng dụng của bạn có depends_onmụ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 dusklệnh:

sail dusk

 

Xem trước email

Tệp mặc định của Laravel Sail docker-compose.ymlchứ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 mailhogsẽ 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 shelllệ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 tinkerlệ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.testchứa trong docker-compose.ymltệ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 imagetê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.ymltệp ứng dụng của bạn :

image: sail-8.0/app

Sau khi cập nhật docker-compose.ymltệ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 sharelệnh. Sau khi thực hiện lệnh này, bạn sẽ được cấp một laravel-sail.siteURL 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 sharelệnh, bạn nên định cấu hình các proxy đáng tin cậy của ứng dụng trong TrustProxiesphần mềm trung gian. Nếu không, các trình trợ giúp tạo URL chẳng hạn như urlvà routesẽ 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 subdomaintùy chọn khi thực hiện sharelệnh:

sail share --subdomain=my-sail-site

 

Các sharelệnh được cung cấp bởi Expose , một dịch vụ đường hầm mã nguồn mở bởi BeyondCode .

 

 

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 .envtệ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_CONFIGbiế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_CONFIGbiến trong .envtệ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 debuglệ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:publishlệ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 dockerthư 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 buildlệnh:

sail build --no-cache
» Tiếp: Cách khắc phục lỗi: SQLSTATE[HY000] [1045] Access denied...
« Trước: Sanctum
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!