Skip to content

Laravel Sail

소개

Laravel Sail은 Laravel의 기본 Docker 개발 환경과 상호 작용하기 위한 경량의 명령줄 인터페이스입니다. Sail은 사전 Docker 경험 없이 PHP, MySQL 및 Redis를 사용하여 Laravel 애플리케이션을 구축하기 위한 훌륭한 시작점을 제공합니다.

핵심적으로 Sail은 프로젝트 루트에 저장된 docker-compose.yml 파일과 sail 스크립트입니다. sail 스크립트는 docker-compose.yml 파일에 정의된 Docker 컨테이너와 상호 작용하기 위한 편리한 메서드를 제공하는 CLI를 제공합니다.

Laravel Sail은 macOS, Linux 및 Windows ( WSL2 를 통해)에서 지원됩니다.

설치 및 설정

Laravel Sail은 모든 새로운 Laravel 애플리케이션에 자동으로 설치되므로 즉시 사용할 수 있습니다. 새 Laravel 애플리케이션을 만드는 방법을 배우려면 운영 체제에 대한 Laravel의 설치 설명서를 참조하십시오. 설치 중에 애플리케이션이 상호 작용할 Sail 지원 서비스를 선택하라는 메시지가 표시됩니다.

기존 애플리케이션에 Sail 설치

기존 Laravel 애플리케이션에서 Sail을 사용하는 데 관심이 있다면 Composer 패키지 관리자를 사용하여 Sail을 간단히 설치할 수 있습니다. 물론 이러한 단계는 기존 로컬 개발 환경에서 Composer 종속성을 설치할 수 있다고 가정합니다.

composer require laravel/sail --dev

Sail이 설치된 후에는 sail:install Artisan 명령어를 실행할 수 있습니다. 이 명령어는 Sail의 docker-compose.yml 파일을 애플리케이션의 루트에 게시하고 Docker 서비스에 연결하기 위해 필요한 환경 변수로 .env 파일을 수정합니다:

php artisan sail:install

마지막으로, Sail을 시작할 수 있습니다. Sail 사용법에 대해 계속 학습하려면 이 문서의 나머지 부분을 계속 읽어보세요:

./vendor/bin/sail up
exclamation

Linux용 Docker Desktop을 사용하는 경우, 다음 명령어를 실행하여 default Docker 컨텍스트를 사용해야 합니다: docker context use default.

추가 서비스 추가

기존 Sail 설치에 추가 서비스를 추가하고 싶다면, sail:add Artisan 명령어를 실행하면 됩니다:

php artisan sail:add

Devcontainer 사용

Devcontainer 내에서 개발하고 싶다면, sail:install 명령어에 --devcontainer 옵션을 제공하면 됩니다. --devcontainer 옵션은 sail:install 명령어가 기본 .devcontainer/devcontainer.json 파일을 애플리케이션 루트에 게시하도록 지시합니다:

php artisan sail:install --devcontainer

Sail 이미지 재구축

때로는 이미지의 모든 패키지와 소프트웨어가 최신 상태인지 확인하기 위해 Sail 이미지를 완전히 재구축해야 할 수 있습니다. build 명령어를 사용하여 이를 수행할 수 있습니다:

docker compose down -v
 
sail build --no-cache
 
sail up

쉘 별칭 구성

기본적으로 Sail 명령어는 모든 새로운 Laravel 애플리케이션에 포함된 vendor/bin/sail 스크립트를 사용하여 호출됩니다:

./vendor/bin/sail up

그러나 Sail 명령을 실행하기 위해 vendor/bin/sail을 반복해서 입력하는 대신, Sail 명령을 더 쉽게 실행할 수 있도록 셸 별칭을 설정하는 것이 좋을 수 있습니다:

alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'

이 별칭이 항상 사용 가능하도록 하려면 ~/.zshrc 또는 ~/.bashrc와 같은 홈 디렉토리의 셸 구성 파일에 추가한 다음 셸을 다시 시작하십시오.

셸 별칭이 구성되면 간단히 sail을 입력하여 Sail 명령을 실행할 수 있습니다. 이 문서의 나머지 예제에서는 이 별칭을 구성했다고 가정합니다:

sail up

Sail 시작 및 중지

Laravel Sail의 docker-compose.yml 파일은 Laravel 애플리케이션을 빌드하는 데 도움이 되는 다양한 Docker 컨테이너를 정의합니다. 이러한 각 컨테이너는 docker-compose.yml 파일의 services 구성 내에 항목으로 존재합니다. laravel.test 컨테이너는 애플리케이션을 제공하는 주요 애플리케이션 컨테이너입니다.

