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を行います。 これで準備は完了