【Laravel】DockerでLaravel+nginx+MySQLの環境を構築してみる
~簡単な自己紹介~
- 嫁と猫3匹と暮らすフルリモートの三十路SE
- 投資・節約・副業で資産形成中
- 現在の金融資産は約1,750万円、めざせアッパーマス層(資産3,000万円)
業務でDockerを使ってLaravel+nginx+MySQLの環境を作ることがあったので、そのときの作業メモ&手順をまとめました。
基本的に下記のQiitaの記事を参考にしています。
【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン – Qiita
当記事はLaravelが動く環境を作ることが目的の記事になります。
そのため、Dockerファイルやiniファイル、YAMLファイルなどの設定値の解説は省略し、手順の一部簡略化を行っています。
目次
開発環境
- OS:Windows11
- Docker Desktopインストール済み
- VSCodeインストール済み
事前準備
プロジェクトのフォルダを作る
任意の場所に「laravel」フォルダを作ります。
CUIを開く
プロジェクトフォルダをShiftを押しながら右クリックをして、フォルダをターミナルで開きます。
私はWindows標準のターミナルを使っていますが、CUIであればなんでも大丈夫です。
プロジェクトフォルダをVSCodeで開く
下記のコマンドを実行し、プロジェクトフォルダをVSCodeで開く。
code .
VSCode上にターミナルを表示する
メニューの表示からターミナルを表示します。
Ctrl + @がショートカットキーになるので覚えておくと便利です。
アプリケーションの定義ファイル(YAML)を作成する
下記のコマンドを実行し、YAMLファイルを作成します。
type nul > docker-compose.yml
エラーメッセージが表示されますが、YAMLファイルが作成されていれば問題ありません。
下記の内容でYAMLファイルを編集します。
version: "3.9"
services:
app:
build: ./infra/php
volumes:
- ./src:/data
web:
image: nginx:1.20-alpine
ports:
- 8080:80
volumes:
- ./src:/data
- ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf
working_dir: /data
db:
build: ./infra/mysql
volumes:
- db-store:/var/lib/mysql
ports:
- "3306:3306"
volumes:
db-store:
アプリケーションコンテナ(PHP)を作成する
phpフォルダを作成する
下記のコマンドを実行し、phpフォルダを作成する。
mkdir -p infra/php
Dockerファイルを作成する
下記のコマンドを実行し、Dockerファイルを作成します。
type nul > infra/php/Dockerfile
エラーメッセージが表示されますが、Dockerファイルが作成されていれば問題ありません。
下記の内容でDockerファイルを編集します。
FROM php:8.1-fpm-buster
ENV COMPOSER_ALLOW_SUPERUSER=1 \
COMPOSER_HOME=/composer
COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer
RUN apt-get update && \
apt-get -y install --no-install-recommends git unzip libzip-dev libicu-dev libonig-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
docker-php-ext-install intl pdo_mysql zip bcmath
COPY ./php.ini /usr/local/etc/php/php.ini
WORKDIR /data
INIファイルを作成する
下記のコマンドを実行し、INIファイルを作成します。
type nul > infra/php/php.ini
エラーメッセージが表示されますが、INIファイルが作成されていれば問題ありません。
下記の内容でINIファイルを編集します。
zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /dev/stderr
default_charset = UTF-8
[Date]
date.timezone = Asia/Tokyo
[mysqlnd]
mysqlnd.collect_memory_statistics = on
[Assertion]
zend.assertions = 1
[mbstring]
mbstring.language = Japanese
srcフォルダを作成する
下記のコマンドを実行して、srcフォルダを作成します。
mkdir src
Webコンテナ(nginx)を作成する
nginxフォルダを作成する
下記のコマンドを実行し、nginxフォルダを作成します。
mkdir infra/nginx
confファイルを作成する
下記のコマンドを実行して、confファイルを作成します。
type nul > infra/nginx/default.conf
エラーメッセージが表示されますが、confファイルが作成されていれば問題ありません。
下記の内容でconfファイルを編集します。
server {
listen 80;
server_name example.com;
root /data/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
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 app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
DBコンテナ(MySQL)を作成する
mysqlフォルダを作成する
下記のコマンドを実行して、mysqlフォルダを作成します。
mkdir infra/mysql
Dockerファイルを作成する
下記のコマンドを実行して、Dockerファイルを作成します。
type nul > infra/mysql/Dockerfile
エラーメッセージが表示されますが、Dockerファイルが作成されていれば問題ありません。
下記の内容でDockerファイルを編集します。
FROM mysql/mysql-server:8.0
ENV MYSQL_DATABASE=laravel \
MYSQL_USER=phper \
MYSQL_PASSWORD=secret \
MYSQL_ROOT_PASSWORD=secret \
TZ=Asia/Tokyo
COPY ./my.cnf /etc/my.cnf
RUN chmod 644 /etc/my.cnf
confファイルを作成する
下記のコマンドを実行して、confファイルを作成します。
type nul > infra/mysql/my.cnf
エラーメッセージが表示されますが、confファイルが作成されていれば問題ありません。
下記の内容でconfファイルを編集します。
[mysqld]
# default
skip-host-cache
skip-name-resolve
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
secure-file-priv = /var/lib/mysql-files
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
# character set / collation
character_set_server = utf8mb4
collation_server = utf8mb4_ja_0900_as_cs_ks
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = mysql-general.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
3つのコンテナをビルド・立ち上げ
下記のコマンドを実行して、コンテナをビルド・立ち上げます。
docker compose up -d --build
下記の3つのコンテナがStartedになっていればOKです。
- db
- app
- web
Dockerの画面で3つのコンテナがRunningになっていればOKです。
Laravelをインストールする
appコンテナに入る
下記のコマンドを実行して、appコンテナに入る。
docker compose exec app bash
Laravelをインストールする
下記のコマンドを実行して、Laravelをインストールします。
composer create-project --prefer-dist "laravel/laravel=9.*" .
最後にsuccessfullyが出力されていればOKです。
アクセス権限を変更する
下記のコマンドを実行して、ディレクトリのアクセス権限を変更します。
chmod -R 777 storage bootstrap/cache
appコンテナから出る
下記のコマンドを実行して、appコンテナから出ます。
exit
3つのコンテナを再起動する
3つのコンテナを停止する
下記のコマンドを実行して、3つのコンテナを停止します。
docker compose down
envファイルを編集する
envファイルのDB関連の部分を下記の内容で編集します。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=phper
DB_PASSWORD=secret
3つのコンテナを起動する
下記のコマンドを実行して、3つのコンテナを起動します。
docker compose up -d
下記の3つのコンテナがStartedになっていればOKです。
- db
- app
- web
マイグレーションを実行する
appコンテナに入る
下記のコマンドを実行して、appコンテナに入る。
docker compose exec app bash
マイグレーションを実行する
下記のコマンドでマイグレーションを実行します。
php artisan migrate
エラーなく実行でき、すべてがDONEになっていればOKです。
環境が構築できたか確認する
Laravelのウェルカムページにアクセスする
下記のURLを開きます。
問題なく表示されれば、Laravelとnginxのインストールが無事完了しています。
DBクライアントツールからMySQLに接続する
ここではMySQL Workbenchから接続してみます。
A5M2、DBeaverなど、お好きなDBクライアントツールを使っていただいて大丈夫です。
設定値は下記のとおりです。
項目名 | 設定値 | 備考 |
---|---|---|
Connection Name | Laravel | 自分がわかりやすければなんでもOK |
Hostname | localhost | |
Port | 3306 | 初期値が3306のはずなので、そのままでOK |
Username | phper | MySQLのDockerファイルの値を使う |
Password | secret | MySQLのDockerファイルの値を使う |
Default Schema | laravel |
MySQLへの接続を確認する
設定が完了したら、接続ができるかテストをしてみます。
ポップアップメッセージが「Successfully」であればOKです。
以上になります。
お疲れさまでした。
“【Laravel】DockerでLaravel+nginx+MySQLの環境を構築してみる” に対して7件のコメントがあります。