-
Notifications
You must be signed in to change notification settings - Fork 39
Description
2015년에서 2016년으로 넘어갈 즈음에 라라벨 5.2/PHP7.0으로 온라인에 글을 쓰기 시작했고, 2016년 말 종이 책을 출간할 때는 라라벨 5.3/PHP7.0 기준으로 썼습니다. 6년이 지났습니다. 그간에 저의 빨간책을 사랑해 주신 독자 여러분께 진심을 담아 감사 인사 드립니다.
오늘 어느 독자의 질문을 받고, 오랫만에 PHP와 라라벨 생태계를 살펴보니, PHP는 8.0이고 라라벨은 9.x이군요 !!
현재의 런타임 환경으로 제 책을 보고 따라하신다면 정상 작동하는 코드가 아마도 거의 없을 겁니다. 그럼에도 불구하고, PHP와 라라벨 기초 문법이 바뀐것은 아니므로, 라라벨5.3/PHP7.1 런타임 환경만 갖춘다면 책을 보시는데 지장이 없다고 확신합니다.
2022년에 PHP7.1을 직접 설치할 수 있는 방법은 찾기 힘들겁니다. 책의 예제 코드 중 일부가 PHP7.2 버전부터는 호환되지 않습니다.
아래에서 Docker를 이용해서 PHP7.1 개발 환경을 구성하는 방법을 설명합니다.
요약 버전
이하 명령어는 모두 Mac 기준입니다. 윈도 환경에서의 작동은 어느 독자님의 환경에서 검증했습니다.
~ $ wget https://github.com/appkr/l5code/files/8481555/myapp.zip
~ $ unzip myapp.zip
~ $ cd myapp
~/myapp $ docker-compose up -d
~/myapp $ docker exec -it laravel cp /app/.env.example /app/.env
~/myapp $ docker exec -it laravel php /app/artisan key:generate
~/myapp $ open http://localhost:8000애플리케이션 설치
책에서 언급한 laravel new ... 또는 composer create-project ... 명령을 이용하지 않고, 이미 만든 프로젝트의 압축파일을 다운로드 받아 압축을 풉니다. 혹시 모를 의존 충돌을 피하기 위해 vendor 폴더까지 압축에 포함했습니다
Docker 설치
Docker를 설치하고 실행해주세요
docker-compose
Docker가 설치되고 구동되면, docker-compose 명령을 이용할 수 있습니다. docker-compose 명령으로 MySQL, 웹서버/PHP 런타임등을 한번에 구동합니다.
최초 실행이라면, MySQL에 myapp이란 데이터베이스 스키마와 homestead 사용자를 자동으로 만들어줍니다
이 명령을 실행하기 전에 3306, 6379, 8000 번 포트를 사용하는 프로세스를 중단해야 합니다
~/myapp $ docker-compose up -d
# up: 시작하겠다는 의미
# -d: detach(백그라운드) 모드로 실행
# 최초 한 번은 시간이 걸립니다클러스터에 실행중인 컨테이너를 확인합니다. 총 세 개가 나와야 합니다
~/myapp $ docker-compose ps
# Name Command State Ports
# -------------------------------------------------------------------------------------------
# laravel docker-php-entrypoint apac ... Up (healthy) 0.0.0.0:8000->80/tcp
# mysql docker-entrypoint.sh mysql ... Up (healthy) 0.0.0.0:3306->3306/tcp, 33060/tcp
# redis docker-entrypoint.sh redis ... Up (healthy) 0.0.0.0:6379->6379/tcp- laravel: Apache2.4/PHP7.1 런타임을 탑재하여 라라벨 애플리케이션을 구동하는 컨테이너
- mysql: MySQL 5.7.32 서버
- redis: 레디스 서버; 실습에 필요하지않았던 걸로 기억합니다..
실행중인 컨테이너를 전부 중단하고 재시작하는 방법은
~/myapp $ docker-compose stop
~/myapp $ docker-compose start
~/myapp $ docker-compose restart문제가 발생해서 컨테이너를 완전히 버리고, 새 컨테이너를 띄우고 싶다면
~/myapp $ docker-compose down
~/myapp $ docker-compose up -d다만, 컨테이너를 전부 재시작하면 기존에 MySQL에 저장했던 내용은 날아갑니다. 재시작해도 기존 상태를 계속 유지하고 싶다면, docker-compose.yml 파일의 volumes 선언문의 주석을 제거한 후, 클러스터를 재시작해주세요.
커맨드 실행
로컬 개발 서버로 로컬 컴퓨터에서 개발할 때 이렇게 명령하던 것을
~/myapp $ php artisanDocker 컨테이너를 사용할 때는 이렇게 하셔야 합니다
~/myapp $ docker exec -it laravel php /app/artisan
# Laravel Framework version 5.3.31
# ...
# 또는 Docker 컨테이너에 들어가서 커맨드해도 됩니다
# ~/myapp $ docker exec -it laravel bash
# /myapp $ php artisan애플리케이션 초기 설정
.env를 복제합니다
~/myapp $ docker exec -it laravel cp /app/.env.example /app/.envAPP_KEY를 만듭니다
~/myapp $ docker exec -it laravel php /app/artisan key:generateDB 접속 테스트 한번 해볼까요?
~/myapp $ docker exec -it laravel php /app/artisan tinker
# Psy Shell v0.8.18 (PHP 7.1.33 — cli) by Justin Hileman
# New version is available (current: v0.8.18, latest: v0.10.5)
# >>> DB::select('SELECT 1');
# => [
# {#710
# +"1": 1,
# },
# ]HTTP 통신 테스트 (웹 브라우저에서 http://localhost:8000 하시면 됩니다)
$ curl -s -I http://localhost:8000
# HTTP/1.1 200 OK
# Server: nginx
# ...코드 작성 및 디버깅
Docker 컨테이너를 사용한다고 코드 작성 방법이 달라지지 않습니다. 사용하던 코드 에디터로 코드 작성하시면 됩니다.
~/myapp $ pstorm . # phpstorm
~/myapp $ subl . # sublime
~/myapp $ code . # vscodemyapp 프로젝트 폴더는 laravel 컨테이너의 /app폴더로 마운트되어 컨테이너 안에서 실행됩니다. 따라서 컨테이너 안에서 PHP 런타임이 storage/logs/laravel.log에 쓴 내용도 로컬 컴퓨터에서 확인 가능합니다
~/myapp $ tail -f storage/logs/laravel.log