Ubuntu 14.04でNginx WebサーバーにLaravelをインストールする方法

前書き

Laravelは、Web開発者向けの最新のオープンソースPHPフレームワークです。 開発者が完全に機能するWebアプリケーションをすばやく実行するための簡単でエレガントな方法を提供することを目的としています。

このガイドでは、Ubuntu 14.04にLaravelをインストールする方法について説明します。 WebサーバーとしてNginxを使用し、この記事の執筆時点でLaravelの最新バージョンであるバージョン4.2を使用します。

バックエンドコンポーネントをインストールする

Laravelを使い始めるために最初に必要なことは、それをサポートするスタックをインストールすることです。 これは、Ubuntuのデフォルトリポジトリを使用して実行できます。

最初に、ローカルパッケージインデックスを更新して、使用可能なパッケージの最新リストがあることを確認する必要があります。 その後、必要なコンポーネントをインストールできます。

sudo apt-get update
sudo apt-get install nginx php5-fpm php5-cli php5-mcrypt git

これにより、実際にLaravelコードを実行するために必要なPHPツールとともに、NginxがWebサーバーとしてインストールされます。 Laravelのインストールに使用するPHPの依存関係マネージャーであるcomposerツールがパッケージのプルダウンに使用するため、gitもインストールします。

PHP設定を変更する

コンポーネントがインストールされたので、構成を開始できます。 PHPから始めますが、これはかなり簡単です。

最初に行う必要があるのは、Nginxが使用するPHP-fpmプロセッサ用のメインPHP設定ファイルを開くことです。 テキストエディタでsudo権限でこれを開きます。

sudo nano /etc/php5/fpm/php.ini

このファイルの1つの値を変更するだけです。 cgi.fix_pathinfoパラメータを検索します。 これはコメントアウトされ、「1」に設定されます。 これのコメントを外し、「0」に設定する必要があります。

cgi.fix_pathinfo=0

これにより、要求されたファイル名が見つからない場合、同様の名前のスクリプトを実行しないようにPHPに指示します。 このタイプの動作を許可すると、攻撃者は特別に設計されたリクエストを作成して、PHPをだまして実行すべきでないコードを実行しようとする可能性があるため、これは非常に重要です。

終了したら、ファイルを保存して閉じます。

PHP管理の最後の部分は、Lryvelが依存しているMCrypt拡張機能を明示的に有効にすることです。 これを行うには、php5enmodコマンドを使用します。これにより、オプションのモジュールを簡単に有効にできます。

sudo php5enmod mcrypt

これで、行った変更を実装するために、php5-fpmサービスを再起動できます。

sudo service php5-fpm restart

これでPHPが完全に構成され、先に進むことができます。

NginxとWebルートを構成する

次に対処する必要がある項目は、Webサーバーです。 これには、実際には2つの異なるステップが含まれます。

最初のステップは、Laravelファイルを保持するために使用するドキュメントルートとディレクトリ構造を構成することです。 ファイルを/var/www/laravelというディレクトリに配置します。

このとき、このパスの最上位(/var)のみが作成されます。 -pフラグをmkdirコマンドに渡すことにより、パス全体を1つのステップで作成できます。 これは、特定のパスを構築するために必要な親パス要素を作成するようユーティリティに指示します。

sudo mkdir -p /var/www/laravel

Laravelコンポーネント用の場所が確保されたので、Nginxサーバーブロックの編集に進むことができます。

sudo特権でデフォルトのサーバーブロック構成ファイルを開きます。

sudo nano /etc/nginx/sites-available/default

インストール時には、このファイルにはかなりの数の説明コメントがありますが、基本的な構造は次のようになります。

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm;

        server_name localhost;

        location / {
                try_files $uri $uri/ =404;
        }
}

これは、これから行う変更の優れた基盤となります。

最初に変更する必要があるのは、ドキュメントルートの場所です。 Laravelは、作成した/var/www/laravelディレクトリにインストールされます。

ただし、アプリの駆動に使用されるベースファイルは、publicと呼ばれるこのサブディレクトリに保持されます。 ここでドキュメントルートを設定します。 さらに、ディレクトリの場所を要求するときに、対応するHTMLを探す前に、index.phpファイルを提供するようにNginxに指示します。

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/laravel/public;
    index index.php index.html index.htm;

    server_name localhost;

    location / {
            try_files $uri $uri/ =404;
    }
}

次に、サーバーの実際のドメイン名を参照するようにserver_nameディレクティブを設定する必要があります。 ドメイン名がない場合は、サーバーのIPアドレスを自由に使用してください。

また、Nginxがリクエストを処理する方法を変更する必要があります。 これは、try_filesディレクティブを介して行われます。 最初にリクエストをファイルとして提供しようとする必要があります。 正しい名前のファイルが見つからない場合は、要求に一致するディレクトリのデフォルトのインデックスファイルを提供しようとします。 これに失敗すると、クエリパラメータとしてリクエストをindex.phpファイルに渡す必要があります。

