0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel + Dockerで環境構築

Posted at

【書いた理由】

 Lravelの環境構築でいつもつまづいていたので、とにかくサクッとできたやつをメモとして書いておきたかった。私の書いたのは、参考URLのほとんどコピペになります。
 参考にしたURL貼ってあるので詳しく知りたい方はそちらを参考にしてください。一部違う箇所は、phpmyadminを使いたかったのでそちらの設定をこっそり入れています。

参考URL
https://zenn.dev/kafeine/articles/d3d60d983555d5

【記事の目次】

  • dockerのインストール
  • ディレクトリとファイルの構図
  • ディレクトリとファイルの作成
  • ファイル内の記入
  • 環境を接続する
  • documentrootを変更
  • Lravelを導入する
  • apacheのドキュメントルートを変更とリライトを有効にする
  • artisan migrateできるようにする
  • Mysqlをターミナルで確認する
  • 完了

【ローカル環境に構築していきます】


ちょっと長いですが頑張りましょう。^^;

01 : dockerのインストール

下記からdockerをインストールしてください
※M1=>download for mac --apple chip でインストール

02 : ディレクトリとファイルの構図

最終的にはこのような構図になります。

  xxx_folder_name *
	  ├── docker-compose.yml
	  │
      ├── apache
	  │    └── sites-available
	  |         └── 000-default.conf
      |         └── Default-ssl.conf
      │
      ├── env
	  │    └── .env.mysql
	  │
      ├── php
	  │    └── Dockerfile
   	  │
      └── src
		   └── index.php
           └── xxx_project
                                └── laravelのファイルとディレクトリ
                                └── .env

※記号の説明
「*」 任意の記入 

03 : ディレクトリの作成

ターミナルでひたすらディレクトリとファイルの作成
数字の手順通りに行ってください。

ターミナル
// 1 : 作成する場所に移動
$ cd workspace *

// 2 : ディレクトリを作成
$ mkdir xxx_project_name *

// 3 : ディレクトリを移動
$ cd xxx_project_name *

// 4 : ディレクトリを作成
$ mkdir apache
$ mkdir env
$ mkdir php
$ mkdir src

// 5 : ファイルを作成
$ touch docker-compose.yml 
$ touch env/.env.mysql
$ touch php/Dockerfile
$ touch src/index.php 

※記号の説明
「$」 これは記入しない
「//」  この行は記入しない、ただのコメント
「*」 任意の記入 

04 : ファイル内の記入

docker-compose.yml に関してはインデントがずれているとエラーになるので注意してください。

./docker-compose.yml
version: "3.9"
services:
  web:
    build: 
      context: .
      dockerfile: ./php/Dockerfile
    container_name: xxx_project_web *
    volumes:
      - ./src:/var/www/html
    ports:
      - 8080:80
    env_file: env/.env.mysql

  db:
    platform: linux/x86_64
    image: mysql:8.0.26
    container_name: xxx_project_db *
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: xxx_project_db *
      MYSQL_USER: xxx_user *
      MYSQL_PASSWORD: xxx_password *
      MYSQL_ROOT_PASSWORD: xxx_password *
    volumes:
      - db-data:/var/lib/mysql

  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8180:80
    restart: always
    environment:
      PMA_USER: xxx_password *
      PMA_PASSWORD: xxx_password *

volumes:
  db-data:

※こちらの設定を変えた場合は、一度コンテナを作り直す必要があるので下記コマンドを実行してくだい
$ docker container prune -f

また、このファイルの設定についてこちらを参考にすると良さそう!



php/Dockerfile は、一部PHPのバージョンを記入してください。
確認方法は下記URLを参考にしてくだい。

./php/Dockerfile
FROM php:8.1.5-apache //8.1.5はお使いのPHPのバージョンになります。確認方法は上記のURL
	
RUN rm /etc/apt/preferences.d/no-debian-php
	
# Install git
RUN apt-get update && \
	apt-get upgrade -y && \
	apt-get install -y git net-tools vim \
	zip unzip libzip-dev && \
	apt-get clean
	
# Set apache mod_rewrite
RUN a2enmod rewrite
	
# Install php extension
RUN docker-php-ext-install mysqli pdo pdo_mysql zip
	
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
	
# Install NPM & node
RUN curl -sl https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs build-essential


.env/.env.mysqlファイルについては、docker-compose.ymlの17~21行目と同じ記入してください

