[laravel 8] sail을 사용해서 환경을 구축해봅시다!
일단 나는 도커 수업을 먼저 들었었고, 조금... 매우 조금만 익숙한 상태이다.
먼저 도커부터 깔아주시고!!!
라라벨 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
여기까지가 세일 셋팅 끝.
그리고 의존성을 해결 해 줘야하는데,
라라벨 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
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/
이게 참 잘 되어있네!!
자매품.