LoginSignup
18
19

More than 5 years have passed since last update.

LaradockでLaravel5.6環境を構築する

Last updated at Posted at 2018-05-20

本記事では、Laravel5.6での環境をLaradockを利用して構築する方法を説明して行く。
* 追記
現在の最新バージョンのLaradockではこの記事の方法で動作しないことがあるようです。
この記事を作成した段階のコミットハッシュをリンクしておきます。
本記事作成時のLaradockのリポジトリ

はじめに

以前にLaravel5.4の環境構築という記事を書いたが、現在では求められるPHPのバージョンがPHP7.1まで(Laravel5.6から)引き上げられた。
Laradockの使い方も以前の記事が参考にならないレベルで大きく仕様が変更された。

日本のエンジニアがあまりLaradockを使っていないのか、最新のLaradockの日本語文献が全く出てこないので、自分の今後の構築のためも含めて記述しておく。

実行環境

LaradockはDockerの実行できる環境であれば、基本的に実行できるが、パーミッションの問題など私の実行した環境では起こらなかった問題が起こる場合があるので、一応実行環境を記載する。

基本的にDocker for Macの方がLinuxでDockerを動かすよりもパーミッションの問題に当たりにくい。
多分、仮想マシン上のLinuxでDockerエンジンを動かしているからだと思われる。

マシーン環境:MacBookPro
OS:MacOS Sierra
スペック:Intel Core i7 3.3GHz
メモリ:16GB 2133MHz DDR3
Docker:Version 18.03.0-ce-mac60(23751)
Laravel:v5.6.21

Laradockの設定

まず、適当なディレクトリにgithubからリポジトリをクローンする
そして環境変数を設定し、dockerコンテナを起動する

setup.sh
git clone https://github.com/Laradock/laradock.git Laradock
cd Laradock
cp env-example .env
docker-compose up -d nginx mysql phpmyadmin redis workspace

上記のコマンドを実行してしばらく経つとnginx・php-fpm・redis・mysql・workspace・phpmyadminの環境が自動で作成される。
各コンテナの役割を以下で説明する。

  • nginx (Webサーバ)
  • php-fpm (PHPを実行する為のcgi環境)
  • redis (KVSのサーバ、多分Laravelの標準の状態だとセッションの保存に利用)
  • mysql (RDBのサーバ永続的なデータストア)
  • workspace (Laravelの開発をする為の実行環境がまとまったコンテナ)
  • phpmyadmin (DBをWeb上から操作できる、個人的には不要なオプションのコンテナ)

Laravelの環境を構築

Laravelの開発をLaradockでするには、workspaceコンテナを利用する。
今回はsampleという名前のプロジェクトを作る。

setup.sh
docker-compose exec workspace bash
composer create-project --prefer-dist laravel/laravel sample
cd sample
vim .env

ここまでコマンドを実行すると、環境変数の設定に入る。
Dockerはlinksを指定するとその名前のコンテナ名がlinksを指定したコンテナにホスト名としてリンクされる。
Laradockでは、workspaceにmysqlとredisがlinksされている。
なので、以下の部分の設定を変更する。
※DB_DATABASEとDB_USERNAMEはdefaltに変更する必要がある。

DB_HOST=mysql
DB_DATABASE=default
DB_USERNAME=default
REDIS_HOST=redis

変更後に環境変数設定をした.envを保存する。

nginxのconfigのドキュメントルートを編集

その後、control + p + qを押してコンテナからデタッチする。
デタッチ後に、以下のコマンドを実行する。

setup.sh
cd ../Laradock
vim .env

ここで、以下の.envの項目を変更する。
今回はプロジェクト名をsampleにしているので、ここもsampleのディレクトリにする。
ここで、Laravelのユーザはなぜ、../sample/public/を指定しないのかと思うかもしれないが、../sample/で大丈夫なのだ。
理由は、nginxのsites/default.confにrootのディレクトリ指定が/var/www/publicになっているからだ。

APP_CODE_PATH_HOST=../sample/

これで設定は全て完了である。
最後に変更したnginxの設定を変更する為に以下のコマンド実行する。

setup.sh
docker-compose stop
docker-compose up -d nginx mysql phpmyadmin redis workspace

実行できるか確認

ブラウザで以下のURLにアクセスして正しくアクセスできるか確認する。
http://localhost

Laravelの初期画面が表示されたら環境構築は終了。

LaradockでHTTPSに対応する (2018.06.02 追記)

Laravelを利用していると、FacebookのソーシャルログインなどでHTTPSの通信がしたいことがある。
そんな時にLaradockでHTTPSの通信を実現する方法を記していく。

まず、 Laradock/nginx/Dockerfile の中身を少し変更する。

Dockerfile.sh
FROM nginx:alpine

LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>"

COPY nginx.conf /etc/nginx/

# If you're in China, or you need to change sources, will be set CHANGE_SOURCE to true in .env.

ARG CHANGE_SOURCE=false
RUN if [ ${CHANGE_SOURCE} = true ]; then \
    # Change application source from dl-cdn.alpinelinux.org to aliyun source
    sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories \
;fi

RUN apk update \
    && apk upgrade \
    && apk add --no-cache bash \
    && apk add --no-cache openssl \
    && adduser -D -H -u 1000 -s /bin/bash www-data

ARG PHP_UPSTREAM_CONTAINER=php-fpm
ARG PHP_UPSTREAM_PORT=9000

# Set upstream conf and remove the default conf
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
    && rm /etc/nginx/conf.d/default.conf

RUN mkdir /etc/nginx/ssl 2> /dev/null
RUN openssl genrsa -out "/etc/nginx/ssl/localhost.key" 2048 \
    && openssl req -new -key "/etc/nginx/ssl/localhost.key" -out "/etc/nginx/ssl/localhost.csr" -subj "/CN= localhost/O= localhost/C=UK" \
    && openssl x509 -req -days 365 -in "/etc/nginx/ssl/localhost.csr" -signkey "/etc/nginx/ssl/localhost.key" -out "/etc/nginx/ssl/localhost.crt"

CMD ["nginx"]

EXPOSE 80 443

その後、Laradock/nginx/sites/default.conf を変更して行く。
変更箇所は上部の1~13行である。

default.conf
server {

    listen 80 default_server;
    listen 443 ssl;
    listen [::]:80 default_server ipv6only=on;

    server_name localhost;
    root /var/www/public;
    index index.php index.html index.htm;

    ssl_certificate     /etc/nginx/ssl/localhost.crt;
    ssl_certificate_key /etc/nginx/ssl/localhost.key;

                       ・・・・・省略・・・・・

}

最後にコンテナをもう一度Buildから実行する

docker-compose build nginx
docker-compose stop nginx
docker-compose up -d nginx

おわりに

今回はLaradockを使ってLaravel5.6の環境を構築した。
ネット上の日本語文献が軒並み古いLaradockの使い方しか乗っておらず、更新もされていないので、この記事をみてLaravelの環境を手軽に作れる人が増えたら嬉しい。

参考

18
19
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
18
19