こんにちは。
最近Laravelをたまたま触る機会があったので備忘録として残していこうと思います。
結構巷じゃ人気みたいですね〜、Laravel。
名前の響きが良い笑
phpもろくに触ったことがないのでLaravelも書いたことなかったんですが、、、。
感想としては結構書いてみて面白かったですね。
railsと同じMVCなので馴染みやすいです。
railsとか触ったことある人は割と理解しやすいのでは?
docker+Laravelをrailsエンジニアが使ってみる←今回はここ
Laravel: ログイン認証と管理画面 【voyager】
Laravel + docker で掲示板を作るチュートリアル
docker + Laravelアプリをherokuにデプロイする
Laravel + Docker環境構築
dockerを使ってLaravelの環境を作っていきます。
mkdir [プロジェクト名]
cd [プロジェクト名]
上記のコマンドをターミナルで叩いてプロジェクトディレクトリを作っておく
必要なファイルを作成
docker-compose.yml
touch docker-compose.yml
docker-compose.ymlの中
version: "3"
services:
app:
container_name: topic_app # 任意で変更
build:
context: ./docker/php
args:
- TZ=${TZ}
volumes:
- ./src:/topic # 任意で変更
- ./logs:/var/log/php
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
working_dir: /topic # 任意で変更
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_DATABASE=${DB_NAME}
- DB_USERNAME=${DB_USERNAME}
- DB_PASSWORD=${DB_PASSWORD}
- TZ=${TZ}
web:
image: nginx:1.17-alpine
container_name: topic_web # 任意で変更
depends_on:
- app
ports:
- 8080:80
volumes:
- ./src:/topic # 任意で変更
- ./logs:/var/log/nginx
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
environment:
- TZ=${TZ}
db:
image: mysql:5.7
container_name: topic_db # 任意で変更
volumes:
- db-store:/var/lib/mysql
- ./logs:/var/log/mysql
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USERNAME}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
- TZ=${TZ}
ports:
- "3388:3306"
volumes:
db-store:
web
、app
、db
の3つのコンテナ構成でいきます。
.env
続いて.env
を作ります。
touch .env
.envの中
DB_NAME=topic_db 任意で変更
DB_USERNAME=docker
DB_PASSWORD=secret
DB_ROOT_PASSWORD=root
TZ=Asia/Tokyo
タイムゾーンをAsia/Tokyo
に指定します。
DBの情報は任意で変更してください。
Dockerfile
dockerディレクトリの中に作っていきます。
mkdir -p dokcer/php
touch docker/php/Dockerfile
Dockerfileの中
FROM php:7.3-fpm-alpine
ARG TZ
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
RUN apk --no-cache update && \
apk --no-cache upgrade && \
apk --no-cache add \
curl-dev \
freetype-dev \
libjpeg-turbo-dev \
libpng-dev \
libxml2-dev \
libzip-dev \
pcre-dev \
g++ \
make \
autoconf \
openssl \
nodejs-npm \
bash \
vim \
git \
&& docker-php-ext-install \
pdo_mysql \
zip \
opcache \
&& docker-php-ext-configure gd \
--with-freetype-dir=/usr/include/ \
--with-jpeg-dir=/usr/include/ \
--with-png-dir=/usr/include/ \
&& docker-php-ext-install gd \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& chmod +x /usr/local/bin/composer \
&& rm -rf /var/cache/apk/*
FROMでphp:7.3-fpm-alpine
イメージを取得します。
php.ini
phpの設定ファイルですね。
touch docker/php/php.ini
php.iniの中
error_reporting = E_ERROR | E_WARNING | E_PARSE | E_NOTICE
display_errors = stdout
display_startup_errors = on
log_errors = on
error_log = /var/log/php/php-error.log
upload_max_filesize = -1
memory_limit = -1
post_max_size = 100M
max_execution_time = 900
max_input_vars = 100000
default_charset = UTF-8
[Date]
date.timezone = ${TZ}
[mbstring]
mbstring.language = Japanese
default.conf
nginx
の設定をします
mkdir docker/nginx
touch docker/nginx/default.conf
default.confの中
server {
listen 80;
root /[プロジェクト名]/public;
index index.php;
charset utf-8;
location / {
root /[プロジェクト名]/public;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
my.cnf
最後ですね。
mkdir docker/mysql
touch docker/mysql/my.cnf
my.cnfの中
[mysqld]
# character set / collation
character-set-server = utf8mb4
collation-server = utf8mb4_bin
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = /var/log/mysql/mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = /var/log/mysql/mysql-query.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
これで必要なファイルは揃いました!
最終的なファイル構成はこんな感じです。
早速buildしていきましょう。
Laravelインストール
build
早速build
しましょう。
docker-compose build
ビルドが終わったら起動します
docker-compose up
Laravelのインストール
appコンテナに入る
ターミナルで新しくウインドウを開いてappコンテナに入ります
docker-compose exec app ash
プロジェクト作成
プロジェクトを作成します。
6系でいきます。
composer create-project --prefer-dist "laravel/laravel=6.0.*" .
バージョンを確認
php artisan -V
ローカルホストにアクセスしましょう
localhost:8080をブラウザで開く
なんか洒落てますね。
Railsの賑やかなのになれてるので尚更笑
mysqlコンテナと接続
Laravelをインストールしてsrcディレクトリができていると思うので、そこの.envを書き換えます
./src/.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=topic_db
DB_USERNAME=docker
DB_PASSWORD=secret
またAPP_URLも書き換えます
APP_URL=http://localhost:8080
マイグレーションを実行
php artisan migrate
Sequel Proで確認してみる
ちょっとした設定
アプリケーションのタイムゾーンを変更
config/app.php
'timezone' => 'Asia/Tokyo', //デフォルトはUTC
'locale' => 'ja', //デフォルトはen
https対応
ローカルではhttp、
本番ではhttpsにしたいかと思います。
asset()関数をそのまま使うと、全てhttpになってしまいますし、
secure_asset()などに書き換えるのも面倒です。
そこで以下のファイルを書き換えることで、動的に対応されるようになります。
LaravelとDockerでプロジェクトを始めるときに見るメモ
app/http/Middlewares/TrustProxies.php
protected $proxies = '*';
ヘルパーを導入
6系からヘルパーがなくなったらしいです。composer require laravel/helpers
できましたね。
次回はログイン機能と管理画面を実装します。
コメント
Laravel良いですよね