Sail을 시작하기 전에 로컬 컴퓨터에서 다른 웹 서버 또는 데이터베이스가 실행되고 있지 않은지 확인해야 합니다. 애플리케이션의 docker-compose.yml 파일에 정의된 모든 Docker 컨테이너를 시작하려면 up 명령을 실행해야 합니다:

sail up

백그라운드에서 모든 Docker 컨테이너를 시작하려면 "detached" 모드로 Sail을 시작할 수 있습니다:

sail up -d

애플리케이션의 컨테이너가 시작되면 웹 브라우저에서 http://localhost 로 프로젝트에 액세스할 수 있습니다.

모든 컨테이너를 중지하려면 Control + C를 눌러 컨테이너 실행을 중지하면 됩니다. 또는 컨테이너가 백그라운드에서 실행 중인 경우 stop 명령을 사용할 수 있습니다:

sail stop

명령어 실행하기

Laravel Sail을 사용할 때, 애플리케이션은 Docker 컨테이너 내에서 실행되며 로컬 컴퓨터와 격리됩니다. 하지만 Sail은 임의의 PHP 명령어, Artisan 명령어, Composer 명령어, Node / NPM 명령어와 같은 다양한 명령어를 애플리케이션에 대해 실행하는 편리한 방법을 제공합니다.

Laravel 문서를 읽을 때, Sail을 참조하지 않는 Composer, Artisan, Node / NPM 명령어에 대한 언급을 자주 보게 될 것입니다. 이러한 예제는 이러한 도구가 로컬 컴퓨터에 설치되어 있다고 가정합니다. 로컬 Laravel 개발 환경에 Sail을 사용하는 경우, Sail을 사용하여 해당 명령어를 실행해야 합니다.

# 로컬에서 Artisan 명령어 실행하기...
php artisan queue:work
 
# Laravel Sail 내에서 Artisan 명령어 실행하기...
sail artisan queue:work

PHP 명령어 실행하기

PHP 명령어는 php 명령어를 사용하여 실행할 수 있습니다. 물론, 이러한 명령어는 애플리케이션에 구성된 PHP 버전을 사용하여 실행됩니다. Laravel Sail에서 사용할 수 있는 PHP 버전에 대한 자세한 내용은 PHP 버전 문서를 참조하십시오.

sail php --version
 
sail php script.php

Composer 명령어 실행하기

Composer 명령어는 composer 명령어를 사용하여 실행할 수 있습니다. Laravel Sail의 애플리케이션 컨테이너에는 Composer 설치가 포함되어 있습니다.

sail composer require laravel/sanctum

기존 애플리케이션을 위한 Composer 의존성 설치

만약 팀과 함께 애플리케이션을 개발하고 있다면, 처음으로 라라벨 애플리케이션을 생성한 사람이 아닐 수도 있습니다. 따라서 애플리케이션 저장소를 로컬 컴퓨터에 복제한 후에는 Sail을 포함한 애플리케이션의 Composer 의존성이 설치되지 않습니다.

애플리케이션의 디렉토리로 이동하여 다음 명령어를 실행하여 애플리케이션의 의존성을 설치할 수 있습니다. 이 명령어는 애플리케이션의 의존성을 설치하기 위해 PHP와 Composer가 포함된 작은 Docker 컨테이너를 사용합니다:

docker run --rm \
-u "$(id -u):$(id -g)" \
-v "$(pwd):/var/www/html" \
-w /var/www/html \
laravelsail/php84-composer:latest \
composer install --ignore-platform-reqs

laravelsail/phpXX-composer 이미지를 사용할 때는 애플리케이션에 사용하려는 PHP와 동일한 버전을 사용해야 합니다(80, 81, 82, 83, 또는 84).

Artisan 명령어 실행

Laravel Artisan 명령어는 artisan 명령어를 사용하여 실행할 수 있습니다:

sail artisan queue:work

Node / NPM 명령어 실행

Node 명령어는 node 명령어를 사용하여 실행할 수 있으며, NPM 명령어는 npm 명령어를 사용하여 실행할 수 있습니다:

sail node --version
 
sail npm run dev

원하는 경우 NPM 대신 Yarn을 사용할 수 있습니다:

sail yarn

데이터베이스와 상호 작용하기

MySQL

