Laravel

[laravel 8] sail을 사용해서 환경을 구축해봅시다!

rediate.will 2022. 7. 13. 11:02

일단 나는 도커 수업을 먼저 들었었고, 조금... 매우 조금만 익숙한 상태이다.

 

 

먼저 도커부터 깔아주시고!!!

 

https://laravel.kr/docs/8.x/sail#%EA%B8%B0%EC%A1%B4%20%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%97%90%20Sail%20%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

라라벨 8.x - 세일-Sail

라라벨 한글 메뉴얼 8.x - 세일-Sail

laravel.kr

이 부분을 보면, 세일 까는거 나온당.

 

 

// 컴포저 설치
> brew install composer

> composer require laravel/sail

// 루트에 docker-compose.yml파일을 생성해줌. 
// 나는 생략하고 git으로 프로젝트 다운로드 함. (프로젝트 내에 이미 생성되어있었음)
> php artisan sail:install

// sail 명령어로 짧게 사용할 수 있다
> alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'

// 백그라운드로 올려보자
> sail up -d

// 확인 docker-compose.yml 파일에 따라 달라짐. 나는 라라벨이랑 mysql만 올려서 두개만 나옴.
> sail ps
NAME                      COMMAND                  SERVICE             STATUS              PORTS
laravel.test-1   "start-container"        laravel.test        running             0.0.0.0:80->80/tcp, 0.0.0.0:5173->5173/tcp, 8000/tcp
mysql-1          "/entrypoint.sh mysq…"   mysql               running (healthy)   0.0.0.0:3306->3306/tcp, 33060-33061/tcp

 

여기까지가 세일 셋팅 끝.

 

그리고 의존성을 해결 해 줘야하는데,

 

https://laravel.kr/docs/8.x/sail#%EA%B8%B0%EC%A1%B4%20%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%97%90%20Composer%20%EC%9D%98%EC%A1%B4%EC%84%B1%20%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

라라벨 8.x - 세일-Sail

라라벨 한글 메뉴얼 8.x - 세일-Sail

laravel.kr

를 참고하여

 

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

를 실행하면 된다. 여기서 php81은 74, 80, 81이 들어갈 수 있다고 한다.

그리고 sail bash로 들어가서 composer를 입력해보면 컴포저가 깔려있는 걸로 나온당

 

routes/api.php에 

Route::get('hello', fn() => 'Hi');

추가하고,

 

http://localhost/hello를 입력하면 hi가 출력될것이다.

물론 프리픽스가 있는지 routeServiceProvider파일 확인 해보고 적당히 주소 입력 ㄲ

 

그럼 기본적인 셋팅 끝!

 

 

 

 

아래부터는 하다보니 알게 된 기록이다.

 

1. 그냥 sail mysql -uroot -p로 하면 권한 없는 계정으로 로그인이 되서, 뭘 할 수가 없었다.

 

그래서 강제로 mysql명령어로 입력하도록 해서 들어갔더니 root로 접속 되었다.

 

> sail exec mysql mysql -uroot -p

mysql> select CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

mysql>

 

그래서 여기서 작업할것이 있다면 작업 할 수 있었다.

 

+. 뒤질나게 테스트 커넥션을 해도 오류를 뱉어댔다..

 

> ./vendor/bin/sail mysql -uroot -p     
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

 

비번은 분명히 맞게 입력했단말이닷!!!!

 

근데 그냥 바꿔주니 되더라...잉?

 

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '비번';
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

 

 

2. 마이그레이션은 

> sail php artisan migrate

 

3. 테스팅 돌릴때

 

3-1. SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known 와 같은 오류가 난다면,

 

https://laracasts.com/discuss/channels/laravel/laravel-sqlstatehy000-2002-php-network-getaddresses-getaddrinfo-failed-name-or-service-not-known?page=1&replyId=723247 

 

https://laracasts.com/discuss/channels/laravel/laravel-sqlstatehy000-2002-php-network-getaddresses-getaddrinfo-failed-name-or-service-not-known?page=1&replyId=723247

 

laracasts.com

 

// .env
#DB_HOST=mysql
DB_HOST=0.0.0.0

 

=> mysql이 맞다. 왜냐하면 도커에서 이름으로 같은 네트워크로 묶인 컨테이너들을 구분할수 있으므로. 

 

 

3-2. connect refused 오류가 뜨면,

 

phpunit.xml파일을 살펴보자.

 

<php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="CACHE_DRIVER" value="array"/>
        <server name="DB_CONNECTION" value="sqlite" /> // 이부분이 없었다. 채워주자.
         <server name="DB_DATABASE" value=":memory:"/>
        <server name="MAIL_MAILER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
        <server name="TELESCOPE_ENABLED" value="false"/>
    </php>

 

스톰에서 테스팅 셋팅은

https://www.linkedin.com/pulse/phpstorm-docker-phpunit-xdebug-hernan-arregoces/

이게 참 잘 되어있네!!

 

 

자매품.

https://rediant.tistory.com/90