baserCMSがメジャーアップデートしたのでインストールします

baserCMS5がリリースされたのでLinux環境にインストールします。WindowsにもDocker Desktopをインストールすることで実現できます。その場合、Windows版のgitなどをインストールする必要があるかもしれません。Windowsの機能であるWSLを用意すればLinux環境を構築することもできます。

ローカル環境を構築して利用する

公式ページのインストール手順を参考に進めます。OracleCloudに作成したlinuxのインスタンスに接続して作業します。OracleCloudで本番環境を構築できたので、AWS、Google Cloud、Azureにもインストールできるでしょう。


まず最初に、baserCMSのクローンを作成します。

git clone https://github.com/baserproject/basercms.git

作成したディレクトリに移動してファイルを確認するとdockerの関連ファイルがあるディレクトリがあるのでそこへ移動します。

cd basercms
cd docker

docker-compose.yml.defaultの中身をみて、使用しているイメージを確認します。記述内容は以下のようになっていました。

version: '3'

# volumes:
#  db-volume: # windowsの場合はコメントを外す

services:
  bc-db:
    container_name: bc-db
    image: mysql:8.0
    volumes:
      - ./volumes/mysql:/var/lib/mysql
      # - db-volume:/var/lib/mysql # windowsの場合はコメントを外し、上の行をコメントアウトする
      - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "basercms"
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --innodb-use-native-aio=0 --default_authentication_plugin=mysql_native_password

  bc-php:
    container_name: bc-php
    image: baserproject/basercms:php8.1
    volumes:
      - ../:/var/www/html:delegated
    environment:
      PHP_IDE_CONFIG: "serverName=localhost"
      XDEBUG_MODE: "debug"
      XDEBUG_SESSION: "1"
      COMPOSER_ALLOW_SUPERUSER: 1
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - bc-db
    command: bash -c "/var/www/html/docker/bin/init.sh && apache2-foreground"

  bc-smtp:
    container_name: bc-smtp
    image: schickling/mailcatcher
    ports:
      - "1080:1080"
      - "1025:1025"

  bc-pma:
    container_name: bc-pma
    image: phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=bc-db
      - PMA_USER=root
      - PMA_PASSWORD=root
    links:
      - bc-db
    ports:
     - 8080:80
    volumes:
       - ./phpmyadmin/sessions:/sessions

  bc-pg:
    image: postgres:15.2
    container_name: bc-pg
    ports:
      - 5432:5432
    volumes:
      - ./volumes/postgres:/var/lib/postgres
      - ./postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
    user: root

  bc-pga:
    image: dpage/pgadmin4:7.8
    container_name: bc-pga
    ports:
      - 8000:80
    volumes:
      - ./pgadmin:/var/lib/pgadmin/storage
    environment:
      PGADMIN_DEFAULT_EMAIL: foo@example.com
      PGADMIN_DEFAULT_PASSWORD: root
    depends_on:
      - bc-pg

ファイル全体の概要

このファイルは、複数のコンテナ(仮想的なサーバー)をまとめて設定・管理するためのものです。それぞれのコンテナは、特定の役割(データベース、ウェブサーバー、メールキャッチャーなど)を担っています。


version: '3'

これは、この設定ファイルが使うDocker Composeのバージョンを示しています。バージョン3は、現在広く使われているものです。


services:

ここから下で、複数のサービス(コンテナ)が定義されています。それぞれのサービスは、bc-dbbc-phpbc-smtpなどのように名前がついており、それぞれの設定が書かれています。


