BeginnerEngineerBlog
中の人
中の人

勝手にlaravelチュートリアル #2の2

公開: 2021-09-02 22:01
更新: 2023-04-06 15:24
955
php laravel6.x #2の2 docker 環境構築
#2の2ではいよいよ実際に手を動かして環境構築をしていきます。#2の1でインストールしたアプリケーションを使って、laravelのwelcomeページを表示させるところまでやっていこうと思います!少し長くなりますが、頑張りましょう!


こんにちは!

それでは、前回パソコンにインストールしたアプリケーションを使って環境構築をしていきたいと思います!
まだエディタ、dockerをインストールしていない方は、前回の記事を参考にしてみてください。



まずdockerを起動するところからやっていきます!

  1. チュートリアル説明
  2. プログラミングの準備(エディタ、dockerの用意、環境構築)(今ここ)
  3. 認証機能を追加してログイン機能を実装する
  4. ブログのタイトルと記事を登録する
  5. ブログの記事へタグを登録する
  6. ブログの一覧表示、編集機能の実装
  7. ブログの検索機能の実装
  8. ユーザーへの通知機能の実装


※(20211201追記
mac m1では、本記事で紹介する環境構築はできない可能性があることがわかりました。なんだかアーキテクチャが違うからどーたらこーたらという理由みたいです。
m1での環境構築では下記のサイトが参考になりそうです。
うまくいかなかったら別の記事を探して頑張ってみてください。
)


Dockerを起動する


まず、インストールしたdockerのアイコンをクリックしてください。
※すでにdockerが起動済みだったらスキップしてください!

アイコンをクリックすると


こんな感じで起動が始まります。


こうなったら起動済みのはずなので、ひとまずこの画面でたらOKです!
また、起動済みであれば、デスクトップの右上に


このアイコンがコンテナ積み終わった状態で表示されているのもひとつの目安になりますので、このアイコンが表示されていたときは、dockerのアプリをクリックして開かなくても大丈夫です。


アプリケーションディレクトリを作成する


そしたら、実際にlaravelを置くディレクトリを作成しましょう。
どこに作ってもいいですが、macであれば書類の中に作成するのがわかりやすくていいと思います。



私の場合は大体こんな感じでlaravelディレクトリを作成して、そのなかにプロジェクトディレクトリを作成しています
ディレクトリ名はなんでもいいですが、今回はTutorialディレクトリを作成しましたので、みなさんもひとまずこの名前でディレクトリを作成してください。
ちなみにBeginnerEngineerBlogは今皆さんがご覧になっているビギナーエンジニアブログのディレクトリです!
こう見るとディレクトリ一つでこんなアプリが作れるんだなーと何も知らなかった頃を思い出します。
私の感想はどうでもいいですね!

ディレクトリを作成したら、いよいよlaravelを動かす環境を作っていこうと思います!


docker関係のファイルを作成・編集する


まず、vs codeのアプリをクリックして開いてください。



こんな画面表示されたと思います。


そしたら、ファイルをクリック



開くをクリックしましょう。



先ほど作成したTutorialディレクトリを選択して開くをクリック


もし、このようなアラート的なモーダルが表示されたらyesをクリックしてください。
内容は「このフォルダの作成者を信じますか?」的な内容なので、自分で作成したフォルダなのでオッケーでしょう。

そうしましたら、左上のTUTORIALディレクトリにカーソルを持っていくと以下の画像のようにファイルなどのアイコンが表示されるので、ファイルのアイコンをクリックして



docker-compose.yml

というファイルを作成してください。

で、作成したファイルに以下をコピペしてください。
(本記事はあくまでlaravelのチュートリアルとなっていますので、dockerについてはあまり詳しく説明しません。決してdockerについてよくわかってないとか、説明できないとかそういんじゃないです。いや、まぁ、そう、ほんとに。)

version: "3.4"


