SSH接続できないレンタルサーバーでLaravelを使う
Laravelのインストール方法を調べると、SSH接続してcomposerで…という記事がたくさん出てきます。
しかし、レンタルサーバー等でSSH接続できない環境で使いたいケースもあると思い、本記事を書くことにしました。
SSH接続できないサーバーでもLaravelは使えます!(ただし制限事項はあります)
phpはスクリプト言語なので、ファイルさえ配置してしまえば普通に使うことができます。
つまり、必要なファイルを一式持ってきてアップロードし、公開ディレクトリの設定をすることで問題なく動作します。
今回はその手順をご説明したいと思います。
Laravelを使うための前提条件(サーバー要件)
どんな環境でもLaravelを使えるかというと、ある程度は条件があります。
以下、思いついた条件を記載しておきます。
- .htaccessなど、Webサーバー周りの設定を書き換えられること
- Mod Rewriteが使用できること
- Laravelのバージョンにあったphpのバージョンが使用できること
Laravelのファイル群をダウンロードする
正式な手順ではcomposerを使ってインストールしプロジェクトを作成しますが、Laravelのファイルは公式のgithubよりダウンロードすることができます。
この時気を付けなければならないのが、古いバージョンを入れる場合はブランチやTagsなどから必要なバージョンを見つけてダウンロードしてきてください。
公開ディレクトリにしか設置できない場合の設定方法
Laravel自体はセキュリティ面を考えるとできればWebとして公開されていないディレクトリに配置したいものです。
ただ、レンタルサーバーによってはpublic_htmlなどの公開ディレクトリにしかファイルを置けないケースがあります。
LaravelとしてのWeb公開ディレクトリは、Laravelホームディレクトリにあるpublicですので、公開ディレクトリに入ったトラフィックをpublicに回すような設定を書けば良いのです。
多くのサーバーでは、Apacheの.htaccessが使えると思いますので、具体的な書き方のサンプルをご紹介します。
Web公開ディレクトリ直下の.htaccessに以下のように記述します。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ public/$1 [QSA,L] </IfModule>
SSH接続できないことによる制限事項
一番大きな制限は、artisanコマンドが使えないということです。
新たなControllerやmigrationファイルを作ったりということができませんので、サンプルのファイル等をコピーして手動で作成する必要があります。
またmigrationに関しては作成できないだけでなく、migrate処理ができませんので、DBは別途管理する必要が出てきます。
もうひとつはcomposerが使えないので、拡張モジュールのインストールができません。
開発用環境作成のすすめ
Laravelで既に本番運用しているものの開発サイトを作ったりする場合は丸ごとファイルを持ってくれば良いのですが、レンタルサーバー側で何かを公開したいという場合には上記の制限事項により開発しにくくなりますので別途開発用の環境を準備することをお勧めします。
手っ取り早いのは、dockerを使って環境を作ってしまうことです。
MacやWindowsのDocker Desktopは無償で使用できますし、dockerhubにはLaravelのイメージもあります。
Dockerのインストールについてはここでは割愛しますがLaravelの環境の作り方を軽く使い方をご紹介しておくと、上記イメージを使ってdocker-composeで起動します。
まずはプロジェクトを配置するディレクトリ(フォルダ)を用意し、Windowsであればコマンドプロンプトから、LinuxやMacであればターミナルから以下のコマンドを実行します。
cd (用意したディレクトリ) curl -LO https://raw.githubusercontent.com/bitnami/bitnami-docker-laravel/master/docker-compose.yml docker-compose up -d
WindowsのD:\temp\laravel_appでの作業時のスクリーンショットがこちらです。
ここでは、-d無しで実行していますが、-dを付けて起動した方がプロンプトを離してくれるので次の作業が楽です。
-d無しの場合はCtrl+Cで止まりますが、使い終わったら
docker-compose stop
として止めておきましょう。
次に起動するときは、同様にdocker-compose startで起動できます。
なお、この方法では最新版が入りますので、必要に応じてdocker-compose.ymlを書き換えて使うのが良いでしょう。
artisanコマンドを使う場合は、以下のように使用します。
サンプルは設定されたルートの一覧を表示するコマンドですが、コントローラーを作ったりDBのマイグレーションも同様に実行可能です。
docker-compose exec myapp php artisan route:list
ちなみに、コンテナが上がっていない状態でコマンドを叩いたのが1行目です。
起動している状態で実行する必要があります。