目的
- 勉強のため、Laravel 7.xの公式ドキュメントを読み解いていく。
- 今回はそのための準備として、Dockerを使用して環境を構築する。
EC2の構築~セットアップ
今回は勉強なので、AWSの無料枠を利用する。
インスタンスタイプはt2.micro、OSはAmazon Linux2で作成。
参考
EC2(Amazon-Linux-2)にNginxを入れてブラウザで確認するまで2018冬 [画像で解説] Nginx編
rootでのPWログインをON
セキュリティ的には微妙なところもあるかもしれないが、いちいちsudo打たなければいけないのも面倒なので。。。
rootのPWを設定
# sudo su
# passwd
sshの設定ファイル変更
# vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
sshd再起動
# systemctl restart sshd
ec2-userの無効化
セキュリティ的に消した方がいいよ、という記事を見つけた。確かに。
# userdel ec2-user
EC2を日本時間と日本語に対応させる
# yum update -y
# timedatectl set-timezone Asia/Tokyo
# localectl set-locale LANG=ja_JP.UTF-8
# localectl set-keymap jp106
パッケージを自動更新させる
yum-cronのインストール
# yum install yum-cron -y
yum-cronとは?
yum-cron パッケージは、アップデートを自動的に確認し、ダウンロードし、適用するための便利な方法を提供します。
パッケージをインストールするとすぐに yum-cron パッケージの cron ジョブが有効になり、特別な設定は必要ありません。通常の日次 cron ジョブの実行時に、このジョブが実行します。
yum-cronを編集
# vi /etc/yum/yum-cron.conf
apply_updates = yes
cronの自動起動をON
# systemctl status yum-cron
# systemctl start yum-cron
# systemctl enable yum-cron
Laravel開発環境構築
参考
Docker × PHP7.3 × Laravel環境作ってみた
Docker・Docker Composeのインストール
Dockerインストール
# amazon-linux-extras install docker
Dockerサービス起動
# systemctl start docker.service
サービスの起動確認
# systemctl status docker
Dockerの自動起動設定
# systemctl enable docker
試しにDockerコマンド実行
# docker info
Docker Composeインストール
# curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
Docker Composeのインストールを確認
# docker-compose --version
docker-compose version 1.25.4, build 8d51620a
ディレクトリ作成
以下の構成を想定しています。
project
├ docker-compose.yml
├ docker
│ ├ db
│ │ ├ data
│ │ ├ sql
│ │ └ my.cnf
│ ├ nginx
│ │ ├ default.conf
│ ├ php
│ │ ├ php.ini
│ │ └ Dockerfile
└ server
とのこと。(太字はディレクトリ)
# cd /var
# mkdir project
# mkdir project/docker project/server
# mkdir project/docker/{php,nginx,db}
# ll -d `find ./project`
drwxr-xr-x 4 root root 34 May 21 19:08 ./project
drwxr-xr-x 4 root root 30 May 21 19:08 ./project/docker
drwxr-xr-x 2 root root 6 May 21 19:08 ./project/docker/db
drwxr-xr-x 2 root root 6 May 21 19:08 ./project/docker/nginx
drwxr-xr-x 2 root root 6 May 21 19:08 ./project/docker/php
drwxr-xr-x 2 root root 6 May 21 19:08 ./project/server
別にvarじゃなくてもいいけど、なんとなくvarで。
swap領域の有効化
過去の経験上、これをやらないとこける。
# /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 13.537 s, 79.3 MB/s
# /sbin/mkswap /var/swap.1
mkswap: /var/swap.1: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=8be78b55-de6d-4ed4-9f9a-7a48f3dc30ae
# /sbin/swapon /var/swap.1
swapon: /var/swap.1: insecure permissions 0644, 0600 suggested.
docker-compose.yml作成
version: '3'
services:
php:
container_name: php
build: ./docker/php
volumes:
- ./server:/var/www
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
volumes:
- ./server:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
db:
image: mysql:5.7
container_name: db
environment:
MYSQL_ROOT_PASSWORD: ****(パスワードを記載しておく)
MYSQL_DATABASE: test_db
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
Dockerfile作成
phpコンテナの構築時に、以下のDockerfileを使用する。
FROM php:7.3-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y zlib1g-dev libzip-dev mariadb-client \
&& docker-php-ext-install zip pdo_mysql
#Composer install
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
各行の処理については、Dockerfileリファレンスを参照。
php.ini作成
phpの設定ファイル。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
default.conf作成
nginxの設定ファイル。
server {
listen 80;
root /var/www/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
php.ini作成
mysqlの設定ファイル。
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
Laravelプロジェクト作成
docker起動
# docker-compose up -d
(略)
Creating php ... done
Creating db-host ... done
Creating nginx ... done
起動の確認
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9fdcb0da6745 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp nginx
e1394b974a68 project_php "docker-php-entrypoi…" 3 minutes ago Up 2 minutes 9000/tcp php
cbc7a83db192 mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp db
phpコンテナに入る
# docker-compose exec php bash
root@eec8f5f9ebe2:/var/www#
Laravelプロジェクト作成
# laravel new
(略)
Application ready! Build something amazing.
Laravelまわりのディレクトリのパーミッション変更
# sudo chmod 2775 /var/project/server
# find /var/project/server -type d -exec sudo chmod 2775 {} +
# find /var/project/server -type f -exec sudo chmod 0664 {} +
# sudo chmod -R 777 /var/project/server/storage/
# sudo chmod -R 777 /var/project/server/bootstrap/cache
セキュリティグループの編集
今回環境を作成したEC2について、PORT:80からのインバウンド通信を許可するように編集する。
動作確認
動作確認をして、Laravelの白い画面が出てくればOK。