WEB制作Laravel11の環境構築解説

Laravel11の環境構築解説

laravel11入門解説のために、

docker-compose.ymlから作りましょう。

まずプロジェクトフォルダを作ってそこに docker-compose.ymlを書きます。

version: "3"
volumes:
  php-fpm-socket:
  mysql-data:

services:
  mysql:
    image: mysql:8.0.36
    container_name: laravel_mysql
    volumes:
      - mysql-data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravel
      MYSQL_USER: user
      MYSQL_PASSWORD: password

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: laravel_phpmyadmin
    restart: always
    ports:
      - "8889:80"
    environment:
      PMA_ARBITRARY: 1
      PMA_HOST: mysql
      PMA_USER: root
      PMA_PASSWORD: root
    depends_on:
      - mysql

  php:
    build:
      context: .
      dockerfile: ./php/Dockerfile
    container_name: laravel_php
    volumes:
      - ./nginx/html:/usr/share/nginx/html
      - ./apps:/var/www/html:delegated
      - ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
      - type: volume
        source: php-fpm-socket
        target: /var/run/php-fpm
        volume:
          nocopy: true
    depends_on:
      - mysql

  nginx:
    image: nginx:latest
    container_name: laravel_nginx
    volumes:
      - ./nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      - ./apps:/var/www/html:delegated
      - ./nginx/log/access.log:/var/log/nginx/access.log
      - ./nginx/log/error.log:/var/log/nginx/error.log
      - type: volume
        source: php-fpm-socket
        target: /var/run/php-fpm
        volume:
          nocopy: true
    restart: always
    ports:
      - "80:80"
    depends_on:
      - php

  redis:
    image: redis:latest
    container_name: laravel_redis
    volumes:
      - ./redis/data:/data
    ports:
      - "6379:6379"

つまりdocker-compose.ymlの同階層に phpフォルダ nginxフォルダ redisフォルダを作ります。

nginx/conf.d/にnginx.confを作り、

user  www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

で保存してください。

あとは nginx/conf.d/default.confに

server {
    listen 80;

    root /var/www/html/public;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.php index.html index.htm;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ [^/]\\.php(/|$) {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

    location ~ /\\.(?!well-known).* {
        deny all;
    }
}

さらに nginx/log/access.log

nginx/log/error.log のファイルを作ってください。

そして、

phpフォルダの中にDockerfileというファイルを作り

FROM php:8.2-fpm
MAINTAINER docker-php

RUN mkdir /var/run/php-fpm
VOLUME ["/var/run/php-fpm"]

RUN apt-get update && \\
  apt-get install -y \\
  vim \\
  wget \\
  lsb-release \\
  libicu-dev \\
  mariadb-client \\
  git \\
  zip \\
  unzip \\
  libpng-dev \\
  libsodium-dev \\
  libzip-dev \\
  libjpeg-dev \\
  libfreetype6-dev \\
  cron \\
  curl \\
  gnupg \\
  apt-transport-https && \\
  docker-php-ext-install pdo_mysql mysqli intl pcntl sodium gd zip sockets && \\
  docker-php-ext-configure gd --with-freetype --with-jpeg && \\
  docker-php-ext-install -j$(nproc) gd

# Install Composer
WORKDIR /var/www/html
RUN curl -sS <https://getcomposer.org/installer> | php -- --install-dir=/usr/local/bin --filename=composer

# Install Yarn
RUN curl -sS <https://dl.yarnpkg.com/debian/pubkey.gpg> | apt-key add - && \\
  echo "deb <https://dl.yarnpkg.com/debian/> stable main" | tee /etc/apt/sources.list.d/yarn.list && \\
  apt-get update && apt-get install -y yarn

# Install Node.js
RUN curl -sL <https://deb.nodesource.com/setup_16.x> | bash - && \\
  apt-get install -y nodejs

# Add crontab file in the cron directory
RUN echo '*/5 * * * * root /path/to/your_command' >> /etc/crontab

COPY ./php/php-fpm.d/zzz-docker.conf /usr/local/etc/php-fpm.d/zzz-www.conf

そして

/php/php-fpm.d/zzz-docker.conf

を作り、

[www]
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

そしてdocker-compose up -dを実行してみます。

めっちゃ長いインストールの果てに Dockerコンテナが正常に起動して、サービスが立ち上がったと思います。

今リアルタイムでやりながら書いてるので 動いたと思います。

docker psで、laravel11用のコンテナのコンテナIDを見つけて docker exec -it xxxxxx /bin/bash でログインしてください。 ログインをしたら

composer create-project --prefer-dist "laravel/laravel:^11" .

私もちょっとだけ変えて、このコマンドでlaravel11の環境構築は一撃で終わりました。

では開発に入る前に .envファイルを

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:N+C9YO66I5Xpq4eqdf8uQkvaQr0bXsYxgz5wOa1+lyc=
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=http://127.0.0.1

APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US

APP_MAINTENANCE_DRIVER=file
APP_MAINTENANCE_STORE=database

BCRYPT_ROUNDS=12

LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

# Database configuration
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database

CACHE_STORE=database
CACHE_PREFIX=

MEMCACHED_HOST=127.0.0.1

REDIS_CLIENT=phpredis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

VITE_APP_NAME="${APP_NAME}"

このように直してからはじめましょう。 今回のdocker-compose.ymlに合うように書き直しました。

書き直したら、 php artisan migrateを行います。 これで準備は完了