Slim4 をサブディレクトリかつ本体はドキュメントルートより上にデプロイした状態で動作させる

経緯

slimphp/Slim-Skeleton を サブディレクトリに配置しつつ、 app/ や src/, vendor/ 等のディレクトリはドキュメントルートより上の階層にデプロイした状態で動作させることができたのでメモしておきます。

ディレクトリ構造

var/
  └ www/
     └ sampleapp/
          ├ slim-app/                   // Slim4-Skeleton 本体 ( public/ ディレクトリ以外) デプロイ先
          │    ├ app/
          │    ├ src/
          │    ├ vendor/
          │    └ etc.
          │
          └ public_html/                // ドキュメントルート
               └ subdirectory/          // サブディレクトリ
                    └ sub2/             // 2個目のサブディレクトリ
                         ├ .htaccess    // Slim4-Skeleton の public/ ディレクトリにある .htaccess
                         └ index.php    // Slim4-Skeleton の public/ ディレクトリにある index.php

今回の最終的な構成はこのようになりました。

この階層構成は

  • アプリケーション本体はドキュメントルート下には置きたくない
  • 複数の Slim アプリケーションを配置する可能性がある
  • サブディレクトリも深い階層に設置する可能性がある

ということで、本体のデプロイディレクトリやドキュメントルート下のサブディレクトリをそれぞれ1つずつ余計に掘っています。

手順

すぐ削除するデモ環境なので割と雑に設定を。

# cd /var/www/sampleapp/
# mkdir slim-app
# chown apache:apache slim-app/
# chmod 775 slim-app/
# ls -al
合計 16
drwxr-xr-x  4 ADMIN  ADMIN  4096  MM月 dd  yyyy hh:ii .
drwxr-xr-x 18 ADMIN  ADMIN  4096  MM月 dd  yyyy hh:ii ..
drwxrwxr-x  2 apache apache 4096  MM月 dd  yyyy hh:ii slim-app
drwxrwxr-x  4 apache apache 4096  MM月 dd  yyyy hh:ii public_html

#
# pwd
/var/www/sampleapp/

FTP 等で subdirectory/, subdirectory/sub2/ を掘ります。

この状態になったら、

  • /var/www/sampleapp/slim-app/public/ 以外(他不要なファイル・ディレクトリは都度省く)をアップロード
  • /var/www/sampleapp/slim-app/logs/ の権限を 777 、 /var/www/sampleapp/slim-app/logs/app.log を 666 にする
  • ソースコードの public/index.php 内で __DIR__ . '/../~~~.php'; となっているパスを __DIR__ . '/../../../slim-app/~~~.php'; とデプロイ先の環境のパス階層に合わせる
  • /var/www/sampleapp/public_html/subdirectory/sub2public/ 以下のファイルをアップロード

として動作することを確認しました。なお、 public/.htaccess はデフォルトのままでOKでした。

なお、DBがある場合でDBサーバ上で必要な場合は接続情報を変更すること (接続元Webサーバがローカルの開発環境とサーバで異なるので別権限が必要)。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。