1. bc-db(データベース用のコンテナ)

  • container_name: bc-dbという名前でコンテナを作成します。
  • image: mysql:8.0というMySQLのバージョン8.0のイメージを使います。
  • volumes:
    • ./volumes/mysql:/var/lib/mysql: ホスト(あなたのPC)の./volumes/mysqlディレクトリを、コンテナ内の/var/lib/mysqlにマウントします。これにより、データベースデータがホストに保存されます。
    • # - db-volume:/var/lib/mysql: Windowsを使っている場合は、上の行をコメントアウトし、この行のコメントを外して使います。
    • ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d: データベース初期化用のスクリプトを格納するためのディレクトリです。
  • ports: 3306:3306 で、MySQLの標準ポート3306を外部に公開します。
  • environment: 環境変数として、ルートパスワードやデータベース名を設定します。
  • command: MySQLの設定を行うためのコマンドです。

2. bc-php(PHPとApacheを使うウェブサーバー用のコンテナ)

  • container_name: bc-phpという名前でコンテナを作成します。
  • image: baserproject/basercms:php8.1というbaserCMSのイメージを使います。
  • volumes:
    • ../:/var/www/html:delegated: ホストの1つ上のディレクトリをコンテナ内の/var/www/htmlにマウントします。これにより、ウェブコンテンツがホストに保存されます。
  • environment: PHPのデバッグ設定や、ComposerというPHPのパッケージ管理ツールの設定を行います。
  • ports:
    • 80:80: HTTP用のポート80を公開します。
    • 443:443: HTTPS用のポート443を公開します。
  • depends_on: bc-dbコンテナが先に起動するように設定します。
  • command: 起動時に実行するコマンドです。/var/www/html/docker/bin/init.shを実行してから、Apache(ウェブサーバー)を起動します。

3. bc-smtp(メールキャッチャー用のコンテナ)

  • container_name: bc-smtpという名前でコンテナを作成します。
  • image: schickling/mailcatcherというメールキャッチャーのイメージを使います。メールキャッチャーはテスト用に送信されるメールを受け取るためのものです。
  • ports:
    • 1080:1080: メールキャッチャーのウェブインターフェースにアクセスするためのポートです。
    • 1025:1025: メールサーバーのポートです。

4. bc-pma(phpMyAdmin用のコンテナ)

  • container_name: bc-pmaという名前でコンテナを作成します。
  • image: phpmyadminというデータベース管理ツールのイメージを使います。
  • environment: phpMyAdminの設定です。データベース接続情報を指定します。
  • links: bc-dbコンテナと接続するためにリンクします。
  • ports: 8080:80で、phpMyAdminにアクセスするためのポート8080を公開します。
  • volumes: ./phpmyadmin/sessions:/sessionsで、phpMyAdminのセッションデータを保存します。

5. bc-pg(PostgreSQL用のコンテナ)

  • container_name: bc-pgという名前でコンテナを作成します。
  • image: postgres:15.2というPostgreSQLデータベースのイメージを使います。
  • ports: 5432:5432で、PostgreSQLにアクセスするためのポート5432を公開します。
  • volumes:
    • ./volumes/postgres:/var/lib/postgres: PostgreSQLデータをホストに保存します。
    • ./postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d: データベース初期化用のスクリプトを格納します。
  • environment: PostgreSQLの初期設定です。
  • user: rootとしてコンテナを実行します。

6. bc-pga(pgAdmin用のコンテナ)

  • container_name: bc-pgaという名前でコンテナを作成します。
  • image: dpage/pgadmin4:7.8というpgAdminのイメージを使います。pgAdminはPostgreSQLを管理するためのツールです。
  • ports: 8000:80で、pgAdminにアクセスするためのポート8000を公開します。
  • volumes: ./pgadmin:/var/lib/pgadmin/storageで、pgAdminの設定をホストに保存します。
  • environment: pgAdminの初期設定を行います。
  • depends_on: bc-pgコンテナが先に起動するように設定します。

baserCMSをDockerでセットアップする手順

テスト用のコンテナを立ち上げる

まず、PHPコンテナのみを立ち上げます。この時点では、データベースが別のマシンにあり、phpMyAdminも使用しない設定です。

コマンドは以下の通りです:

docker run --name test -d baserproject/basercms:php8.1

このコンテナはテスト用で、baserCMSの動作に必要なファイルを確認し、後でホストにコピーするために使用します。

