2
4

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.

Laravel勉強 その1 サーバのセットアップ、DockerでのLaravel環境構築

Posted at

目的

  • 勉強のため、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
/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作成

docker-composer.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を使用する。

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の設定ファイル。

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

default.conf作成

nginxの設定ファイル。

default.conf
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の設定ファイル。

my.cnf
[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。

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?