services:
  app:
    build:
      context: ./docker/php
      args:
        XDEBUG_INSTALL: "${XDEBUG_INSTALL}"
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini
      - .:/var/www/html/
    ports:
      - 8080:80
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7
    volumes:
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/mysql/data:/var/lib/mysql
    command:
      - --sql-mode=NO_ENGINE_SUBSTITUTION
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=${DB_DATABASE}
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASSWORD}


  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    volumes:
      - ./docker/phpmyadmin/sessions:/sessions
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=${DB_USERNAME}
      - PMA_PASSWORD=${DB_PASSWORD}
    ports:
      - 4040:80
    depends_on:
      - mysql


  mailcatcher:
    image: schickling/mailcatcher
    ports:
      - "1080:1080"


  sqldesigner:
    image: denlabo/sqldesigner
    links:
      - mysql
    ports:
      - "3000:80"
    environment:
      - MYSQL_SERVER=mysql
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_DATABASE=${DB_DATABASE}

簡単な説明ですが、appは実際にlaravelを置いて開発をするコンテナになります。
mysqlはデータベース
phpmyadminはsqlクライアント(データベースの中身を確認しやすくしてくれるツール)
mailcatcherはローカル環境でメール送信の送信確認などができるツール
sqldesignerはER図を簡単に確認、作成できるツールとなります。

ここら辺の書き方の情報は、結構web上にアップされているので、気になった方は調べてみてください!

そうしましたら、次に


ディレクトリのアイコンをクリックして、

docker

という名前でディレクトリを作成してください。

で、そのディレクトリの中に

php

というディレクトリを作成し、そのディレクトリ内に

Dockerfile

というファイルを作成してください。で、以下をコピペしてください。

FROM php:7.3-apache-stretch AS base


RUN apt-get update && \
    apt-get install -y sudo libzip-dev zlib1g-dev vim nano graphviz libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev && \
    docker-php-ext-install mysqli pdo_mysql zip && \
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
    docker-php-ext-install -j$(nproc) gd exif && \
    a2enmod rewrite


RUN curl -sS https://getcomposer.org/installer \
    |  php -- \
        --filename=composer \
        --install-dir=/usr/local/bin \
    && chown www-data /var/www \
    && chmod g+s /var/www/html


RUN curl -SL https://deb.nodesource.com/setup_14.x | bash
RUN apt-get install -y nodejs && \
  npm install -g npm@latest && \
  npm install -g @vue/cli


ARG XDEBUG_INSTALL
ARG BOOL=true


RUN if [ ${XDEBUG_INSTALL} = ${BOOL} ]; then \
    pecl install xdebug \
      && docker-php-ext-enable xdebug; \
    fi

COPY ./php.ini /usr/local/etc/php/conf.d/php.ini
CMD ["apache2-foreground"]

こちらも簡単な説明ですが、appコンテナにインストールするパッケージや、環境構築に必要な処理が記述されています。

ベースイメージとして
php:7.3-apache-stretch
というイメージを利用します。

apacheとはwebサーバーを構築するためのソフトウェアです。つまり、これからwebサーバーを構築するということですね!今はふーんと思ってくれていればオッケーです!


ちなみに
ARG XDEBUG_INSTALL
ARG BOOL=true


RUN if [ ${XDEBUG_INSTALL} = ${BOOL} ]; then \
  pecl install xdebug \
   && docker-php-ext-enable xdebug; \
  fi

これはデバッグのツールをインストールする記述ですが、if文で環境変数で分岐できるようになっています。
if文とは、「もし~~がtrue(真)なら、この処理をします。」的な処理のことです。

なぜ分岐させているかというと、仕事でxdebug(デバッグツール)をインストールすると処理がめちゃ遅くなってしまう方がいたので、その名残でそのまま記述しています。
Dockerfile内でも条件分岐できるということを紹介したくて説明しました!(でも推奨はされてないみたいです!あとよくわかんなくてオッケーです!)


さぁどんどんいきます。

