LNMP

ウェブサーバーの定番環境:LNMP(LEMP)スタック

ウェブサーバーの定番環境

LNMP,すなわちLinux + Nginx + MySQL + PHPは動的サイトを作るときによく使われるソフトウェア環境のセットです。LEMPと呼ばれる場合もあります。

The E in LEMP comes from the pronunciation of Nginx: Engine-X (en-juhn-ecks).
The importance is the sound of the first letter rather than its written representation.
Besides, LEMP is actually pronounceable and doesn’t sound like you’re just reciting letters of the alphabet.

要はNginxの本来の意味はEngine-X、だからEを取ってLEMPとしたほうがNginxの発音んを正しく表現できるし、LNMPよりLEMPの方が単語として発音できて読みやすい。

NginxをApacheにしたLAMPも広く存在しています。

関連記事

HTTPミドルウェア ブラウザーでリンクをクリック、もしくはURLを入力したら,ブラウザーがHTTP(s)でサーバーにリクエストを送信して,サーバーがリクエストを処理して返信の情報をブラウザーに送ります。ブラウザーがサーバーから返されたHT[…]

nginx-vs-apache

Linux

サーバーのOSとして定番のLinux。
サーバー向けのディストリビューションは何でもOKですが、ここは使いやすさを考えて、Ubuntu Server 18.04LTSを選びました。
CentOSも多くのVPSで標準提供していますが、どちらを使っても構いません。
両方の特徴と選び方はこちらの記事でまとめてみました。

関連記事

サーバー用OS VPSなどに使われてるOSに関して無料で利用できるLinuxが主流であることはまず間違いありません。 でもLinuxはOSのカーネルであって、実際にOSとしてインストールできるのはUbuntu、CentOS、Debianなど[…]

Linux Logo

Nginx

優秀なパッケージ管理ソフトapt-getのお陰で、ソフトウェア類のインストールは簡単です。
まずはNginxをインストールします。

sudo apt-get update
sudo apt-get install nginx

インストールが完了したらNginxが自動的に起動されますので、PCのブラウザーに自分のサーバーのIPアドレスを入力して、以下の画面が表示されれば成功の証です。

nginx welcome page

一つ注意することはLAN上のPCからドメインネームでアクセスする際にうまく接続できない場合がありますので、まずはサーバーのLAN IPアドレスでアクセスするべきです。
その原因と解決方法はこちらをご覧ください。

関連記事

一番近いところは逆に接続できない? 事務所や自宅でサーバーを立ち上げたら、ネットワーク設定によって、外から正常にアクセスできたのに、LAN内部のPCからサーバーに接続できないという謎現象が発生する場合があります。 その動作を説明するために、[…]

access internal server with domain

Nginxのコンフィグファイル

Nginxをインストールしたら、/etc/nginx/sites-available/defaultというファイルが存在して、Nginxのデフォルトの動作ルールが記述されています。
そして/etc/nginx/sites-enabled/defaultのシンボルリンクが作られています。
Nginxはこのsites-enabledフォルダから設定ファイルを読み込みます。
先ほどのWelcomeページが表示されるのもこのdefaultファイルで設定された挙動です。

つまり、Nginxの設定ファイルは2つのレイヤーがあります:

  1. /etc/nginx/sites-availableに、各種(通常は1つのウェブサイトに1つのファイル)設定ファイルを作成します
  2. /etc/nginx/sites-enabledに発効させたい設定ファイルのリンクを作成します。

基本的な設定項目

元のdefault設定は通常テンプレートとして使われて、発効させたくないので、まずはsites-enabledからdefaultのリンクを削除しておきます。
今作りたいウェブサイトのドメインをexample.comとし,defaultからsites-avialableにexample.com用のファイルを作成します。

sudo cp /etc/nginx/sites-available/deault /etc/nginx/sites-available/example.com

次はエディタでexample.comを開いて、server{}の部分を編集します。

  1. WordPressはPHPを利用しているため、indexファイルにindex.phpを追加します。
  2. server_nameに自分のドメインネーム(example.com)を記入する。
  3. PHPを実行するためのコードがコメントアウトされていますので、コメントを解除します。
  4. もし同じサーバーにapacheもインストールされているなら、.htaccessを無視するためのコードのコメントを解除します。

変更されたコードはこんな感じです:

server{
    listen 80 default_server
    listen [::]:80 default_server

    root /var/www/html;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name example.com

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

場合によってfactcgi_passで指定したphpのバージョンと実際にインストールしたバージョンが合わないことがありますので、自分の環境に合わせて修正する必要があるかもしれません。
Ubuntu Server 18.04LTSでは、この記事を書いた時点でnginxのデフォルト設定がphp7.0-fpm.sockでしたが,aptからインストールしたphpは7.2でした。
そのせいでwordpressをインストールする時

connect() to unix:/run/php/php7.0-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream

のエラーが表示されて、fastcgi_pass unix:/run/php/php7.0-fpm.sockを7.2に直すことで解決しました。

設定が完了したら最後にsites-enabledでシンボルリンクを作って、Nginxを再起動して完成です。

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo service nginx restart

MySQL

データベースはmySQLを使います。
VPSによてMariaDBを提供している場合もありますが、設定はほぼ一緒です。
まずは定番のaptからパッケージをインストールします。

sudo apt-get install mysql-server

完成したらwordpress用のデータベースとユーザーを作成します。

sudo mysql -u root -p

create database wordpressDB;
create user 'wpuser'@'localhost' identified by 'password';
grant all on wordpressDB.* to 'wpadmin'@'localhost'

これらの情報は後でWordpressをインストールするときに必要です。

DB名 wordpressDB
ユーザー名 wpuser
パスワード password

PHP

PHPは最低php-fpm php-mysqlの2つのパッケージが必要です。

sudo apt-get install php-fpm php-mysql

これでWordpressを動かす環境の準備ができました。
次回はWordpressをインストールします。