Dockerを使用したlaravel環境構築
前提
・ Dockerを使用してlaravelの環境構築を行いたい方
・ laravelの標準のログイン、管理画面も使用したい人
・ Dockerはインストール済み
・ 他コマンド実行に必要なものは必要に応じてインストールしてください
構成
laravelソースを格納するのフォルダ(名前は任意でOK)
├── docker-compose.yml
├── docker
│ ├── php
│ │ ├── Dockerfile
│ │ └── php.ini
│ └── nginx
│ └── default.conf
└── src
└── Laravelのプロジェクトファイル
docker-compose.ymlの中身
docker-compose.ymlは複数のコンテナを同時に動かすためのツールである、Docker Composeを利用するために使用するYMLファイルです
version: '3'
services:
php:
build: ./docker/php
volumes:
- ./src:/var/www
nginx:
image: nginx
ports:
- 8000:8000
volumes:
- ./src:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mysqlDataBase(任意のデータベース名)
MYSQL_USER: mysql(任意のデータベースのログインユーザー名)
MYSQL_PASSWORD: mysql(任意のデータベースのログインパスワード)
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
node:
image: node:12.13-alpine
tty: true
volumes:
- ./src:/var/www
working_dir: /var/www
Dockerfileの中身
DockerfileとはDocker上で動作させるコンテナの構成情報を記述するためのファイルです
FROM php:7.4-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
php.iniの中身
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
default.confの中身
default.confはngninxの設定情報を記述するためのファイルです
server {
listen 8000;
index index.php index.html;
root /var/www/Laravelのプロジェクト名/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
環境構築の手順
はじめに任意の場所にlaravelのファイルを格納するフォルダをローカルに作成する
~/ $ mkdir laravelソースを格納するのフォルダ名
docker-compose.ymlファイルを作成して、中身は冒頭で紹介したdocker-compose.ymlの内容をコピペする
~/laravelソースを格納するのフォルダ名 $ touch docker-compose.yml
Dockerfileとphp.iniを作成して、中身は冒頭で紹介したそれぞれのファイルの内容をコピペする
~/laravelソースを格納するのフォルダ名 /docker/php $ touch Dockerfile
~/laravelソースを格納するのフォルダ名 /docker/php $ touch php.ini
defalt.confファイルを作成して、中身は冒頭で紹介したdefault.confの内容をコピペする
~/laravelソースを格納するのフォルダ名/nginx $ touch default.conf
docker-compose.ymlファイルがあるディレクトリ内で下記コマンドを実行してdockerを起動させる
~/laravelソースを格納するのフォルダ名 $ docker-compose up -d
Creating php ... done
Creating db-host ... done
Creating Laravelのプロジェクト名_node ... done
Creating nginx ... done
phpのコンテナ内に入る
~/laravelソースを格納するのフォルダ名 $ docker-compose exec php bash
phpコンテナ内でLaravelプロジェクトを作成する
root@7eb4359bf51c:/var/www# laravel new Laravelプロジェクト名(任意)
Laravelのプロジェクトが入っているか確認する
バージョンが出力されればOKです
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan --version
Laravel Framework 8.27.0
phpコンテナを抜ける
root@7eb4359bf51c:/var/www# exit
これでlaravelソースを格納するのフォルダ名/src内にLaravelのプロジェクトファイルが作成され、
http://localhost/ にアクセスするとlaravelのページが表示されます
MySQLの設定
MySQLコンテナに入る
~/laravelソースを格納するのフォルダ名 $ docker-compose exec db bash
MySQLコンテナ内でMySQLにログイン
root@630fbaf32806:/# mysql -u root -proot
今回のプロジェクトで使用するデータベースを作成する
データベース名はdocker-compose.ymlで指定した、MYSQL_DATABASEで作成します。
これを合わせないとデータベースを使用する際、エラーが発生します。
mysql> mysql> CREATE DATABASE mysqlDataBase(任意のデータベース名);
Query OK, 1 row affected (0.01 sec)
Laravelのプロジェクトファイル内の.envファイルを下記に修正する
DB_CONNECTION=mysql
DB_HOST=db # db(docker-compose.ymlに記載したDBのサービス名)
DB_PORT=3306
DB_DATABASE=mysqlDataBase(任意のデータベース名)
DB_USERNAME=mysql(任意のデータベースのログインユーザー名)
DB_PASSWORD=mysql(任意のデータベースのログインパスワード)
phpコンテナに入る
~/laravelソースを格納するのフォルダ名 $ docker-compose exec php bash
phpコンテナ内でマイグレーションを実行する
root@7eb4359bf51c:/var/www# cd Laravelプロジェクト名(任意)
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.06 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.04 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.02 seconds)
マイグレーションが無事に実行されれば成功です。
nodeコンテナに入る
~/laravelソースを格納するのフォルダ名 $ docker-compose exec node sh
/var/www
これでlaravelの環境構築は完了になります。
会員登録・ログイン機能追加
phpコンテナ内でパッケージのインストール
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# composer require laravel/ui:3.* --dev
バージョンエラーが起きたら3.*の数字を変えて再度実施すればいける。
パッケージがインストールできたら、フロントエンドのスカフォールドをインストールします。
// 基本的なスカフォールドを生成
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui bootstrap
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui vue
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui react
// ログイン/ユーザー登録スカフォールドを生成
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui bootstrap --auth
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui vue --auth
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan ui react --auth
これらはすべてきちんとインストールしてください。
完了後、http://localhost/ にアクセスするとヘッダーにログイン、会員登録のリンクが表示されます。
そこからアクセスすると各ページに飛びます。
デザインが当たってなかったら以下で解決できます。
Node.jsとNPMのインストール状況確認(なければインストールして下さい)
~/laravelソースを格納するのフォルダ名/src $ node -v
~/laravelソースを格納するのフォルダ名/src $ npm -v
Laravelをインストールすると、package.jsonがあり、PHPの代わりにNodeの依存パッケージが定義されている所が異なるので以下のコマンドで、依存パッケージをインストールしてください。
~/laravelソースを格納するのフォルダ名/src $ npm install
Mixの実行
Laravelに含まれるpackage.jsonファイル上のNPMスクリプトの一つをMixの実行で起動してください。
~/laravelソースを格納するのフォルダ名/src $ npm run dev
完了後、再度アクセスするとデザインがあたった状態になります。
管理画面構築
phpコンテナ内で以下実行
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# composer require encore/laravel-admin
次にasset、configファイルを移動させます。
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
最後に下記コマンドを実行することでインストールが完了です。
root@7eb4359bf51c:/var/www/Laravelプロジェクト名(任意)# php artisan admin:install
http://localhost:8000/admin にアクセスすれば管理画面にアクセスできます。
ログイン画面が表示されればOKです!
初期ログイン情報はid,passwordともに「admin」で入れます。
以上で環境構築完了です。
Author And Source
この問題について(Dockerを使用したlaravel環境構築), 我々は、より多くの情報をここで見つけました https://qiita.com/himazin_bivar/items/d62a1ecbda2d5d4da56a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .