3
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 3 years have passed since last update.

Docker-composeでLaravel5の簡単環境構築の方法(apache編)

Last updated at Posted at 2021-02-16

Laravel5環境をDockerを使って構築する方法。

#ディレクトリ構成

├── Docker/
│    ├── App/
│    │    ├ 000-default.conf #apacheの設定ファイル  
│    │    ├ Dockerfile
│    │    └ php.ini 
│    └── DB/
│         ├ my.cnf  
│         └ volume/ #データの保存場所
│
├── src/ #実際のlaravelが入る場所
└── docker-compose.yml

#各ファイル
##000-default.conf

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

php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
default_charset = "UTF-8"
mbstring.language = "Japanese"
extension=sockets

##my.cnf

my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4

##docker-compose.yml

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の編集

scr/laravleapp/.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コマンドでアプリ内に入って、

var/www/html/laravelapp
php artisan migrate

マイグレーションを成功したら、OK。

####phpmyadminはlocalhost:3000でアクセスできる

##5.権限を変更する
laravel_appコンテナ内に入って、/var/www/html/larvelappに移動する。(laravelプロジェクト内に入る)
そして、次のコマンドを実行する

var/www/html/laravelapp
chmod -R 777 storage
chmod -R 777 bootstrap/cache

##6.AppServiceProvider.phpの編集 (文字コードのエラーを防ぐ)
エディタで、src/laravelapp/app/Providers/AppServiceProvider.phpを開いて、

AppServiceProvider.php
use Illuminate\Support\Facades\Schema;

を追加して、さらに、

AppServiceProvider.phpのboot関数
public function boot()
    {
        //
        Schema::defaultStringLength(191);
    }

boot関数の中身に一行を加える。

##7. config/app.phpの編集 (基本設定)
以下の二箇所を編集

config/app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
3
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
3
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?