Running Laravel 9 on Synology Docker
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_USER
と APACHE_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の標準機能で行うことができます。
Discussion