이미 눈치채셨겠지만, 애플리케이션의 docker-compose.yml 파일에는 MySQL 컨테이너 항목이 있습니다. 이 컨테이너는 Docker volume을 사용하여 컨테이너를 중지하고 다시 시작하더라도 데이터베이스에 저장된 데이터가 유지되도록 합니다.

또한 MySQL 컨테이너가 처음 시작될 때 두 개의 데이터베이스가 생성됩니다. 첫 번째 데이터베이스는 DB_DATABASE 환경 변수 값을 사용하여 이름이 지정되며 로컬 개발용입니다. 두 번째 데이터베이스는 testing이라는 전용 테스트 데이터베이스로, 테스트가 개발 데이터에 영향을 미치지 않도록 합니다.

컨테이너를 시작한 후에는 애플리케이션의 .env 파일에서 DB_HOST 환경 변수를 mysql로 설정하여 애플리케이션 내에서 MySQL 인스턴스에 연결할 수 있습니다.

로컬 머신에서 애플리케이션의 MySQL 데이터베이스에 연결하려면 TablePlus와 같은 그래픽 데이터베이스 관리 애플리케이션을 사용할 수 있습니다. 기본적으로 MySQL 데이터베이스는 localhost 포트 3306에서 액세스할 수 있으며, 액세스 자격 증명은 DB_USERNAMEDB_PASSWORD 환경 변수 값에 해당합니다. 또는 root 사용자로 연결할 수도 있으며, 이 사용자는 DB_PASSWORD 환경 변수 값을 암호로 사용합니다.

MongoDB

Sail을 설치할 때 MongoDB 서비스를 설치하기로 선택한 경우, 애플리케이션의 docker-compose.yml 파일에는 MongoDB Atlas Local 컨테이너 항목이 있습니다. 이 컨테이너는 검색 인덱스와 같은 Atlas 기능을 제공하는 MongoDB 문서 데이터베이스를 제공합니다. 이 컨테이너는 Docker volume을 사용하여 컨테이너를 중지하고 다시 시작하더라도 데이터베이스에 저장된 데이터가 유지되도록 합니다.

컨테이너를 시작한 후에는 애플리케이션의 .env 파일에서 MONGODB_URI 환경 변수를 mongodb://mongodb:27017로 설정하여 애플리케이션 내에서 MongoDB 인스턴스에 연결할 수 있습니다. 인증은 기본적으로 비활성화되어 있지만, mongodb 컨테이너를 시작하기 전에 MONGODB_USERNAMEMONGODB_PASSWORD 환경 변수를 설정하여 인증을 활성화할 수 있습니다. 그런 다음 연결 문자열에 자격 증명을 추가합니다.

MONGODB_USERNAME=user
MONGODB_PASSWORD=laravel
MONGODB_URI=mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@mongodb:27017

애플리케이션과 MongoDB를 원활하게 통합하려면 MongoDB에서 관리하는 공식 패키지를 설치할 수 있습니다.

로컬 머신에서 애플리케이션의 MongoDB 데이터베이스에 연결하려면 Compass와 같은 그래픽 인터페이스를 사용할 수 있습니다. 기본적으로 MongoDB 데이터베이스는 localhost 포트 27017에서 액세스할 수 있습니다.

Redis

애플리케이션의 docker-compose.yml 파일에는 Redis 컨테이너에 대한 항목도 포함되어 있습니다. 이 컨테이너는 Docker 볼륨을 사용하여 컨테이너를 중지하고 다시 시작할 때도 Redis 데이터에 저장된 데이터가 유지되도록 합니다. 컨테이너를 시작한 후에는 애플리케이션의 .env 파일 내에서 REDIS_HOST 환경 변수를 redis로 설정하여 애플리케이션 내에서 Redis 인스턴스에 연결할 수 있습니다.

로컬 머신에서 애플리케이션의 Redis 데이터베이스에 연결하려면 TablePlus와 같은 그래픽 데이터베이스 관리 애플리케이션을 사용할 수 있습니다. 기본적으로 Redis 데이터베이스는 localhost 포트 6379에서 액세스할 수 있습니다.

Meilisearch

Sail을 설치할 때 Meilisearch 서비스를 설치하기로 선택한 경우, 애플리케이션의 docker-compose.yml 파일에는 Laravel Scout와 통합된 강력한 검색 엔진에 대한 항목이 포함됩니다. 컨테이너를 시작한 후에는 MEILISEARCH_HOST 환경 변수를 http://meilisearch:7700으로 설정하여 애플리케이션 내에서 Meilisearch 인스턴스에 연결할 수 있습니다.

