Laravel5環境をDockerを使って構築する方法。
#ディレクトリ構成
├── Docker/
│ ├── App/
│ │ ├ 000-default.conf #apacheの設定ファイル
│ │ ├ Dockerfile
│ │ └ php.ini
│ └── DB/
│ ├ my.cnf
│ └ volume/ #データの保存場所
│
├── src/ #実際のlaravelが入る場所
└── docker-compose.yml
#各ファイル
##000-default.conf
<VirtualHost *:80>
ServerAdmin laravel@localhost
DocumentRoot /var/www/html/laravelapp/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/laravelapp/public>
AllowOverride All
</Directory>
</VirtualHost>
DocumentRootとDirectoryは
/var/www/html/laravelapp/public
となっているが、
自分が決めたlaravelのアプリ名によって変更する必要がある。
(例)composer create-project laravel/laravel --prefer-dist blog
としたら、
/var/www/html/blog/public
と変更する必要がある。
##Dockerfile
FROM php:7.4-apache
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/
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 \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite
RUN docker-php-ext-install sockets
##php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
default_charset = "UTF-8"
mbstring.language = "Japanese"
extension=sockets
##my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
##docker-compose.yml
# docker-composeで使用するバージョンを定義しています。
version: '3'
# アプリケーションを動かすための各要素のこと。servicesの中に、app、db、phpmyadminが子要素として設定されています。
services:
# laravelを動かすコンテナがここから下に記載されています。
app:
#コンテナの名前をここで決めます。
container_name: laravel_app
# どのポートを繋ぐかという設定です。ホストの8080番ポートとコンテナの80番をつないでいる。80番ポートのバーチャルホストは000-default.confにて設定済みです。
ports:
- "8000:80"
# Dockerfileの設定の場所を指定しています。Dockerfileの内容に基づいてビルドします。
build: ./Docker/App
# コンテナとホスト側のディレクトリを同期する場所をここで指定しています。ここにlaravelのソースが入ります。
volumes:
- ./src:/var/www/html
# MySQLを動かすコンテナがここから設定されています。
db:
#Docker HubからMySQL5.7の公式イメージを引っ張ってくる設定です。
image: mysql:5.7
# コンテナ名を指定しています。
container_name: laravel_db
# MySQLのコンテナ内の環境変数を指定しています。任意のものを設定してください。
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laraveldb
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
TZ: 'Asia/Tokyo'
# 起動時のコマンドになります。
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# ディレクトリの同期をしています。ここを書かないとコンテナを閉じたときにデータベースからデータがなくなるので注意してください。詳しくはdocker 永続化などと調べると良いかもです。
volumes:
- ./Docker/DB/volume:/var/lib/mysql
- ./Docker/DB/my.cnf:/etc/mysql/conf.d/my.cnf
# ホストの13306番ポートとコンテナのなかの3306番ポートとつなげる設定です。
ports:
- 13306:3306
# phpmyadminの設定が書きに記載します。
phpmyadmin:
#コンテナ名を決めています。
container_name: phpmyadmin
#DockerHubからphpmyadminのイメージを引っ張ってくる設定です。
image: phpmyadmin/phpmyadmin
#phpmyadminの環境変数の設定です。MySQLの設定を参照して記載してください。PMA_HOSTSにはservicesのdbを指定しています。
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=db
- PMA_USER=root
- PMA_PASSWORD=root
ports:
- 3000:80
#手順
##1.コンテナを立ち上げる
docker-compose up -d
##2.Laravelを導入する
###1.サーバーの中に入る
docker exec -it laravel_app bash
サーバーの中のvar/www/html
にいることを確認する
###2.Laravelのインストール
composer create-project "laravel/laravel=~5.0" --prefer-dist laravelapp(任意の名前)
今回は、npmを入れるのが面倒なのでバージョン5系を指定しています。
インストールが完了したら、
localhost:8000
をアクセスして確認する
##3.Laravelの設定
###.envの編集
DB_CONNECTION=mysql
DB_HOST=laravel_db #docker-composeのmysqlのコンテナ名を指定
DB_PORT=3306
DB_DATABASE=laraveldb #docker-compose.ymlのmysqlで指定したデータベース名
DB_USERNAME=dbuser #docker-composeのmysql.ymlで指定したユーザ名名
DB_PASSWORD=dbpass #docker-composeのmysql.ymlで指定したパスワード名
##4.マイグレーションを実行(今しなくてもいい)
サーバーの中に入った状態で、cd laravelapp
コマンドでアプリ内に入って、
php artisan migrate
マイグレーションを成功したら、OK。
####phpmyadminはlocalhost:3000
でアクセスできる
##5.権限を変更する
laravel_appコンテナ内に入って、/var/www/html/larvelappに移動する。(laravelプロジェクト内に入る)
そして、次のコマンドを実行する
chmod -R 777 storage
chmod -R 777 bootstrap/cache
##6.AppServiceProvider.phpの編集 (文字コードのエラーを防ぐ)
エディタで、src/laravelapp/app/Providers/AppServiceProvider.php
を開いて、
use Illuminate\Support\Facades\Schema;
を追加して、さらに、
public function boot()
{
//
Schema::defaultStringLength(191);
}
boot関数の中身に一行を加える。
##7. config/app.phpの編集 (基本設定)
以下の二箇所を編集
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',