|
投稿日: 2025-03-13 (木)
|
| 目次▼ |
いきなりですが、ファイルやらディレクトリを記載しておきます。
- app/ - db/
- php/ - Dockerfile - php.ini - nginx/ - Dockerfile - default.conf
すでにポートが埋まっていて各ポートを変更したい方はportsのところを変更してください。
ホスト側:コンテナ側 です。左側のホスト側のポートだけ変更するといいでしょう。
ちなみにdocker-compose.ymlじゃないの?って思う方いらっしゃるかもしれませんが、compose.yamlが現在は推奨されているそうです。
services:
web:
container_name: web
build: ./docker/nginx
ports:
- 80:80
volumes:
- ./src/app:/var/www/html
app:
container_name: app
mem_limit: 8g
build: ./docker/php
volumes:
- ./src/app:/var/www/html
- storage-volumes:/var/www/html/storage/framework
- vendor-volumes:/var/www/html/vendor
ports:
- 5173:5173
environment:
- DB_CONNECTION=${DB_CONNECTION:-mysql}
- DB_HOST=${DB_HOST:-db}
- DB_PORT=${DB_PORT:-3306}
- DB_DATABASE=${DB_NAME:-laravel}
- DB_USERNAME=${DB_USER:-user}
- DB_PASSWORD=${DB_PASS:-password}
depends_on:
- db
db:
container_name: db
image: mysql
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=${DB_NAME:-laravel}
- MYSQL_USER=${DB_USER:-user}
- MYSQL_PASSWORD=${DB_PASS:-password}
- MYSQL_ROOT_PASSWORD=${DB_PASS:-password}
volumes:
- ./src/db:/var/lib/mysql
pma:
container_name: pma
image: phpmyadmin
restart: always
ports:
- 81:80
environment:
- PMA_HOST=${DB_HOST:-db}
- PMA_USER=${DB_USER:-user}
- PMA_PASSWORD=${DB_PASS:-password}
depends_on:
- db
volumes:
storage-volumes:
vendor-volumes:
phpMyAdminが不要ならばpmaの部分は削除するといいでしょう。
上記のcompose.yamlのポート割当先は以下の通りです
となっている。
compose.yamlの build: ./docker/nginx で指定したディレクトリです。
Alpine Linux上のNginxイメージを使います。
FROM nginx:stable-alpine COPY default.conf /etc/nginx/conf.d/default.conf
Nginx用の仮想ホスト設定ファイルです。
(開発環境用なので本番環境ではもっとセキュリティを考慮して変えましょう)
server {
listen 80;
listen [::]:80;
root /var/www/html/public;
index index.php;
charset utf-8;
server_tokens on; # Ngnixのバージョン表示 (デバッグ用)
# add_header X-Frame-Options "SAMEORIGIN"; # クリックジャッキング対策
add_header X-Content-Type-Options "nosniff"; # MIMEタイプスニッフィング対策
# キャッシュの無効化 (デバッグ用)
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0";
add_header Pragma "no-cache";
add_header Expires 0;
# CORS対応 (デバッグ用)
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, DELETE, PUT, PATCH";
add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Requested-With";
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 app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
# アクセス制限
location ~ /\.(?!well-known).* {
deny all;
}
}
PHP 8.3 FPM版を使います
FPMはNginx上で動かすことができ、そして普通のCGI版よりも速度が早いFast CGIってのが使われているそうです。
FROM php:8.3-fpm
EXPOSE 5173
COPY php.ini /usr/local/etc/php/php.ini
# git, zip, unzip, vim, wget, xz-utils, libzip-dev, curl, PHP拡張(pdo_mysql, mysqli, zip) のインストール
RUN apt-get update && apt-get install -y \
git zip unzip vim wget xz-utils libzip-dev curl \
&& docker-php-ext-install pdo_mysql mysqli zip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Node.js (LTS) のインストール
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
&& apt-get install -y nodejs
# Composer のインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
# nvm のインストール
ENV NODE_VERSION=20.9.0
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash \
&& bash -c ". /root/.nvm/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm use ${NODE_VERSION} && nvm alias default ${NODE_VERSION}"
ENV NVM_DIR=/root/.nvm
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
# バージョン確認
RUN php --version && node --version && npm --version && composer --version
# コンテナ内の作業ディレクトリを指定 (デフォルトのカレントディレクトリ)
WORKDIR /var/www/html
PHPの設定ファイルです
[Date] date.timezone = "Asia/Tokyo" [mbstring] zend.multibyte = On zend.script_encoding = UTF-8 mbstring.language = "Japanese"
環境変数です。
compose.yaml にて${DB_NAME:-laravel}と指定されている箇所は.envで定義されたDB_NAMEを使い、未定義であればDB_NAME=laravelをデフォルトとしています。
DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_NAME=laravel DB_USER=user DB_PASS=password
本番環境でなければこのままで問題ないです
ちなみに変更するのであれば間違ってGitでコミットしないように.gitignoreも設定しておき、なお.env.exampleも用意しておくといいでしょう
ビルドに必要ないファイルを指定できます。いわゆる.gitignoreみたいなやつです。(構文は違うので気をつけてください)
.env .git .gitignore
- app/ - db/
上記のようなフォルダ構造になるようにディレクトリを作成してください。
app が作業フォルダとなります。
ほとんどはvar/www/htmlそのままだと思います。一部だけ最適化のためにボリュームに入ってますが。
dbはMySQLのデータが入るフォルダです。
シンボリックリンクが対応していないドライブ上でMySQLをバインドマウントするとエラーが発生して起動できなくなる可能性があります。
DockerのMySQLが起動しない問題、exFATのせいだった でこの件について記載しましたが、NTFSなどのシンボリックリンクをサポートしているファイルシステムを用いたドライブ上を使うことが無難です。(もし、exFATでも使いたいのであればバインドマウントをやめるかmysql用のDockerfileを作ってmy.confにてシンボリックリンクを無効にすると良いでしょう)
ファイルの配置が終わったら以下のコマンドを実行しましょう。ビルドと起動をしてくれます。
docker compose up -d
ビルドは初回のみなのでDockerfileなどに変更を加えた場合、二度目から再ビルドするためには「docker compose up -d --build」のように--buildを追加する必要があります。
起動できたら
docker compose exec app bash
でシェルに入りましょう。
docker/php/Dockerfile でデフォルトのカレントディレクトリを「/var/www/html/」としているので起動後も「/var/www/html/」となっていると思います。
コンテナ内のシェルで以下を実行します。
export COMPOSER_PROCESS_TIMEOUT=1200 composer create-project laravel/laravel . chmod -R 777 /var/www/html/storage /var/www/html/bootstrap/cache
COMPOSER_PROCESS_TIMEOUTはPHPのComposerで1200秒まで1つのプロセスにかけてもよい、逆に言えばそれ以上時間がかかると強制停止されます。
デフォルトでは300秒となっており、それでは短すぎてスペックの低いPCや回線の悪い場所ではパッケージのインストールに失敗する可能性があるため設定しました。
docker compose down
です。
ついでのメモみたいな感じです。
LaravelのBreezeパッケージをインストールし、それを使ってReactも導入します。
2番のコマンドによってReactの他にInertia.jsやLaravel Sailなどもインストールされます。
composer require laravel/breeze --dev php artisan breeze:install react
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion @chakra-ui/icons`
.env src/*
これはsrc/app、src/dbのフォルダを作り忘れていると思います。
dbのマウント先フォルダの権限の設定がミスっていると思われます。
もしくはファイルシステムがシンボリックリンクをサポートしていないかもしれません。->DockerのMySQLが起動しない問題、exFATのせいだった
コメントはありません。 Comments/Laravel12の開発環境をDockerで構築する
キーワード: 情報技術, Docker, コンテナ, プログラミング, ウェブ, Laravel12, PHP8, 仮想環境, web, フレームワーク, Framework, データベース, JavaScript, 最新, 方法, やり方
| Pitan |
![]() |
| プログラミングや音MADやらが趣味 |
[もっと見る]
[もっと見る]