上記の変更は、次のように実装できます。

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/laravel/public;
        index index.php index.html index.htm;

        server_name server_domain_or_IP;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }
}

最後に、PHPファイルの実際の実行を処理するブロックを作成する必要があります。 これは、.phpで終わるすべてのファイルに適用されます。 ファイル自体を試し、それをパラメーターとしてindex.phpファイルに渡そうとします。

リクエストのパスが実行のために正しく分割されるようにfastcgi_*ディレクティブを設定し、Nginxがphp5-fpmが通信に使用しているソケットを使用し、index.phpファイルがこれらの操作のインデックスとして使用されます。

次に、SCRIPT_FILENAMEパラメータを設定して、PHPが要求されたファイルを正しく見つけられるようにします。 完了すると、完成したファイルは次のようになります。

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/laravel/public;
    index index.php index.html index.htm;

    server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

完了したら、ファイルを保存して閉じます。

すでに有効になっているdefaultサーバーブロックファイルを変更したため、構成の変更を取得するには、Nginxを再起動する必要があります。

sudo service nginx restart

スワップファイルの作成(オプション)

ComposerとLaravelのインストールに進む前に、ビルドが正しく完了するように、サーバーでスワップを有効にすることをお勧めします。 これは通常、メモリの少ないサーバー(512MBドロップレットなど)で操作している場合にのみ必要です。

スワップスペースを使用すると、メモリ内の情報量が使用可能な物理メモリスペースを超えたときに、オペレーティングシステムがメモリからディスクにデータを一時的に移動できます。 これにより、メモリを集中的に使用するタスクを実行しているときに、アプリケーションまたはシステムがメモリ不足(OOM)例外でクラッシュするのを防ぎます。

必要に応じてオペレーティングシステムがディスクの一部をシャッフルするように、スワップスペースを非常に簡単に設定できます。 上記のように、これはおそらく使用可能なRAMが1GB未満の場合にのみ必要です。

まず、次のように入力して空の1GBファイルを作成できます。

sudo fallocate -l 1G /swapfile

次のように入力して、スワップスペースとしてフォーマットできます。

sudo mkswap /swapfile

最後に、このスペースを有効にして、カーネルが次のように入力して使用できるようにします。

sudo swapon /swapfile

システムは次の再起動までこのスペースのみを使用しますが、サーバーが使用可能なメモリを超える可能性があるのはビルドプロセス中のみなので、これは問題になりません。

ComposerとLaravelをインストールする

これで、ようやくComposerとLaravelをインストールする準備が整いました。 最初にComposerをセットアップします。 次に、このツールを使用してLaravelのインストールを処理します。

書き込みアクセス権があるディレクトリ(ホームディレクトリなど)に移動し、Composerプロジェクトからインストーラスクリプトをダウンロードして実行します。

cd ~
curl -sS https://getcomposer.org/installer | php

これにより、ホームディレクトリにcomposer.pharというファイルが作成されます。 これはPHPアーカイブであり、コマンドラインから実行できます。

ただし、グローバルにアクセス可能な場所にインストールしたいです。 また、名前をcomposer(ファイル拡張子なし)に変更します。 次のように入力して、これを1ステップで実行できます。

sudo mv composer.phar /usr/local/bin/composer

Composerがインストールされたので、それを使用してLaravelをインストールできます。

Laravelを/var/www/laravelディレクトリにインストールしたいことを忘れないでください。 Laravelの最新バージョンをインストールするには、次のように入力できます。

sudo composer create-project laravel/laravel /var/www/laravel

この記事の執筆時点では、最新バージョンは4.2です。 プロジェクトの今後の変更によりこのインストール手順が正しく完了しない場合は、代わりに次のように入力して、このガイドで使用しているバージョンを強制できます。

sudo composer create-project laravel/laravel /var/www/laravel 4.2

これで、ファイルはすべて/var/www/laravelディレクトリ内にインストールされますが、それらは完全にrootアカウントによって所有されています。 Webユーザーは、コンテンツを正しく提供するために部分的な所有権と権限が必要です。

次のように入力して、Laravelディレクトリ構造のグループ所有権をWebグループに付与できます。

sudo chown -R :www-data /var/www/laravel

次に、/var/www/laravel/app/storageディレクトリのアクセス許可を変更して、Webグループの書き込みアクセス許可を許可できます。 これは、アプリケーションが正しく機能するために必要です。

sudo chmod -R 775 /var/www/laravel/app/storage

これでLaravelが完全にインストールされ、準備が完了しました。 デフォルトのランディングページを表示するには、ウェブブラウザでサーバーのドメインまたはIPアドレスにアクセスします。

http://server_domain_or_IP

Laravel default landing page

これで、Laravelフレームワークでアプリケーションの構築を開始するために必要なものがすべて揃いました。

結論

サーバーでLaravelを起動して実行する必要があります。 Laravelは非常に柔軟なフレームワークであり、構造化された方法でアプリケーションを構築するのに役立つ多くのツールが含まれています。

Laravelを使用してアプリケーションを構築する方法については、Laravel documentationを確認してください。

Related