로컬 머신에서 웹 브라우저에서 http://localhost:7700으로 이동하여 Meilisearch의 웹 기반 관리 패널에 액세스할 수 있습니다.

Typesense

Sail을 설치할 때 Typesense 서비스를 설치하기로 선택한 경우, 애플리케이션의 docker-compose.yml 파일에는 Laravel Scout와 기본적으로 통합된 번개처럼 빠른 오픈 소스 검색 엔진에 대한 항목이 포함됩니다. 컨테이너를 시작한 후에는 다음 환경 변수를 설정하여 애플리케이션 내에서 Typesense 인스턴스에 연결할 수 있습니다.

TYPESENSE_HOST=typesense
TYPESENSE_PORT=8108
TYPESENSE_PROTOCOL=http
TYPESENSE_API_KEY=xyz

로컬 머신에서 http://localhost:8108을 통해 Typesense API에 접근할 수 있습니다.

파일 저장소

프로덕션 환경에서 애플리케이션을 실행하는 동안 파일을 저장하기 위해 Amazon S3를 사용할 계획이라면 Sail을 설치할 때 MinIO 서비스를 설치하는 것이 좋습니다. MinIO는 프로덕션 S3 환경에서 "테스트" 스토리지 버킷을 생성하지 않고도 Laravel의 s3 파일 스토리지 드라이버를 사용하여 로컬에서 개발하는 데 사용할 수 있는 S3 호환 API를 제공합니다. Sail을 설치하는 동안 MinIO를 설치하도록 선택하면 애플리케이션의 docker-compose.yml 파일에 MinIO 구성 섹션이 추가됩니다.

기본적으로 애플리케이션의 filesystems 구성 파일에는 s3 디스크에 대한 디스크 구성이 이미 포함되어 있습니다. 이 디스크를 사용하여 Amazon S3와 상호 작용하는 것 외에도 구성 제어와 관련된 환경 변수를 수정하기만 하면 MinIO와 같은 S3 호환 파일 스토리지 서비스와 상호 작용하는 데 사용할 수 있습니다. 예를 들어 MinIO를 사용하는 경우 파일 시스템 환경 변수 구성은 다음과 같이 정의해야 합니다.

FILESYSTEM_DISK=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

Laravel의 Flysystem 통합이 MinIO를 사용할 때 적절한 URL을 생성하려면 AWS_URL 환경 변수를 애플리케이션의 로컬 URL과 일치하고 URL 경로에 버킷 이름을 포함하도록 정의해야 합니다.

AWS_URL=http://localhost:9000/local

http://localhost:8900에서 사용할 수 있는 MinIO 콘솔을 통해 버킷을 생성할 수 있습니다. MinIO 콘솔의 기본 사용자 이름은 sail이고 기본 비밀번호는 password입니다.

exclamation

MinIO를 사용할 때 temporaryUrl 메서드를 통해 임시 스토리지 URL을 생성하는 것은 지원되지 않습니다.

테스트 실행하기

Laravel은 즉시 사용할 수 있는 훌륭한 테스트 지원 기능을 제공하며, Sail의 test 명령어를 사용하여 애플리케이션의 기능 및 단위 테스트를 실행할 수 있습니다. Pest/PHPUnit에서 허용하는 모든 CLI 옵션을 test 명령어에 전달할 수도 있습니다.

sail test
 
sail test --group orders

Sail test 명령어는 test Artisan 명령어를 실행하는 것과 같습니다.

sail artisan test

기본적으로 Sail은 테스트가 데이터베이스의 현재 상태를 방해하지 않도록 전용 testing 데이터베이스를 생성합니다. 기본 Laravel 설치에서 Sail은 테스트를 실행할 때 이 데이터베이스를 사용하도록 phpunit.xml 파일을 구성합니다.

<env name="DB_DATABASE" value="testing"/>

Laravel Dusk

Laravel Dusk는 표현력이 풍부하고 사용하기 쉬운 브라우저 자동화 및 테스트 API를 제공합니다. Sail 덕분에 로컬 컴퓨터에 Selenium 또는 기타 도구를 설치하지 않고도 이러한 테스트를 실행할 수 있습니다. 시작하려면 애플리케이션의 docker-compose.yml 파일에서 Selenium 서비스를 주석 해제합니다.

selenium:
image: 'selenium/standalone-chrome'
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail

다음으로, 애플리케이션의 docker-compose.yml 파일에 있는 laravel.test 서비스에 selenium에 대한 depends_on 항목이 있는지 확인합니다.

depends_on:
- mysql
- redis
- selenium

