【PHP8.0×Laravel8.0 대응】Docker를 사용한 Laravel의 환경 구축

소개



최근에는 현장에서도, Docker 환경하에서 Laravle을 만지는 것이 늘어나 조금은 지견도 모여 왔을까 생각하므로, 잊지 않도록 망비록으로서 남겨 둡니다

여기에서는 dockerdocker-compose의 설치에 관해서는 언급하지 않으므로, 아직 분은 이 기사을 알기 쉬웠으므로 참고로 해보십시오.

기사내의 미비나, 좀더 이러한 쪽이 좋다고 하는 어드바이스가 있으면 코멘트 부탁합니다

구성



임의의 디렉토리에 SampleProject 를 작성해 아래의 디텍트 구성으로 환경을 구축합니다
SampleProject
  ├── docker-compose.yml
  ├── docker
  │   ├── php
  │   │    ├── Dockerfile
  │   │    └── php.ini
  │   └── nginx
  │        └── default.conf
  └── src
      └──  Laravelのプロジェクトファイル

docker-compose.yml의 내용


docker-compose.yml는 여러 컨테이너를 동시에 움직이는 도구이며 Docker Compose를 사용하는 데 사용되는 YML 파일입니다.

docker-compose.yml
version: '3'

services:
  php:
    build: ./docker/php
    volumes:
      - ./src:/var/www

  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./src:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: sample_project
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306

  node:
    image: node:12.13-alpine
    tty: true
    volumes:
      - ./src:/var/www
    working_dir: /var/www

Dockerfile의 내용


Dockerfile는 Docker에서 실행할 컨테이너의 구성 정보를 설명하는 파일입니다.
FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/

RUN apt-get update \
  && apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
  && docker-php-ext-install zip pdo_mysql

#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin


WORKDIR /var/www

RUN composer global require "laravel/installer"

php.ini의 내용



php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

default.conf 내용


default.conf는 ngninx 구성 정보를 설명하는 파일입니다.

default.conf
server {
  listen 80;
    index index.php index.html;
    root /var/www/sampleProject/public;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
    }

  location ~ \.php$ {

    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass php:9000;
    fastcgi_index index.php;
    include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
  }
 }

환경 구축 절차



시작하기 원하는 곳에 SampleProject 만들기
~/ $ mkdir SampleProject
docker-compose.yml 파일을 작성해, 내용은 처음에 소개했다 docker-compose.yml의 내용을 copipe 한다
~/SampleProject $ touch docker-compose.yml
Dockerfilephp.ini를 만들고 내용은 처음에 소개 한 각 파일의 내용을 복사합니다.
~/SampleProject/docker/php $ touch Dockerfile
~/SampleProject/docker/php $ touch php.ini
defalt.conf 파일을 작성해, 내용은 처음에 소개했다 default.conf의 내용을 copipe 한다
~/SampleProject/nginx $ touch default.conf
docker-compose.yml 파일이있는 디렉토리에서 다음 명령을 실행하여 docker를 시작합니다.
~/SampleProject $ docker-compose up -d

Creating php                ... done
Creating db-host            ... done
Creating sampleproject_node ... done
Creating nginx              ... done

php 컨테이너 안으로 들어가기
~/SampleProject $ docker-compose exec php bash

php 컨테이너 내에서 Laravel 프로젝트 만들기
root@7eb4359bf51c:/var/www# laravel new sampleProject

Laravel 프로젝트가 포함되어 있는지 확인
버전이 출력되면 OK입니다.
root@7eb4359bf51c:/var/www/sampleProject# php artisan --version
Laravel Framework 8.27.0

php 컨테이너를 빠져
root@7eb4359bf51c:/var/www# exit

이제 SampleProject/src에 Laravel 프로젝트 파일을 만들고,
http://localhost/로 이동하면 친숙한 환영 페이지가 표시됩니다.



MySQL 컨테이너에 들어가기
~/SampleProject $ docker-compose exec db bash

MySQL 컨테이너 내에서 MySQL에 로그인
root@630fbaf32806:/# mysql -u root -proot

이 프로젝트에서 사용할 데이터베이스 만들기
데이터베이스 이름은 docker-compose.yml에 지정된 MYSQL_DATABASE와 일치해야합니다.
mysql> mysql> CREATE DATABASE sample_project;

Query OK, 1 row affected (0.01 sec) 

Laravel 프로젝트 파일의 .env 파일 수정

.env
DB_CONNECTION=mysql
DB_HOST=db # docker-compose.ymlに記載したDBのサービス名
DB_PORT=3306
DB_DATABASE=sample_project # 使用するDB名
DB_USERNAME=root
DB_PASSWORD=root

php 컨테이너에 들어가기
~/SampleProject $ docker-compose exec php bash

php 컨테이너 내에서 마이그레이션 수행
root@7eb4359bf51c:/var/www# php artisan migrate

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.04 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.02 seconds)

마이그레이션이 성공적으로 실행되면 성공입니다! !

node 컨테이너에 들어가기
~/SampleProject $ docker-compose exec node sh
/var/www

무지하게 환경 구축이 완료되면, 이 기사 를 참고로 작성한 프로젝트를 GitHub에 올려 봅시다.

좋은 웹페이지 즐겨찾기