12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ロリポップ ライトプランでComposerを利用する

Last updated at Posted at 2018-09-28

レンタルサーバーにPHPのライブラリをインストールしようとして困ったことはありませんか? ロリポップのライトプランはSSHでログインできませんが、Composerを利用することはできます。さくらのレンタルサーバーのライトプランでも概ね同様です。

ロリポップの特徴

Webサーバー(Apache)では、公開するためのファイルを配置するディレクトリパスの設定(ディレクティブ)をDocumentRootと呼びます。さて、レンタルサーバーによってはDocumentRootの外(上)のディレクトリにもアクセスできます。しかし、ロリポップのライトプランのFTP機能では、ApacheのDocumentRoot = ルート(アクセスできる一番上のディレクトリ)なので、その外にファイルを置けるような概念ではありません。

この仕様がなぜ良くないかと申しますと、PHPファイルにはDocumentRootに配置してWeb上からアクセスされるもの(典型的にはURLとphpファイル名が一致するもの)と、関数やクラス定義だけをするファイルなどがあるからです。プロジェクトの構成によっては「PHPで書かれた設定ファイル」や「部分テンプレート(共通テンプレート)」などがあるかもしれません。

要は、PHPファイルは直接起動されたいファイルと、直接起動されたくないファイルに分かれるのです。ロリポップ以外のレンタルサーバーではDocumentRootの外に配置することで簡単に分けることができますが、ロリポップの構成ではそれはできません。

よい

.
├── cache
├── config.php
├── lib
│   └── functions.php
├── public
│   └── index.php
├── template
│   ├── body.tpl.php
│   ├── footer.tpl.php
│   └── header.tpl.php
└── vendor

だめ

.
├── cache
├── config.php
├── functions.php
├── index.php
├── template
│   ├── body.tpl.php
│   ├── footer.tpl.php
│   └── header.tpl.php
└── vendor

DocumentRootに置くべきファイルとは

伝統的なPHP(CGI)ではURLとphpファイル名が一致するので、Webページとしてアクセスされたいファイルとユーザーに直接公開するファイル(CSS, JavaScript, 画像ファイルなど)のみをDocumentRootに置きます。

一方で、ユーザーに直接公開/実行されたくないPHPファイルは理想的にはDocumentRootに置いてはいけません。典型的には関数定義ファイル、設定ファイル、コマンドラインから実行する前提のPHPスクリプト、Webページを表示するためのincludeされる前提の部分テンプレートファイル、ログファイル、コンパイルキャッシュファイル、セッションファイルなどです。

しかしながら、ロリポップではその理想的な構成をとることができません。

.htaccessでディレクトリのアクセスを拒否する

サーバーの仕様 / サービス - レンタルサーバーならロリポップ!によれば、2018年9月28日現在でロリポップはApache 2.4.xを利用していて、 .htaccess での設定が利用可能になっています。

.htaccess はディレクトリ単位でApacheの設定を変更するためのファイルです。これを使ってアクセス権限を制御する方法はApacheの公式ドキュメントAccess Control - Apache HTTP Server Version 2.4で紹介されてます。

一番単純には、内容を公開したくないディレクトリに以下のような内容のファイルを配置してください。

.htaccess
Require all denied

Requireディレクティブの書式についてはmod_authz_core - Apache HTTP Server Version 2.4#requireを読んでください。この記述は古い書式Deny from Allと、やりたいことの意味は同じです。

また、設定を行った後は必ず意図通りにアクセスが拒否できるか動作確認をしましょう。セキュリティ対策をしたつもりが設定を間違ったせいで有効化されてないと悲しいですからね。ダミーの内容のファイルを配置してみて、設定を外したときにそのファイルが読み取れてしまうことを確認してみてもよいでしょう。

Composerはローカルでセットアップする

お手持ちの作業用のPCでセットアップしてください。

  1. composerコマンドがなければ https://getcomposer.org/download/ に従って取得
    • コマンドとしてインストールしない場合は php composer.phar ... のように実行することもできます
  2. コマンドラインで composer install --no-dev --prefer-dist --optimize-autoloader を実行する
  3. FTPSなどで vendor/ ファイルの内容ごと転送する

ただし依存するパッケージやフレームワークによってはcomposer install時に独自のスクリプトが動作して環境依存のファイルが作成されることも(もしかすると)ありうるので、これだけでは完動せず別の設定が必要なこともありえます。注意して検証してくださいね。

特にフレームワークや既存のWebアプリ/CMSを利用する際はdevelopmentモード(開発モード)の設定のままで公開サーバーに設置しないように十分気をつけてください。

おまけ

フレームワークで作ったアプリケーションをロリポップでホストできるか?

やればできるけど、やらない方がいいんじゃないでしょうか。Laravelであればpublic、CakePHPであればwebrootなどがデフォルトのDocumentRoot名ですが、どちらもDocumentRootの上の階層にファイルを置ける前提の構成です。

ロリポップのようにDocumentRoot外に置けない構成のレンタルサーバーに無理に設置した場合、考慮漏れで設定ファイルが漏洩するようなリスクは容易に想像がつきます。

今回の記事の本筋とは関係ないですが設定ファイルの漏洩はコワイですね。 .envが不意に公開されないようにするための.htaccessの記述方法は読者への課題とします。

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?