마지막으로, Sail을 시작하고 dusk 명령어를 실행하여 Dusk 테스트 스위트를 실행할 수 있습니다.

sail dusk

Apple Silicon에서의 Selenium

로컬 머신에 Apple Silicon 칩이 있는 경우, selenium 서비스는 selenium/standalone-chromium 이미지를 사용해야 합니다:

selenium:
image: 'selenium/standalone-chromium'
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail

이메일 미리보기

Laravel Sail의 기본 docker-compose.yml 파일에는 Mailpit에 대한 서비스 항목이 포함되어 있습니다. Mailpit은 로컬 개발 중에 애플리케이션에서 보낸 이메일을 가로채서 브라우저에서 이메일 메시지를 미리 볼 수 있도록 편리한 웹 인터페이스를 제공합니다. Sail을 사용할 때 Mailpit의 기본 호스트는 mailpit이며 포트 1025를 통해 사용할 수 있습니다:

MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_ENCRYPTION=null

Sail이 실행 중인 경우, 다음 주소에서 Mailpit 웹 인터페이스에 접근할 수 있습니다: http://localhost:8025

컨테이너 CLI

애플리케이션 컨테이너 내에서 Bash 세션을 시작하고 싶을 때가 있습니다. shell 명령을 사용하여 애플리케이션 컨테이너에 연결하여 해당 파일 및 설치된 서비스를 검사하고 컨테이너 내에서 임의의 셸 명령을 실행할 수 있습니다:

sail shell
 
sail root-shell

새로운 Laravel Tinker 세션을 시작하려면 tinker 명령을 실행하면 됩니다:

sail tinker

PHP 버전

Sail은 현재 PHP 8.4, 8.3, 8.2, 8.1 또는 PHP 8.0을 통해 애플리케이션을 제공하는 것을 지원합니다. Sail에서 사용되는 기본 PHP 버전은 현재 PHP 8.4입니다. 애플리케이션을 제공하는 데 사용되는 PHP 버전을 변경하려면 애플리케이션의 docker-compose.yml 파일에서 laravel.test 컨테이너의 build 정의를 업데이트해야 합니다:

# PHP 8.4
context: ./vendor/laravel/sail/runtimes/8.4
 
# PHP 8.3
context: ./vendor/laravel/sail/runtimes/8.3
 
# PHP 8.2
context: ./vendor/laravel/sail/runtimes/8.2
 
# PHP 8.1
context: ./vendor/laravel/sail/runtimes/8.1
 
# PHP 8.0
context: ./vendor/laravel/sail/runtimes/8.0

또한, 애플리케이션에서 사용 중인 PHP 버전을 반영하도록 image 이름을 업데이트할 수도 있습니다. 이 옵션은 애플리케이션의 docker-compose.yml 파일에도 정의되어 있습니다.

image: sail-8.2/app

애플리케이션의 docker-compose.yml 파일을 업데이트한 후에는 컨테이너 이미지를 다시 빌드해야 합니다.

sail build --no-cache
 
sail up

Node 버전

Sail은 기본적으로 Node 20을 설치합니다. 이미지를 빌드할 때 설치되는 Node 버전을 변경하려면 애플리케이션의 docker-compose.yml 파일에서 laravel.test 서비스의 build.args 정의를 업데이트하면 됩니다.

build:
args:
WWWGROUP: '${WWWGROUP}'
NODE_VERSION: '18'

애플리케이션의 docker-compose.yml 파일을 업데이트한 후에는 컨테이너 이미지를 다시 빌드해야 합니다.

sail build --no-cache
 
sail up

사이트 공유

때로는 동료에게 사이트를 미리 보여주거나 애플리케이션과의 웹훅 통합을 테스트하기 위해 사이트를 공개적으로 공유해야 할 수 있습니다. 사이트를 공유하려면 share 명령을 사용하면 됩니다. 이 명령을 실행하면 애플리케이션에 액세스하는 데 사용할 수 있는 임의의 laravel-sail.site URL이 발급됩니다.

sail share

share 명령어를 통해 사이트를 공유할 때, 애플리케이션의 bootstrap/app.php 파일에서 trustProxies 미들웨어 메서드를 사용하여 애플리케이션의 신뢰할 수 있는 프록시를 구성해야 합니다. 그렇지 않으면 urlroute와 같은 URL 생성 도우미가 URL 생성 중에 사용해야 할 올바른 HTTP 호스트를 결정할 수 없습니다.

->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '*');
})