コンテナに入り、主要なファイルの場所を確認する

コンテナにアクセスして、重要なファイルがどこにあるかを確認します。これを行うには、以下のコマンドを使用します:

docker exec -ti test bash

確認すべきファイルの場所は以下の通りです:

  • /etc/apache2 → ウェブサーバーの設定ファイル
  • /usr/local/etc/php → PHP関連の設定ファイル
  • /var/www/html → ドキュメントルート(ウェブコンテンツのルートディレクトリ)

ホストにファイルをコピーする

主要なファイルをホスト側にコピーして、後から設定を変更できるようにします。以下のコマンドを実行します:

docker cp test:/usr/local/etc/php /root/bc-php/
docker cp test:/etc/apache2 /root/bc-apache2/

テスト用コンテナを停止して削除する

必要なファイルをコピーしたら、テスト用コンテナはもう必要ないので、以下のコマンドで停止して削除します:

docker stop test
docker rm test

本番環境でコンテナを立ち上げる

コピーしたファイルをマウントして、本番環境で使用するコンテナを立ち上げます。このとき、ホストにある設定ファイルをコンテナ内にマウントすることで、設定が反映されます。以下のコマンドを使用します:

docker run \
 --name bc \
 -p 8080:80 \
 -v /root/bc-php:/usr/local/etc/php \
 -v /root/bc-apache2:/etc/apache2 \
 -v /root/basercms:/var/www/html \
 -d baserproject/basercms:php8.1

具体的な説明の方向性

1. データベースが別の場所にある場合の注意点

この記事では、データベースが別のマシンやサーバーに存在する前提で説明を進めています。そのため、docker-compose.yml.defaultファイル内のデータベース関連の設定(bc-dbbc-pgなど)は不要となります。データベースが外部にある場合、PHPコンテナのみを起動し、そこに外部データベースとの接続設定を行う必要があります。

2. PHPコンテナのみのセットアップ手順

まず、テスト用のPHPコンテナを立ち上げ、コンテナ内の設定ファイルをホストにコピーします。この手順は、後でホストにコピーしたファイルをマウントして本番環境用のコンテナを起動するために必要です。

docker run --name test -d baserproject/basercms:php8.1

コンテナ内の設定ファイルをホストにコピーするためには、以下のコマンドを使用します。

docker exec -ti test bash
docker cp test:/usr/local/etc/php /root/bc-php/
docker cp test:/etc/apache2 /root/bc-apache2/

テスト用コンテナを停止して削除した後、ホストにコピーしたファイルをマウントして、本番用のコンテナを起動します。

docker run \
--name bc \
-p 8080:80 \
-v /root/bc-php:/usr/local/etc/php \
-v /root/bc-apache2:/etc/apache2 \
-v /root/basercms:/var/www/html \
-d baserproject/basercms:php8.1

3. docker-compose.yml.defaultファイルの利用について

上記の手順を理解した上で、もしデータベースをローカルでセットアップしたい場合には、docker-compose.yml.defaultファイルを利用して、すべてのサービスを一括で管理することも可能です。ただし、データベースが外部にある場合は、このファイルを利用する必要はありません。

4. 読者向けの提案文案「データベースが外部にある場合」

もし既に他のサーバーにデータベースを持っている場合は、docker-compose.yml.defaultファイルを使用せず、上記の手順に従ってPHPコンテナのみを起動してください。この場合、データベース関連の設定は不要です。

簡単にセットアップする方法

もし、複雑な手順を避けて簡単にセットアップしたい場合、docker-compose.ymlを使用するのが便利です。このファイルには、必要なコンテナ(PHP、データベース、メールキャッチャーなど)の設定がすべて含まれています。

セットアップ手順

ファイルの配置

docker-compose.ymlファイルをプロジェクトのルートディレクトリ(basercmsディレクトリ)に配置します。

コマンドの実行

