新ぴたぶろぐ
自分が書きたいことを書くだけのブログ
≡
検索
AND検索
OR検索
↑
プロフィール
Pitan
プログラミングや音MADやらが趣味
↑
最新のページ
最新の5件
2025-03-28
ActionsからPackagesへPublishしようとしてもForbiddenとかUnauthorizedで失敗する
2025-03-20
ユーザー単位での共通の gradle.properties
2025-03-18
GitHub Pagesの解除方法
今使っているものについてまとめる2025
2025-03-13
MMDのプラグインまとめ
[
もっと見る
]
↑
タグ
Java
Minecraft
ゲーム
プログラミング
情報技術
[
もっと見る
]
↑
人気のページ
人気の5件
FrontPage
(39801)
【Discord】強力なスパム対策ができるボット「Wick」を紹介します。
(1678)
RecentUpdates
(1504)
【Minecraft】 FabricとForgeどっちがいいのだろうか?
(769)
無料のWikiソフトウェアを比較してみる
(374)
↑
カウンター
合計:
0
今日:
0
昨日:
0
オンライン:
3
トップ
ヘルプ
PukiWiki
Laravel12の開発環境をDockerで構築する をテンプレートにして作成
開始行:
* Laravel12の開発環境をDockerで構築する [#aaf8f099]
#splitbody{{
LEFT:
&tag(情報技術,PHP,Web,プログラミング,Docker,Laravel);
#split
RIGHT:&size(13){投稿日: 2025-03-13 (木)};
}}
#ref(https://i.imgur.com/AjObGy2.png)
&br;
#bcontents
** はじめに [#l70eb326]
いきなりですが、ファイルやらディレクトリを記載しておきま...
*** 作成する環境 [#bda520b3]
- Nginx (Alpine Linux): latest
- MySQL: latest
- PHP: v8.3 (FPM)
- phpMyAdmin: latest
- Composer: latest
- Nodejs: v20.9.0
- Laravel
- VITE
*** 現時点での私環境 [#sbb69443]
- OS: Windows 11 23H2
- Docker: 27.5.1, build 9f9e405
- PHP: 8.3.17
- MySQL: 9.2.0
- Composer: 2.8.6
- Laravel: v12.1.1
- VITE: v6.2.1
- npm: 10.1.0
- Node.js: v20.9.0
- phpMyAdmin: 5.2.2
** ファイル構造 [#hc98fc09]
- compose.yaml
- .env (任意)
- src/
- app/
- db/
- docker/
- php/
- Dockerfile
- php.ini
- nginx/
- Dockerfile
- default.conf
- .dockerignore (任意)
** compose.yaml [#h9fb4d08]
すでにポートが埋まっていて各ポートを変更したい方はportsの...
ホスト側:コンテナ側 です。左側のホスト側のポートだけ変更...
ちなみにdocker-compose.ymlじゃないの?って思う方いらっし...
- compose.yaml
#gcode(yml){{
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の部分は削除するといいでしょう。
*** 各ポート番号の割り当て先 [#la89e784]
上記のcompose.yamlのポート割当先は以下の通りです
- 80 にWebサーバー (Nginx)
- 5173 にVite用の開発サーバー (dockerイメージはphpだが、...
- 3306 にデータベース (MySQL)
- 81 にDBツール (phpMyAdmin)
となっている。
** docker/nginx/Dockerfile, default.conf [#k7a8f431]
compose.yamlの build: ./docker/nginx で指定したディレクト...
Alpine Linux上のNginxイメージを使います。
- docker/nginx/Dockerfile
#gcode{{
FROM nginx:stable-alpine
COPY default.conf /etc/nginx/conf.d/default.conf
}}
Nginx用の仮想ホスト設定ファイルです。
(開発環境用なので本番環境ではもっとセキュリティを考慮して...
- docker/nginx/default.conf
#gcode(){{
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-re...
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, O...
add_header Access-Control-Allow-Headers "Authorizatio...
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_fou...
location = /robots.txt { access_log off; log_not_fou...
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fast...
include fastcgi_params;
}
# アクセス制限
location ~ /\.(?!well-known).* {
deny all;
}
}
}}
** docker/php/Dockerfile, php.ini [#dd16c21b]
PHP 8.3 FPM版を使います
FPMはNginx上で動かすことができ、そして普通のCGI版よりも速...
- docker/php/Dockerfile
#gcode{{
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,...
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 | b...
&& apt-get install -y nodejs
# Composer のインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/install...
# nvm のインストール
ENV NODE_VERSION=20.9.0
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm...
&& bash -c ". /root/.nvm/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm use ${NODE_VERSION} && nvm alias default ${NOD...
ENV NVM_DIR=/root/.nvm
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:...
# バージョン確認
RUN php --version && node --version && npm --version && c...
# コンテナ内の作業ディレクトリを指定 (デフォルトのカレン...
WORKDIR /var/www/html
}}
PHPの設定ファイルです
- docker/php/php.ini
#gcode(ini){{
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
zend.multibyte = On
zend.script_encoding = UTF-8
mbstring.language = "Japanese"
}}
** .env [#d4b3a438]
環境変数です。
compose.yaml にて${DB_NAME:-laravel}と指定されている箇所...
- .env
#gcode(env){{
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_NAME=laravel
DB_USER=user
DB_PASS=password
}}
本番環境でなければこのままで問題ないです
ちなみに変更するのであれば間違ってGitでコミットしないよう...
** .dockerignore [#ob581569]
ビルドに必要ないファイルを指定できます。いわゆる.gitignor...
- .dockerignore
#gcode(txt){{
.env
.git
.gitignore
}}
** src/app, src/db [#n235720b]
- src/
- app/
- db/
上記のようなフォルダ構造になるようにディレクトリを作成し...
app が作業フォルダとなります。
ほとんどはvar/www/htmlそのままだと思います。一部だけ最適...
dbはMySQLのデータが入るフォルダです。
シンボリックリンクが対応していないドライブ上でMySQLをバイ...
[[DockerのMySQLが起動しない問題、exFATのせいだった]] でこ...
** セットアップ [#hb48be49]
ファイルの配置が終わったら以下のコマンドを実行しましょう...
docker compose up -d
ビルドは初回のみなのでDockerfileなどに変更を加えた場合、...
起動できたら
docker compose exec app bash
でシェルに入りましょう。
*** Laravelのインストール [#ab81df2d]
docker/php/Dockerfile でデフォルトのカレントディレクトリ...
コンテナ内のシェルで以下を実行します。
export COMPOSER_PROCESS_TIMEOUT=1200
composer create-project laravel/laravel .
chmod -R 777 /var/www/html/storage /var/www/html/bootstr...
COMPOSER_PROCESS_TIMEOUTはPHPのComposerで1200秒まで1つの...
デフォルトでは300秒となっており、それでは短すぎてスペック...
*** 閉じるには [#fe1df945]
docker compose down
です。
** おまけ [#i3f67cc7]
ついでのメモみたいな感じです。
*** Laravel Breeze [#h03cef9b]
LaravelのBreezeパッケージをインストールし、それを使ってRe...
2番のコマンドによってReactの他にInertia.jsやLaravel Sail...
composer require laravel/breeze --dev
php artisan breeze:install react
*** Chakra UI [#u7a54879]
npm install @chakra-ui/react @emotion/react @emotion/sty...
*** .gitignore [#j8d71329]
.env
src/*
** エラー [#a97a5153]
*** Error response from daemon: error while creating moun...
これはsrc/app、src/dbのフォルダを作り忘れていると思います。
*** [Server] Could not set file permission for private_ke...
dbのマウント先フォルダの権限の設定がミスっていると思われ...
もしくはファイルシステムがシンボリックリンクをサポートし...
** コメント [#e1eae827]
#pctrlcmt
&size(10){キーワード: 情報技術, Docker, コンテナ, プログ...
終了行:
* Laravel12の開発環境をDockerで構築する [#aaf8f099]
#splitbody{{
LEFT:
&tag(情報技術,PHP,Web,プログラミング,Docker,Laravel);
#split
RIGHT:&size(13){投稿日: 2025-03-13 (木)};
}}
#ref(https://i.imgur.com/AjObGy2.png)
&br;
#bcontents
** はじめに [#l70eb326]
いきなりですが、ファイルやらディレクトリを記載しておきま...
*** 作成する環境 [#bda520b3]
- Nginx (Alpine Linux): latest
- MySQL: latest
- PHP: v8.3 (FPM)
- phpMyAdmin: latest
- Composer: latest
- Nodejs: v20.9.0
- Laravel
- VITE
*** 現時点での私環境 [#sbb69443]
- OS: Windows 11 23H2
- Docker: 27.5.1, build 9f9e405
- PHP: 8.3.17
- MySQL: 9.2.0
- Composer: 2.8.6
- Laravel: v12.1.1
- VITE: v6.2.1
- npm: 10.1.0
- Node.js: v20.9.0
- phpMyAdmin: 5.2.2
** ファイル構造 [#hc98fc09]
- compose.yaml
- .env (任意)
- src/
- app/
- db/
- docker/
- php/
- Dockerfile
- php.ini
- nginx/
- Dockerfile
- default.conf
- .dockerignore (任意)
** compose.yaml [#h9fb4d08]
すでにポートが埋まっていて各ポートを変更したい方はportsの...
ホスト側:コンテナ側 です。左側のホスト側のポートだけ変更...
ちなみにdocker-compose.ymlじゃないの?って思う方いらっし...
- compose.yaml
#gcode(yml){{
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の部分は削除するといいでしょう。
*** 各ポート番号の割り当て先 [#la89e784]
上記のcompose.yamlのポート割当先は以下の通りです
- 80 にWebサーバー (Nginx)
- 5173 にVite用の開発サーバー (dockerイメージはphpだが、...
- 3306 にデータベース (MySQL)
- 81 にDBツール (phpMyAdmin)
となっている。
** docker/nginx/Dockerfile, default.conf [#k7a8f431]
compose.yamlの build: ./docker/nginx で指定したディレクト...
Alpine Linux上のNginxイメージを使います。
- docker/nginx/Dockerfile
#gcode{{
FROM nginx:stable-alpine
COPY default.conf /etc/nginx/conf.d/default.conf
}}
Nginx用の仮想ホスト設定ファイルです。
(開発環境用なので本番環境ではもっとセキュリティを考慮して...
- docker/nginx/default.conf
#gcode(){{
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-re...
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, O...
add_header Access-Control-Allow-Headers "Authorizatio...
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_fou...
location = /robots.txt { access_log off; log_not_fou...
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fast...
include fastcgi_params;
}
# アクセス制限
location ~ /\.(?!well-known).* {
deny all;
}
}
}}
** docker/php/Dockerfile, php.ini [#dd16c21b]
PHP 8.3 FPM版を使います
FPMはNginx上で動かすことができ、そして普通のCGI版よりも速...
- docker/php/Dockerfile
#gcode{{
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,...
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 | b...
&& apt-get install -y nodejs
# Composer のインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/install...
# nvm のインストール
ENV NODE_VERSION=20.9.0
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm...
&& bash -c ". /root/.nvm/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm use ${NODE_VERSION} && nvm alias default ${NOD...
ENV NVM_DIR=/root/.nvm
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:...
# バージョン確認
RUN php --version && node --version && npm --version && c...
# コンテナ内の作業ディレクトリを指定 (デフォルトのカレン...
WORKDIR /var/www/html
}}
PHPの設定ファイルです
- docker/php/php.ini
#gcode(ini){{
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
zend.multibyte = On
zend.script_encoding = UTF-8
mbstring.language = "Japanese"
}}
** .env [#d4b3a438]
環境変数です。
compose.yaml にて${DB_NAME:-laravel}と指定されている箇所...
- .env
#gcode(env){{
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_NAME=laravel
DB_USER=user
DB_PASS=password
}}
本番環境でなければこのままで問題ないです
ちなみに変更するのであれば間違ってGitでコミットしないよう...
** .dockerignore [#ob581569]
ビルドに必要ないファイルを指定できます。いわゆる.gitignor...
- .dockerignore
#gcode(txt){{
.env
.git
.gitignore
}}
** src/app, src/db [#n235720b]
- src/
- app/
- db/
上記のようなフォルダ構造になるようにディレクトリを作成し...
app が作業フォルダとなります。
ほとんどはvar/www/htmlそのままだと思います。一部だけ最適...
dbはMySQLのデータが入るフォルダです。
シンボリックリンクが対応していないドライブ上でMySQLをバイ...
[[DockerのMySQLが起動しない問題、exFATのせいだった]] でこ...
** セットアップ [#hb48be49]
ファイルの配置が終わったら以下のコマンドを実行しましょう...
docker compose up -d
ビルドは初回のみなのでDockerfileなどに変更を加えた場合、...
起動できたら
docker compose exec app bash
でシェルに入りましょう。
*** Laravelのインストール [#ab81df2d]
docker/php/Dockerfile でデフォルトのカレントディレクトリ...
コンテナ内のシェルで以下を実行します。
export COMPOSER_PROCESS_TIMEOUT=1200
composer create-project laravel/laravel .
chmod -R 777 /var/www/html/storage /var/www/html/bootstr...
COMPOSER_PROCESS_TIMEOUTはPHPのComposerで1200秒まで1つの...
デフォルトでは300秒となっており、それでは短すぎてスペック...
*** 閉じるには [#fe1df945]
docker compose down
です。
** おまけ [#i3f67cc7]
ついでのメモみたいな感じです。
*** Laravel Breeze [#h03cef9b]
LaravelのBreezeパッケージをインストールし、それを使ってRe...
2番のコマンドによってReactの他にInertia.jsやLaravel Sail...
composer require laravel/breeze --dev
php artisan breeze:install react
*** Chakra UI [#u7a54879]
npm install @chakra-ui/react @emotion/react @emotion/sty...
*** .gitignore [#j8d71329]
.env
src/*
** エラー [#a97a5153]
*** Error response from daemon: error while creating moun...
これはsrc/app、src/dbのフォルダを作り忘れていると思います。
*** [Server] Could not set file permission for private_ke...
dbのマウント先フォルダの権限の設定がミスっていると思われ...
もしくはファイルシステムがシンボリックリンクをサポートし...
** コメント [#e1eae827]
#pctrlcmt
&size(10){キーワード: 情報技術, Docker, コンテナ, プログ...
ページ名:
検索
AND検索
OR検索
↑
プロフィール
Pitan
プログラミングや音MADやらが趣味
↑
最新のページ
最新の5件
2025-03-28
ActionsからPackagesへPublishしようとしてもForbiddenとかUnauthorizedで失敗する
2025-03-20
ユーザー単位での共通の gradle.properties
2025-03-18
GitHub Pagesの解除方法
今使っているものについてまとめる2025
2025-03-13
MMDのプラグインまとめ
[
もっと見る
]
↑
タグ
Java
Minecraft
ゲーム
プログラミング
情報技術
[
もっと見る
]
↑
人気のページ
人気の5件
FrontPage
(39801)
【Discord】強力なスパム対策ができるボット「Wick」を紹介します。
(1678)
RecentUpdates
(1504)
【Minecraft】 FabricとForgeどっちがいいのだろうか?
(769)
無料のWikiソフトウェアを比較してみる
(374)
↑
カウンター
合計:
0
今日:
0
昨日:
0
オンライン:
3