LoginSignup
0
0

More than 1 year has passed since last update.

Dockerとnginx,mysqlでLaravelを構築(初心者のメモ)

Last updated at Posted at 2023-03-01

はじめに

DockerでLaravelを構築した時にいろいろと問題にぶち当たり、メモ程度にまとめました。

目次

  • nginxの構築
  • MYSQLの構築
  • PHPの構築
  • Laravelプロジェクトの作成
  • コンテナの作成
  • おわりに

使ったもの

  • Docker Desktop
  • ubuntu 22.04.2 LTS
  • nginx
  • MYSQL 8.0.32
  • PHP 8.2.3-fpm
  • laravel

ディレクトリ全体像

Dockerのディレクトリの全体像を先に示しておきます。

$ tree
├── docker-compose.yml
├── mysql
│   └── my.ini
├── nginx
│   ├── Dockerfile
│   └── nginx.conf
└── php
    └── Dockerfile

nginxの構築

docker composeを使うのでdocker-compose.ymlを編集しました。

docker-compose.yml
version: '3.9'
services:
    nginx:
        image: nginx:latest
        #Dockerfileのディレクトリ
        build: ./nginx
        container_name: nginx
        volumes:
            #コンフィグファイルの同期
            ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
            ./src:/var/www/html
        ports:
            - 80:80

次にDockerfileを編集しました。

nginx/Dockerfile
FROM nginx:latest
RUN service nginx start

次にnginxのコンフィグファイルを記載します。

nginx/nginx.conf
server{
    root /var/www/html/laravelのプロジェクト名/public;
    listen *:80;
    listen [::]:80;
    index index.html 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;
    }
}

locationより下の処理は、書かないとwebページの表示ではなく、phpファイルがダウンロードされたので必要です。
以上でnginx関連は終了です。

MYSQLの構築

nginxの時のdocker-compose.ymlに追記をします。

docker-compose.yml
version: '3.9'
services:
    nginx:
        image: nginx:latest
        build: ./nginx
        container_name: nginx
        volumes:
            ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
            ./src:/var/www/html
        ports:
            - 80:80
    mysql:
        image: mysql:8.0.32
        container_name: mysql
        volumes:
            #コンフィグファイルの同期
            ./mysql/my.ini:/etc/my.ini
        environment:
            MYSQL_ROOT_PASSWORD: 管理者のパスワード
            MYSQL_USER: ユーザー名
            MYSQL_PASSWORD: ユーザーのパスワード
            MYSQL_DATABASE: データベース名
        ports:
            3306:3306

MYSQLではDockerfileを使用しませんでした。次はmy.iniに文字コードについての処理を記載します。

mysql/my.ini
[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4

以上でMYSQLは終了です。

PHPの構築

MYSQL同様、docker-compose.ymlに追記していきます。

docker-compose.yml
version: '3.9'
services:
  nginx:
    image: nginx:latest
    build: ./nginx
    container_name: app-web
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/html
    ports:
      - 80:80
  mysql:
    image: mysql:8.0.32
    container_name: mysql
    volumes:
      - ./mysql/my.ini:/etc/my.ini
    environment:
        MYSQL_ROOT_PASSWORD: 管理者のパスワード
        MYSQL_USER: ユーザー名
        MYSQL_PASSWORD: ユーザーのパスワード
        MYSQL_DATABASE: データベース名
    ports:
      - 3306:3306
  php:
    image: php:8.2.3-fpm
    #Dockerfileのディレクトリ
    build: ./php
    container_name: php
    volumes:
      - ./src:/var/www/html
    ports:
      - 9000:9000
    #PHPとmysqlを簡単に接続できるようにする
    depends_on:
      - mysql

次にDockerfileの処理です。

php/Dockerfile
FROM php:8.2.3-fpm

RUN apt-get update && apt-get install -y libonig-dev && \
    docker-php-ext-install pdo_mysql mysqli mbstring

必要なライブラリのインストールなどです。

Laravelプロジェクトの作成

DockerfileへcomposerとLaravelプロジェクト作成のコマンドを追記します。

php/Dockerfile
FROM php:8.2.3-fpm

RUN apt-get update && apt-get install -y libonig-dev && \
    docker-php-ext-install pdo_mysql mysqli mbstring
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN ./composer.phar create-project laravel/laravel laravelのプロジェクト名

以上ですべてのファイルが用意できました。

コンテナの作成

Ubuntuのコマンド上で以下を実行させます。

$ docker-compose up -d --build

これでnginx,mysql,phpのコンテナが作成されます。念のため以下のコマンドで確認しておきます。

$ docker-compose ps -a
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
nginx               php:8.2.3-fpm       "docker-php-entrypoi…"   php                 24 hours ago        Up 12 hours         0.0.0.0:9000->9000/tcp
mysql               mysql:8.0.32        "docker-entrypoint.s…"   mysql               2 days ago          Up 12 hours         0.0.0.0:3306->3306/tcp, 33060/tcp
php                 nginx:latest        "/docker-entrypoint.…"   nginx               12 hours ago        Up 12 hours         0.0.0.0:80->80/tcp

全てのステータスがUpになった状態でlocalhostを表示し、Laravelの初期画面が表示されたら成功です!

おわりに

Qiitaの練習とDockerのメモのためにこの記事を作ったので端折るところや言葉足らずのところが多くても許してください。
それと、とりあえずLaravelを導入したかっただけなのでこれで自作コードが動かないかもしれないのでこのままの環境でLaravelの学習を続けていきたいと思います。

0
0
1

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
0
0