공유된 사이트의 하위 도메인을 선택하고 싶다면 share 명령어를 실행할 때 subdomain 옵션을 제공할 수 있습니다.

sail share --subdomain=my-sail-site
lightbulb

share 명령어는 BeyondCode의 오픈 소스 터널링 서비스인 Expose에 의해 구동됩니다.

Xdebug를 이용한 디버깅

Laravel Sail의 Docker 구성에는 PHP를 위한 인기 있고 강력한 디버거인 Xdebug에 대한 지원이 포함되어 있습니다. Xdebug를 활성화하려면 Sail 구성 게시를 완료했는지 확인하십시오. 그런 다음 Xdebug를 구성하기 위해 다음 변수를 애플리케이션의 .env 파일에 추가하십시오.

SAIL_XDEBUG_MODE=develop,debug,coverage

다음으로, 게시된 php.ini 파일에 Xdebug가 지정된 모드에서 활성화되도록 다음 구성이 포함되어 있는지 확인하십시오.

[xdebug]
xdebug.mode=${XDEBUG_MODE}

php.ini 파일을 수정한 후에는 php.ini 파일 변경 사항이 적용되도록 Docker 이미지를 다시 빌드해야 합니다.

sail build --no-cache

Linux 호스트 IP 구성

내부적으로 XDEBUG_CONFIG 환경 변수는 Mac 및 Windows(WSL2)에서 Xdebug가 올바르게 구성되도록 client_host=host.docker.internal로 정의됩니다. 로컬 머신이 Linux를 실행 중이고 Docker 20.10 이상을 사용하는 경우 host.docker.internal을 사용할 수 있으므로 수동 구성이 필요하지 않습니다.

Docker 20.10 이전 버전의 경우 Linux에서는 host.docker.internal이 지원되지 않으므로 호스트 IP를 수동으로 정의해야 합니다. 이를 위해 docker-compose.yml 파일에서 사용자 지정 네트워크를 정의하여 컨테이너에 고정 IP를 구성합니다.

networks:
custom_network:
ipam:
config:
- subnet: 172.20.0.0/16
 
services:
laravel.test:
networks:
custom_network:
ipv4_address: 172.20.0.2

고정 IP를 설정했으면 애플리케이션의 .env 파일 내에서 SAIL_XDEBUG_CONFIG 변수를 정의합니다.

SAIL_XDEBUG_CONFIG="client_host=172.20.0.2"

Xdebug CLI 사용법

sail debug 명령을 사용하여 Artisan 명령을 실행할 때 디버깅 세션을 시작할 수 있습니다.

# Xdebug 없이 Artisan 명령 실행...
sail artisan migrate
 
# Xdebug를 사용하여 Artisan 명령 실행...
sail debug migrate

Xdebug 브라우저 사용법

웹 브라우저를 통해 애플리케이션과 상호 작용하면서 애플리케이션을 디버깅하려면 웹 브라우저에서 Xdebug 세션을 시작하기 위한 Xdebug에서 제공하는 지침을 따르십시오.

PhpStorm을 사용하는 경우 제로 구성 디버깅에 관한 JetBrains의 문서를 검토하십시오.

exclamation

Laravel Sail은 애플리케이션을 제공하기 위해 artisan serve에 의존합니다. artisan serve 명령은 Laravel 버전 8.53.0부터 XDEBUG_CONFIGXDEBUG_MODE 변수만 허용합니다. 이전 버전의 Laravel (8.52.0 이하)은 이러한 변수를 지원하지 않으며 디버그 연결을 수락하지 않습니다.

사용자 정의

Sail은 Docker일 뿐이므로 거의 모든 것을 자유롭게 사용자 정의할 수 있습니다. Sail 자체의 Dockerfile을 게시하려면 sail:publish 명령을 실행하면 됩니다.

sail artisan sail:publish

이 명령을 실행하면 Laravel Sail에서 사용되는 Dockerfile 및 기타 구성 파일이 애플리케이션의 루트 디렉토리에 있는 docker 디렉토리 내에 배치됩니다. Sail 설치를 사용자 정의한 후에는 애플리케이션의 docker-compose.yml 파일에서 애플리케이션 컨테이너의 이미지 이름을 변경할 수 있습니다. 이렇게 한 후에는 build 명령을 사용하여 애플리케이션의 컨테이너를 다시 빌드하십시오. 단일 시스템에서 Sail을 사용하여 여러 Laravel 애플리케이션을 개발하는 경우 애플리케이션 이미지에 고유한 이름을 할당하는 것이 특히 중요합니다.

sail build --no-cache