./env/.env.mysql
MYSQL_HOST=db
MYSQL_DATABASE=xxx_project_db *
MYSQL_USER=xxx_user *
MYSQL_PASSWORD=xxx_password *
MYSQL_ROOT_PASSWORD=xxx_password *


ここはコピペでOK

./src/index.php
<?php
	
  echo 'Docker Local';
	
  $dsn = 'mysql:host='.$_ENV['MYSQL_HOST']
    .';dbname='.$_ENV['MYSQL_DATABASE'];
	
  $dbh = new PDO($dsn, $_ENV['MYSQL_USER'], $_ENV['MYSQL_PASSWORD']);
	
  foreach($dbh->query('SHOW databases') as $row) {
    echo '<pre>';
	print_r($row);
	echo '</pre>';
  }
	
  phpinfo();

?>

※記号の説明
「//」  この行は記入しない、ただのコメント
「*」 任意の記入 

05 : 環境を接続する

ここは、下記を実行するだけ
うまくいかなかなかったら、MYSQL_HOST: db こういったところの記述が間違っていること多いです。

ターミナル
$ docker-compose up -d

// 下のようなのが表示されたら完了
Starting xxx_project_db ・・・done
Starting xxx_project_web ・・・done
Starting xxx_project_phpmyadmin_1 ・・・done

localhost:8080に接続して、エラーとか出てないか確認ください。
エラー表示されていたら、他にもdocker-compose buildを試した後でdocker-compose up -d で直ることもある

※記号の説明
「//」  この行は記入しない、ただのコメント

06 : documentrootを変更

下記を入力

ターミナル
docker cp xxx_project_web:/etc/apache2/sites-available/ ./apache/sites-available/

 

07 : Lravelを導入する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2260961/648d9854-f92f-2a6b-f6b7-db735450e9b0.png) docker exec -it sample_web bash <=ターミナルで記入 root@7e0fs9402a24:/var/www/html# <=こんな表記に切り替わる
Laravelを導入する
composer create-project laravel/laravel xxxproject
Application key set successfully. <=これが出たら完了

※sampleの箇所がディレクトリの名前になる

 ここの処理が必要

docker-compose.yml

version: "3.9"
services:
  web:
    build: 
      context: .
      dockerfile: ./php/Dockerfile
    container_name: xxx_project_web <=【これ追加】
    volumes:
      - ./src:/var/www/html
      - ./apache/sites-available:/etc/apache2/sites-available  <=【これ必要】 
    ports:
      - 8080:80
    env_file: env/.env.mysql
08 : apacheのドキュメントルートを変更とリライトを有効にする

次はこのlocalhost:8080にアクセスしたら、Laravelのwelcomeページになるようします。

apache/sites-available/000-default.confのDocumentRootを変更する

000-default.conf
<VirtualHost *:80> 
	~~~ 略 ~~~ 
	ServerAdmin webmaster@localhost 
	DocumentRoot /var/www/html/xxxproject/public

リスタートしないと表示しないので注意

Docker-compose up -d

Laravelのホーム画面が出たらOK

09 : artisan migrate できるようにする

image.png
root@7e0fs9402a24:/var/www/html/xxxproject# php artisan migrate <=実行

image.png
下記のようなエラーが出るらしい
Illuminate\Database\QueryException SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')

src/sample-docker/.env
上記のファイルにmysqlの設定をする
DB_CONNECTION=mysql
DB_HOST=db 
DB_PORT=3306 
DB_DATABASE=local_db 
DB_USERNAME=local_user 
DB_PASSWORD=local_password

キャッシュをクリアする
root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan cache:clear
Application cache cleared!

root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan  config:clear
Configuration cache cleared!

再度migrateをするとできるらしい
root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan migrate
10 : Mysqlをターミナルで確認する

image.png
・dbコンテナのチェック
kafeine@Bean-Mac web_tutorial % docker exec -it sample_db bash
root@376e3b3ad241:/#
※ここでエラーが出ていた
tarting match-app-db ... Done <=名前をよく見よう!! Match-app-dbまでが名前!
Starting match_web ... done

・既にMysqlが入っているので下記を入力してパスワードを記入
root@376e3b3ad241:/# mysql -u sample_user -h db -p

・下記を入力したら先ほどのmigrateしたテーブルがあるはず
mysql> use sample_db

・下記でデータベースを見る
SHOW databases; 
・下記でデータのテーブルを見る
SHOW tables; 
11 : 完了

使ってみてください

ファイル名


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?