🍆

Running Laravel 9 on Synology Docker

2022/02/09に公開

Abstruct

SynologyのPHPパッケージはバージョン7.4が最終版です(2022年2月8日現在)。Laravel 9を動かすためにはPHP-8.0以上が必要なので、その動作環境を満たすことができません。そこで、Docker上に php:apache コンテナを構築し、Synologyのリバースプロキシ機能で仮想ホストを割り当てて、そこへSSL証明書を割り当てることで代替環境を構築します。

0. 事前準備

  • あらかじめ composer create-project でLaravl 9のプロジェクトを作成し、Synologyの共有フォルダ上へ展開して、ユーザ http にアクセス権を付与しておきます
  • 仮想ホストを設定する場合にはDNSサーバへホスト名を登録しておきます
  • SSL証明書を設定する場合には電子証明書を取得しておきます

1. Dockerパッケージのインストール

Synologyのパッケージ センターで "docker" を検索し、Dockerパッケージをインストールします。

2. php:apacheコンテナの構築

インストールしたDockerパッケージを起動します。次の2.1~2.4の手順で php:apache コンテナを構築します。

2.1 イメージのダウンロード

レジストリタブで "php" を検索します。リストから php を選択してダウンロードボタンをクリックします。

しばらくしてタグの選択が表示されたら apache を選択します。

イメージのダウンロードが開始されます。

2.2 コンテナの作成

イメージタブのリストから php:apache を選択し、起動ボタンをクリックします。

コンテナの作成画面が開きます。はじめにコンテナ名を決定します。本稿では laravel9 としました。続いて詳細設定ボタンをクリックします。

詳細設定→ボリュームで、フォルダの追加を行います。あらかじめ composer create-project しておいたLaravel 9のトップディレクトリを選択します。

フォルダのマウントパスを決めます。apacheのデフォルト設定を活かせるように基本的には /var/www 以下を指定します。本稿では /var/www/laravel9 としました。

詳細設定→ポート設定で、ローカルポートを固定します。本稿では 18080 としました。

詳細設定→環境で、APACHE_DOCUMENT_ROOT 変数を追加します。値には、マウントパスの下にある public ディレクトリを指定します。本稿では /var/www/laravel9/public となります。

適用をクリックし、コンテナの作成を完了させ、コンテナを起動します。

2.3 コンテナの設定(1/2)

コマンドの入力が必要になります。PCのターミナルからSynologyへSSHで接続します。

ssh admin@YourSynologyHost

Synologyへ接続したら、次のコマンドでコンテナ環境内へ入ります。(laravel9 は本稿におけるコンテナ名です。各自の命名に合わせて変更してください)

sudo docker exec -it laravel9 bash

コンテナ環境内へ入ったら、次の2つのコマンドを実行し、環境変数 APACHE_DOCUMENT_ROOT を反映させる設定を行います。

sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

続いて、コンテナ環境内にユーザ http をUID=1023で作成します。

adduser --uid 1023 --system --group http

apacheのrewriteモジュールを有効化します。

cd /etc/apache2/mods-enabled/
ln -s ../mods-available/rewrite.load .

コンテナを抜けます。

exit

コマンドの入力はここまでです。ターミナルを閉じます。

2.4 コンテナの設定(2/2)

SynologyのDocker画面のコンテナタブから laravel9 コンテナを選択して停止し、編集ボタンをクリックします。

環境変数 APACHE_RUN_USERAPACHE_RUN_GROUP を追加し、値を http に設定します。

適用してから、再度、コンテナ laravel9 を起動します。

コンテナの作成と設定はこれで完了です。

2.5 (オプション)コンテナへの直接アクセスの制限

本稿では詳細説明しませんが、必要に応じてコンテナへの直接アクセスの制限を行ってください。.htaccessによる制限、Synologyのファイアウォールの設定、外部L3ルーティング装置によるフィルタリングなど、規模に応じていくつかの手段があります。

3. リバースプロキシの設定

仮想ホストを割り当てる場合には、Synology標準のリバースプロキシ機能により設定できます。コントロールパネルのログイン ポータル→詳細設定からリバース プロキシを開きます。

作成ボタンを押してリバースプロキシ規則を設定します。Targetのホスト名は別途DNSサーバに設定しておいたホスト名を入力し、HTTPの場合はポートに80、HTTPSの場合はポートに443を入力します。送り先ポート番号はDockerコンテナに設定したローカルポート番号を入力します。

4. SSL証明書の割り当て

仮想ホストへSSL証明書を割り当てることができます。コントロールパネルのセキュリティ→証明書に電子証明書と秘密鍵を追加します。本稿では *.example.jp のワイルドカード証明書を追加してありましたので、それを使用します。

設定ボタンを押すと仮想ホストへSSL証明書を割り当てることができます。本稿では laravel9.example.jp に対して *.example.jp 証明書を割り当てます。

5. まとめ

SynologyにはPHP-8.xパッケージがないため、そのままではLaravel 9を動かすことができませんが、Dockerパッケージで php:apache コンテナを立てることにより代替環境を構築することができます。コンテナへのリバースプロキシ、仮想ホストの割り当て、SSL証明書の割り当てなどは、Synologyの標準機能で行うことができます。

GitHubで編集を提案

Discussion