そしたら、phpディレクトリ内に

php.ini

というファイルを作成してください。で、以下をコピペ

[xdebug]
xdebug.start_with_request=yes
xdebug.remote_cookie_expire_time=3600
xdebug.log=/tmp/xdebug.log
xdebug.discover_client_host=0
xdebug.client_host=host.docker.internal
xdebug.client_port=9000
xdebug.mode=debug

これはphpの設定です。ベースのphp.iniに該当の箇所を上書きや追記ができます。
(ちなみにですが、このphp.iniに記載するxdebugの設定は、xdebugのバージョンが3.xの場合を想定しています。この記事を参考に環境構築する際は、その時にインストールされるxdebugのバージョンをよく確認してください。今はよくわかんなくて大丈夫です!)


次に、dockerディレクトリに移動して、

mysql

というディレクトリを作成してください。で、そのディレクトリの中に

my.cnf

というファイルを作成、で、コピペ

[sql_mode]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

これはmysqlの設定になります。データベースに入ってきた値を見てエラーを出したり許容したりする設定です。
(2021/10/12追記: もしかしたら反映されてないかも。。まぁ気にせずいきましょう!)


そうしましたら、Tutorialディレクトリに戻って、

.env

というファイルを作成して、コピペしてください。

DB_DATABASE=laravel
DB_USERNAME=user
DB_PASSWORD=password

XDEBUG_INSTALL=true

これは環境変数です!環境変数とは、gitで管理されない(というかしない)値のことで、ようは自分のパソコンでしか定義できない値です。awsのs3とかのファイルストレージへのアクセストークンやtwitterのapiとかで発行されるシークレットキーとか、要するに他人に知られたくない値を記述します。
といっても、今回の.envはdockerでしか使わないので特に気にしなくて結構です!あと、今何言ってるかよくわからないという方も気にしなくて結構です!ご自身で何か作り出すとすぐわかると思いますので!


はい、ここまでのディレクトリ構造は以下のようになっています。
.
├── .env
├── docker
│   ├── mysql
│   │   └── my.cnf
│   └── php
│        ├── Dockerfile
│        └── php.ini
└── docker-compose.yml


ターミナルで環境を構築する


さて、ここまで来たら、vs codeのツールにある「ターミナル」をクリックして、「新しいターミナル」をクリックしてください。


すると、以下の画像のようにターミナルが開きます


画像のようにTutorialディレクトリにいるとは思いますが、もし違うディレクトリにいたらlinuxコマンドを使ってTurorialディレクトリに移動してください。(参考: 作業ディレクトリを移動するcdコマンドの詳細まとめました【Linuxコマンド集】)
さぁ、一気にエンジニアっぽくなりましたね!

で、

docker-compose build

と入力し、気合を入れてエンターキーを叩いてください。「いっけー!」と叫びながらだと成功率があがります。

すると以下のようにパッケージのインストールなどが始まるかと思います。


これはdocker-compose.ymlに書かれた内容を実行して、イメージ(mysqlなど)をプルしたり、Dockerfileの実行などをしてくれています。

今回はうまくいった内容を投稿しているので、エラーなく終了するかとは思いますが、環境構築でdockerを使うときはここで結構エラーがでます。ビギナーであれば尚更エラーがでます。

また、本記事を読んでいる時期によっては、インストールするパッケージのバージョンが上がってて失敗するパターンなどあるかと思いますので、その時は諦めてご自身で調べて環境構築してみてください。🙇‍♂️

はい、で、終了したら


上記のようにまた入力できるようになると思いますので、

docker-compose up

と入力して、これまた気合を入れてエンターキーを押してください。



こんな感じになったらOKです。

そしたら次に、


ターミナルの右側に+マークがあるので、クリックしてください
(ちなみに+マークのしたのdocker,zshなどをクリックすればTerminalを切り替えることができます)

すると新しいターミナルが開くので、Tutorialディレクトリにいることを確認して、

docker-compose exec app bash

