LoginSignup
5
4

More than 1 year has passed since last update.

Docker + Laravel + PostgreSQL + Apache の開発環境を構築する

Posted at

目的

個人開発をしてみようと思い、インフラは費用を抑えるためにHerokuにしようと考えています。
HerokuではデフォルトのDBがPostgreSQLであることと、docker環境を自ら作成したことがなかったので勉強も兼ねて作成したものを残します。

開発環境

  • PHP 8.0
  • Laravel 最新バージョン
  • PostgreSQL 14.4
  • Apache 2.4.53

ファイル

ファイル構成

docker-compose
├── apache
│   └── default.conf
├── php
│   └── Dockerfile
├── src // ソースコード格納用ディレクトリ
└── docker-compose.yml

Dockerfile

Dockerfile
FROM php:8.0-apache

RUN apt update && apt install -y zlib1g-dev g++ libicu-dev zip libzip-dev zip libpq-dev \
    && docker-php-ext-install intl opcache pdo pgsql pdo_pgsql \
    && pecl install apcu \
    && docker-php-ext-enable apcu \
    && docker-php-ext-configure zip \
    && docker-php-ext-install zip \
    && apt-get install -y git \
    && a2enmod rewrite


WORKDIR /var/www/html

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

default.conf

default.conf
<VirtualHost *:80>
   ServerName laravel_sample
   DocumentRoot /var/www/html/public

   <Directory /var/www/html>
       AllowOverride All
   </Directory>
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

docker-compose.yml

docker-compose.yml
version: '3.8'

services:
  database:
    image: postgres
    container_name: database
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: laravel_sample
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    ports:
      - '5432:5432'

  php:
    container_name: php
    build:
      context: ./php
    ports:
      - '8080:80'
    volumes:
      - ./src:/var/www/html
      - ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
    depends_on:
      - database

手順

ファイル作成後の手順
docker-composeディレクトリでコンテナをビルド

docker-compose up -d --build

コンテナに入る

docker-compose exec php bash

Laravelのアプリケーションを作成(既存の作成中のものがあればgit cloneする)

composer create-project laravel/laravel .

laravelのプロジェクトを作成すると以下からLaravelのウェルカムページが表示されます。
http://localhost:8080/

composer install

.env作成

cp .env.example .env

.envのAPP_KEY作成

php artisan key:generate

.envのDBに設定

DB_CONNECTION=pgsql
DB_HOST=database
DB_PORT=5432
DB_DATABASE=laravel_sample
DB_USERNAME=postgres
DB_PASSWORD=secret

マイグレーション実行

php artisan migrate

参考にした記事

おわりに

シンプルな記事を参考にしたのであまり難しく考えず構築することができました。
足りないものもありそうなのでこれから改良していきながら知識を増やそうと思います。

間違っているところなどあれば、ご教示ください。

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