お名前.com レンタルサーバーで Laravel を動かす

仕事でお名前.com レンタルサーバー で Laravel を動かす経験をしたので、手順等を残しておきます。

お名前.com レンタルサーバーに Laravel をインストールするうえでポイントとなるのは、以下の点です。

  • コマンドライン版の php が使える
  • curl コマンドが使える
  • ドメインの DocumentRoot は、/home/(ユーザー名)/public_html/(ドメイン名)/ で固定されていて変更できない
  • Web 経由の PHP スクリプトはユーザーの権限で実行される
  • (おまけ)git コマンド、ssh コマンドが使える
    →Deployer を使ってデプロイを自動化するときに必要

Composer をインストールする

このあたりはComposer のインストールから Laravel 6.0 開発環境の構築まででも触れています。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mkdir ~/bin
mv composer.phar ~/bin/composer

インストーラーのハッシュはバージョンによって異なるので、公式ページを確認してください。インストールした composer を ~/bin/ に移動しておきます。

Node.js をインストールする

Laravel Mix を利用するために Node.js が必要なので、インストールします。インストール方法はいろいろあると思いますが、今回は nvm を使いました。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

でインストーラーを実行した後、いったんログアウトし、再度ログイン後

nvm install --lts --latest-npm

を実行することで、最新の LTS 版の Node.js と npm がインストールされます。

Laravel 用のディレクトリを作成し、Laravel をインストールする

上記のように、お名前.com レンタルサーバーは、DocumentRoot を変更できません。ここで ~/public_html/example.com/ に Laravel をインストールしてしまうと、設定等が外部から閲覧可能となってしまい、セキュリティ的によろしくありません。そこで、Laravel 用のディレクトリを作成し、そこに Laravel をインストールします。Laravel 6 を ~/production/ にインストールするのであれば、

cd ~
composer create-project laravel/laravel production "^6.0"

でインストールできます。

公開ディレクトリにシンボリックリンクを張る

このままでは Laravel の公開ディレクトリ(~/production/public/)にアクセスできないので、シンボリックリンクを張ります。ディレクトリを指定してシンボリックリンクが張れれば楽なのですが、お名前.com レンタルサーバーでは、~/public_html/example.com/example.com ディレクトリを削除することができないので、一つずつシンボリックリンクを張っていきます。

ln -s ~/production/public/.htaccess ~/public_html/example.com/
ln -s ~/production/public/favicon.ico ~/public_html/example.com/
ln -s ~/production/public/robots.txt ~/public_html/example.com/
ln -s ~/production/public/web.config ~/public_html/example.com/
ln -s ~/production/public/index.php ~/public_html/example.com/
ln -s ~/production/public/mix-manifest.json ~/public_html/example.com/
ln -s ~/production/public/js ~/public_html/example.com/
ln -s ~/production/public/css ~/public_html/example.com/
ln -s ~/production/public/storage ~/public_html/example.com/

.htaccess を編集する

Laravel をインストールした直後の ~/production/public/.htaccess のままだとエラーが出てしまうので、修正します(<IfModule mod_negotiation.c> ~ </IfModule> の部分を削除)。

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

これでインストール完了です。以後は基本的に ~/production/ 以下を編集していくことになります。

なお、コマンドライン版の PHP とサーバ版の PHP が同じユーザー権限で動くため、エラーログの出し分けをしなくてもパーミッションのエラーは出ません。

この記事を書いた人

グッドネイバー

“ Webに悩むお客さまの「よき隣人」でありたい ” をモットーに、Web システム開発(主に Laravel)、Web マーケティング支援の仕事をしています。詳しい業務内容はこちら。お仕事のご依頼・ご相談はこちらからお気軽にどうぞ。

PHPLaravel