以下のコマンドを実行するだけで、すべてのサービスが一括で起動します。

docker compose up -d

このコマンドは、docker-compose.ymlファイルに基づいて、すべてのコンテナをバックグラウンドで起動します。短時間でセットアップが完了し、すぐにbaserCMSの動作確認ができるようになります。

Windowsユーザーへの注意

ボリューム設定

Windowsを使用している場合は、docker-compose.ymlファイル内のコメント行を変更する必要があります。具体的には、db-volumeのコメントを外し、上の行をコメントアウトします。

ホスト側のポート許可設定

セットアップ後、ブラウザでbaserCMSにアクセスする前に、ホスト側で使用するポートのトラフィックを許可する必要があります。特に、8080ポートを使用する場合、以下のコマンドで許可します:

ufw allow 8080/tcp

また、OracleCloudを利用している場合は、セキュリティルールにおいてイングレスルールを追加し、ポート8080へのアクセスを許可することを忘れないようにします。この設定が不十分だと、ブラウザからのアクセスがブロックされることがあります。

ブラウザでのアクセス確認

すべての設定が完了したら、ブラウザで以下のURLにアクセスして、baserCMSが正常に動作しているかを確認します。

http://IPアドレス:8080/

アクセスした際にエラーが発生した場合は、その都度上記のトラブルシューティングを参考に対処してください。

書き込み権限がないと表示されたので、basercmsにあるいくつかのディレクトリのパーミッションを変更します。

書き込み権限のエラー

  • アクセスした際に「書き込み権限がない」と表示された場合、以下のディレクトリのパーミッションを変更する必要があります
    cd basercms
    chmod 777 composer vendor tmp logs config
  • このコマンドを実行することで、必要なディレクトリに書き込み権限が付与され、エラーが解消されます。

再びブラウザでアクセスして確認すると、先のエラーは直ったようですが新たなエラーが発生しました。

ライブラリのインストールに失敗しました。
コマンド実行をお試しください
cd /var/www/html/; export HOME=/var/www/html/composer/ ; yes | /usr/local/bin/php /var/www/html/composer/composer.phar update

ライブラリのインストール失敗

この手順により、composer.pharが作成され、必要なライブラリがインストールされます。

ライブラリのインストールに失敗した場合、以下のコマンドを実行して手動でインストールを試みます
cd /var/www/html/
export HOME=/var/www/html/composer/
yes | /usr/local/bin/php /var/www/html/composer/composer.phar update

もしくはコンテナに入って以下のコマンドを入力して問題を解決します。

docker exec -ti bc bash
cd composer
./composer.phar self-update
./composer.phar install

さらにconfigディレクトリにある環境設定ファイルの名前を使用できるように変更します。

cp .env.example .env

進めなくなったのでもう一度アクセスしなおします。
http://IPアドレス:8080/

またも書き込み権限のエラーがでましたが、先のように対処します。

chmod 777 plugins webroot/files db

管理ページにアクセスできない問題

  • baserCMSの管理ページにアクセスできない場合、URLアドレスにlocalhostが入力されてしまっていることが原因かもしれません。この場合、configディレクトリ内の環境設定ファイルを編集してURLアドレスを正しく設定します。
    vi .env
  • SITE_URLSSL_URLには通常のドメイン名を入力します。リバースプロキシ経由でアクセスする場合は、SITE_URLhttpに設定し、ADMIN_SSLfalseに設定する必要があります。

baserCMSにあるconfigディレクトリの環境設定ファイルを編集しないとurlアドレスにlocalhostが入ってしまうのでファイルを編集します。

vi .env

SITE_URLSSL_URLには通常のドメイン名を入力します。リバースプロキシ経由でアクセスする場合は、SITE_URLhttpに設定し、ADMIN_SSLfalseに設定する必要があります。

自分の環境ではLAN内はhttpで通信をしているからです。また、この場合、ADMIN_SSLはfalseにしないとエラーになります。

タイトルとURLをコピーしました