🐋

Dockerの設定ファイル作成

2023/09/08に公開

Dockerのダウンロード

まずDockerdesktop for macをダウンロードする。
前にダウンロードしてログイン設定やらなんやらやってほったらかしだったので
更新確認だけ行い最新にする。
この辺はさすがに残さなくても大丈夫でしょ。

./Docker/cakePHP
├── docker-compose.yml
├── apache-config.conf
└── Dockerfile

apacheのコンフィグファイルを作成

apache-config.conf
<VirtualHost *:80>
    DocumentRoot /var/www/html/webroot
    <Directory /var/www/html/webroot>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

詳しくは調べていないがこれが基本形らしい。
80番以外のポートを使用したいわけでもWebサイトのディレクトリが別のディレクトリにあるわけでもない。
ディレクトリのオプションも特に何かしたいわけでも無い、
アプリケーションである以上httpsでやるべきだと思うが今やっても修正が必要になりそうだからデプロイする時に考える。
AllowOverrideをNoneにして.htaccessファイルを無効化することでパフォーマンスが向上したりセキュリティが強固になったりするらしいがよくわからないので無視。
requireも全許可。
機密や個人情報が絡むとアレコレする必要が出てくるのだろうか。

docker-compose.yml

version: '3' # Docker Composeのバージョンを指定

# 複数のコンテナ(サービス)の設定
services:

  # webサービス(アプリケーション)の設定
  web:
    build: . # 現在のディレクトリにあるDockerfileを使用してイメージをビルド
    ports:
      - "8000:80" # ホストの8000番ポートとコンテナの80番ポートをマッピング    
    volumes:
      - ~/.vimrc:/root/.vimrc 
      - ~/.bashrc:/root/.bashrc #ローカルで使っているvimとbashの設定をコピー
      - ./src:/var/www/html # ホストの./srcディレクトリをコンテナの/var/www/htmlにマウント
    depends_on:
      - db  #dbサービスが起動した後にこのサービスを起動

  # dbサービス(データベース)の設定
  db:
    image: postgres:latest # PostgreSQLの最新版イメージを使用
    environment:
      POSTGRES_DB: ikaten_cakecmsdb # データベース名
      POSTGRES_USER: ikaten_cakecms  # データベースのユーザー名      
      POSTGRES_PASSWORD: 秘密 # データベースのパスワード(本番環境ではセキュアな方法で管理するべきだそうだ)

こいつでコンテナの設定を管理する
configファイルと違ってコメントアウトがわかりやすいから注釈が描きやすい

Dockerfile
# PHP 8.1のイメージを指定
FROM php:8.1-apache

# Apacheの設定
# ローカルのApache設定ファイルをコンテナ内のApache設定にコピーする
COPY ./apache-config.conf /etc/apache2/sites-available/000-default.conf
# Apacheのrewriteモジュールを有効にします。
RUN a2enmod rewrite 

# Vimのインストール
RUN apt-get update && apt-get install -y vim && apt-get clean

# Composerのインストール
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# intl拡張とpdo_pgsql拡張のインストール
RUN apt-get update && apt-get install -y \
    libicu-dev \
    libpq-dev \
    && docker-php-ext-configure intl \
    && docker-php-ext-install intl \
    && docker-php-ext-install pdo_pgsql  

大半がよくわからないが必要なもの

ここまでできたらプロジェクトルートに移動して

docker-compose build
docker-compose up -d

コンテナをビルドして起動してlocalhost:8000に移動するとウェルカムページが表示される。
かと思いきやそうでは無い。
デフォルトではmysqlを使う設定になってるからである。

cd cakePHP(プロジェクトルート)/src/config
vim app_local.php

バージョンによってディレクトリは違う場合があるみたい。
ファイル名も違うことがあるとか無いとか

app_local.php
'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Postgres', 
            'persistent' => false,
            'host' => 'db',
            'username' => 'ikaten_cakecms',
            'password' => '秘密',
            'database' => 'ikaten_cakecmsdb',
            'url' => env('DATABASE_URL', null),
        ],

もともと項目がある場合は変更、無いなら追記。

docker-compose down
docker-compose build
docker-compose up -d

コンテナを起動しなおすと今度こそウェルカムページが表示される。

デザインは思いつかないからとりあえずはデフォルトのデザインを流用する。
Welcome to CakePHP 4.4.17 Strawberry (🍓)のところにタイトル入れて
ちょい下の青枠のところにタグを表示して
その下の記述に習って記事を表示する形にしよう。

Discussion