はじめに
今回自分自身の学習のためにDockerを使用したlaravelの環境構築を行ったので、備忘録を残しておきます。他の方の記事を読んでいた際に「コマンドは記載されているがどこに入力すればいいんだ?」などの悩みが多くあったので、その辺りも細かく記載していこうと思います。
※初心者の記事になりますので、間違い等ありましたらコメントにて教えていただけますと幸いです。
前提条件
- Docker Desktopがインストールされていること
Docker Desktopのインストール方法は下記の記事を参考にしてください。
- Dockerの基礎知識がある程度あること
私は下記の記事を見て勉強を行いました。動画に時間は長いですが非常に分かりやすくDockerについて理解することができます。
ディレクトリ構造の概要
ディレクトリは下記作業で作成していくのでこの段階で作成しておく必要はありません。
php-app-test/
│
├── docker-config/
│ ├── nginx/
│ │ ├── default.conf
| | └── Dockerfile
│ └── php/
│ ├── Dockerfile
│ └── php.ini
├── .env
├── docker-compose.yml
├── README.md
└── my-app/
│
...(laravelの要素が入る)
環境構築の手順
1.プロジェクトディレクトリの作成
本記事ではルートディレクトリ配下にworkspaceというディレクトリを作成し構築を行っていきます。
1.ターミナルで以下を実行し任意のディレクトリへ移動する。
mkdir workspace
2.新しいプロジェクト用のディレクトリを作成する。
mkdir php-app-test
cd php-app-test
3.docker-configディレクトリを作成する。
mkdir docker-config
cd docker-config
nginxコンテナの作成
1.nginxディレクトリを作成する。
mkdir nginx
cd nginx
2.Dockerfileをnginxディレクトリ配下に作成する。
touch Dockerfile
3.VScodeでphp-app-testファイルを開きます。
4.作成したDockerfileに以下の通りに記述する。
FROM alpine:3.6
RUN apk update && \
apk add --no-cache nginx
RUN mkdir -p /run/nginx
CMD nginx -g "daemon off;"
5.nginx配下にdefault.confを作成する。
touch default.conf
6.作成したdefault.confに以下の通りに記述する。
server {
listen 80;
server_name localhost;
root /var/www/public;
index index.php index.html;
allow all;
client_max_body_size 10000M;
access_log /var/log/nginx/ssl-access.log;
error_log /var/log/nginx/ssl-error.log;
location / {
root /var/www/public;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass web:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
add_header Access-Control-Allow-Credentials true;
}
}
phpコンテナの作成
1.phpディレクトリをdocker-config配下に作成する。
mkdir php
cd php
2.phpディレクトリにDockerfileを作成する。
touch Dockerfile
3.作成したDockerfileに以下の通りに記述する。
FROM php:8.1-fpm
WORKDIR /var/www
ADD . /var/www
RUN chown -R www-data:www-data /var/www
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
gcc \
make \
git \
unzip \
vim \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libmcrypt-dev \
libpq-dev \
curl \
gnupg \
openssl \
&& docker-php-ext-install pdo_mysql mysqli \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
COPY php.ini /usr/local/etc/php/
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get update \
&& apt-get install -y nodejs \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g n \
&& n stable \
&& npm update -g npm
4.phpディレクトリ配下にphp.iniを作成する。
touch php.ini
5.作成したphp.iniに以下の通りに記述する。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.language = "Japanese"
post_max_size = 500M
upload_max_filesize=500M
[xdebug]
.envファイルの作成
1.php-app-test配下に.envファイルを作成する。
touch .env
2.作成した.envファイルに下記の通りに記述する。
MYSQL_DATABASE=development
MYSQL_ROOT_PASSWORD=root
MYSQL_USER=mysql
MYSQL_PASSWORD=mysql
TZ=Asia/Tokyo
docker-compose.ymlの作成
1.php-app-test配下にdocker-compose.ymlを作成する。
touch docker-compose.yml
2.作成したdocker-compose.ymlに下記の通り記述する。
services:
web:
container_name: myapp-php
build: ./docker-config/php
ports:
- '5173:5173'
volumes:
- .:/var/www/
depends_on:
- mariadb
nginx:
container_name: myapp-nginx
image: nginx
build: ./docker-config/nginx
ports:
- "81:80"
volumes:
- .:/var/www/
- ./docker-config/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
mariadb:
container_name: myapp-mariadb
image: mariadb
ports:
- 3307:3306
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
TZ: ${TZ}
volumes:
- ./docker-config/mariadb/data:/var/lib/mysql
- ./docker-config/mariadb/data/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker-config/mariadb/data/sql:/docker-entrypoint-initdb.d
laravelのインストール
1.以下を実行し、作成したコンテナを起動する。
docker compose up -d
2.以下を実行し、phpコンテナに入る。
docker exec -it myapp-app bash
実行後/var/www# のように表示されれば問題ないです。
3.以下を実行し、laravelをインストールする。
composer create-project --prefer-dist laravel/laravel my-app
インストール完了後
VScodeを確認していただき、php-app-test配下にmy-appディレクトリが作成されていることを確認してください。
4.my-appディレクトリの中に下記のようなディレクトリ構造が入っていればインストール完了です。
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
└── ...
5.以下を実行しコンテナから抜ける。
exit
6.docker-compose.yml内の、myapp-phpとmyapp-nginxのvolumesを以下の通り書き換える。
- - .:/var/www/
+ - ./my-app:/var/www/
7.以下を実行し、イメージとコンテナを再度作成する。
docker compose up -d
ブラウザで確認する
1.ブラウザでhttp://localhost:81/ と検索し画像のように表示されることを確認する。
右上に「Log in Register」と表示されていなくても問題ありません。
以上でLaravelの環境構築は完了です。
お疲れ様でした。
最後に
今後DBへの接続や認証機能の追加など記事を書いていこうと思っていますのでよろしくお願いいたします。
今回参考にさせていただいた記事