と入力してエンタキーを押してください。


すると


こんな感じになります。

ここで

ls -a

と入力してみると


こんな感じで、作成したファイルやディレクトリが表示されます。

つまり、ざっくり言うと、Dockerfileでもろもろインストールされたappという環境の中に入ったということです。

この中は、laravelを動かすパッケージが諸々インストールされているので、この中にlaravelをインストールすれば、laravelが動くはずです!

あと少しです。がんばりましょう!


laravelをインストールする


それでは、appコンテナの中に入った状態で

composer

と入力してエンターを押してみてください。


はい、こんな感じでかっこいいcomposerのロゴが表示されます

これはDockerfileでインストールしたパッケージ管理ツール?システム?で、これを利用してlaravelをインストールします。

もう終盤です!

今のディレクトリで、

composer create-project --prefer-dist laravel/laravel blog "6.*"

と入力してエンターキーを押してください!
(blogの部分がapplication nameになります。今回はこのままblogでいきましょう。また"6.*"はバージョンを指定しています。)

色々ダウンロードされたと思います。いい感じです!

あともうちょいです!

ダウンロードが完了したら、念の為blogディレクトリの中を見てみましょう



こんな感じでファイルが一色揃っているかと思います。これがlaravelです!

あとはブラウザにlaravelのwelcomeページを表示できれば、今回の記事のゴールとなります!


welcomeページを表示する


そうしましたら、一旦

exit

と入力して、コンテナから出てください。

それで、今のターミナルで

docker-compose down

と入力するか

docker-compose up

を入力したターミナルを開いて、

キーボードの control + C を押して、サーバーを終了します。

そしたら、docker-compose.ymlを編集します。

services:
  app:
    build:
      context: ./docker/php
      args:
        XDEBUG_INSTALL: "${XDEBUG_INSTALL}"
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini
      - .:/var/www/html/
      ⬆️ここを
      - ./blog:/var/www/html/
      ⬆️こう書き換える

.:/var/www/html/
./blog:/var/www/html/

と書き換えて

docker-compose up

と入力して、再度サーバーを立ち上げます

そして、またappのコンテナの中に入って、lsコマンドでファイルの一覧を見てみましょう



はい、今度はblogディレクトリの中にいますね!

いい感じですよぉぉ!

さぁ、お待たせしました。

ブラウザを開いてください。なんでもいいですが、個人的にchromeが好きなのでchromeを開いてください。EnternetExplorerはおすすめしません!

で、アドレスバーに

http://localhost:8080/public/

と入力して、今日1のパワーをエンタキーにぶつけてください!もうパソコンが壊れても悔いはない!!壊れたら新しく買ってください!そしてもう一度環境構築してください!


表示されましたか!?

されていれば成功です!

やったぜ!!

今すぐお隣さんちに駆け込んで環境構築できた旨を伝えましょう!


表示できなかった方はなんらかの原因で表示されないのでしょう。面倒ですが、またこの記事を頭からやってもらうか、webで検索して本記事より参考になりそうな環境構築の記事を探してトライしみてください!トライ&エラーです!そして環境構築に成功したときは、急いでお隣さんちに駆け込んで、昨日の晩飯に何食ったかを伝えましょう!お隣さんのそのときの表情含めて真の環境構築です!


はい、ということで長いことお疲れ様でした。

環境構築面倒ですよねー。でもできた時の達成感を味わえるのも環境構築の醍醐味かもしれません。

ちなみに、今回作った環境は、このビギナーエンジニアブログを作った環境とほぼ同じです。

なぜなら、ビギナーエンジニアブログのファイルをほぼほぼコピペして本記事に貼り付けて紹介していたので!

正直なにも見ないで環境構築なんてできません。。


ということで、次回はデバッグの設定やデータベースの設定などをしながら、認証機能を追加していこうかと思います!
おやすみなさい!


0
0
0
0
通信エラーが発生しました。
似たような記事