ConoHa VPSでLEMP(Nginx+PHP)環境を3分で用意する


VPSを使ったLEMP開発環境の構築を超高速・超簡単に行う方法を紹介します。どん兵衛を作る暇すら与えずに、かつ失敗なく作れるので、カお試しあれ。

今年もアドカレの季節ですね。ConoHa Advent Calendar 2021 5日目です。
昨日は@Tapo0825さんがこのはちゃん系のお話をなさっているので是非ご覧下さい!
割と技術系全振りで、真面目な内容なので面白さには期待しないでください…(笑)

LEMPとは

LEMP(レンプ)とは、OSのLinux・WebサーバであるNginX・データベースであるMySQL・スクリプト言語であるPerl・PHP・Python等からなるシステム群の総称です。
LAMPのNginXバージョンみたいなものです。

LAMPではApache HTTP ServerをWebサーバーに利用していますが、今年遂にNginxがApacheのシェアを抜いて1位になりました。やはりApacheよりもより多くのアクセスを捌ける速度の優位性という点がポイントですね。

そんな近年の風潮もありますのでこのはちゃんでLEMP環境を作ってみましょう。Dockerでも良いけど…w

※あ、ちなみにLEMPの他の「L」「M」「P」は変わりないです。なんでLNMPじゃないかって?言いにくいからだよ!!!(Maybe...)

ConoHa VPSについて

ConoHa VPSはGMOインターネットが運営するVPSを提供するIaaSです。

ConoHaの良い所

私が2年ほど使っていて感じたConoHa VPSの良いところをざっと紹介します。

  • コンビニ決済ができる=クレカを持たない学生でも利用可
  • 価格の割にストレージの容量が多い(SSD)
  • イメージテンプレートがあり任意のOS・システムが設定不要で構築できる

image.png
Ubuntu等の有名Linuxディストリビューションだけでなく、超高速WP実行環境のKUSANAGIなどが非常にスムーズに作ることができます。
特に凄いのはLEMPが最初から入ってるUbuntu環境をセットアップできる点です。
普通にUbuntuをインストールした後にNginXとPHPとMySQL入れればええやん…と思うかも知れませんがNginXとPHPのセットアップがちょっと面倒なんですよね。

nginxは高速な代わりに機能は豊富ではないので、PHPを動作させるにはphp-fpmというFastCGIのインターフェースを経由しないといけないためその設定が必要です。ですがこのはちゃんには予めLEMPを構成済みのイメージが用意されてるのでこれを使うだけで完了です。
image.png
また、他社のVPSプラント比べてSSDの容量が多いことも良い点です。
某さくらVPSだとSSD25GBで¥650/月ですが、ConoHaメモリ1GBプランはSSD 100GBで¥880/月ですのでWordPressなどの容量を食うシステムをホスティングする場合、相当コスパがいいですよ!

環境構築を実践

早速サーバーを構築していきます。

ドメイン登録+DNS設定

ドメイン関連のお話は今回の本題ではないので割愛。適宜コンパネのDNS設定でをいじって@のaレコードを次で作成するサーバーのIPアドレスに向けてください…

LEMPを起ち上げ&OpenResty設定

では3分で作りましょう。のその前に…
LEMPを導入する前に注意しておきたいポイントは普通にNginxを積んでいるわけでなく、OpenRestyがインストールされるという点です。

NginxにLua処理系の統合等の拡張を施したOpenRestyを使用するLinux+Nginx(OpenResty)+MariaDB+PHP構成。

Luaとか久しぶり聞いたな…と思いつつ注意しましょう。まぁ中身はまんまnginxです。余談ですがちょうど先週にLEMPテンプレートが更新されてUbuntuに切り替わりました。

ConoHa VPSのコントロールパネルにアクセス→[サーバー]→[サーバー追加]
お好きなSSDやメモリ・コア数を選んでアプリケーションタブのLEMP(PHP)を選択してサーバーを作成します。512MBプランでは東京リージョンのみ利用可能です。

あとはタイトル通り3分ほど構築待ちをするだけで完了です。
早速サーバーにSSH接続すると、NginXのルートディレクトリとMariaDBの初期rootパスワードが表示されますのでメモっておきましょう。

※上記インスタンスは削除済みなのでIPとかPwdは隠しません。
既にデフォルトでphpinfo();のファイルが置いてありFastCGI系の動作やモジュールの確認ができます。

VirtualHost設定

続いてNginxでドメインやルートディレクトリなどのVirtualHostの項目を設定します。プレーン環境からインストールした場合とディレクトリや起動方法が異なりますのでご注意くださいい。
LEMPイメージインストールの場合のNginxの重要な事項

■再起動方法
service openresty restart
■nginxのファイル
/usr/local/openresty/nginx
■nginxの設定ファイル群
/usr/local/openresty/nginx/conf

そして、Virtualhostはデフォルトの設定ファイルnginx.confが用意されてあり、PHP設定も記載済みなのでこれを改変します。バックアップを忘れずに!!!
以下全文を紹介。基本は#のコメントアウトを外すだけですので記述量はほぼ無いです。

http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

    server {
        listen       80;
        #server_name  localhost;
        #ドメイン名を入力
        server_name  twnow.tokyo;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location / {
            #ルートディレクトリを指定!
            root   /var/www;
            index  index.php index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        # ここはコメントアウトしなくても別にいいよ
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        # PHPを動作させる設定。ConoHaの場合以下の設定じゃないと使えないよ!
        location ~ \.php$ {
            #ルートディレクトリを指定
            root           /var/www;
            #以下コメントアウトするだけ!
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
            include        fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
}

保存したらservice openresty restartで再起動。
適当にルートディレクトリ配下に<?php echo $_SERVER['SERVER_NAME']; ?>的なプログラムを配置して、ドメイン名が表示されていたらOK

SSL設定の準備としてファイヤーウォールの433ポートを開放しましょう

sudo ufw allow 'Nginx HTTP'
sudo ufw reload

SSL設定

最後にドメインのSSL設定をLet's Encryptで行います。以下を順に入力

sudo apt install certbot
certbot certonly

ウィザード形式で勝手に作ってくれます。最初の選択は2(webroot)を指定、あとは文章を読もう。

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

最後にfullchain.pemとprivate.pemの保存場所を教えてくれるのでメモっておきましょう

最後にさっきVirtualhostで設定したnginx.confhttp {}内に以下server {}文字を追記して保存してください。内容は適宜変更。

    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  twnow.tokyo;
        root /var/www;
        ssl_certificate      /etc/letsencrypt/live/twnow.tokyo/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/twnow.tokyo/privkey.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /var/www;
            index  index.php index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www;
        }

        location ~ \.php$ {
            root           /var/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

これでLEMP環境+ドメインホスト設定が完了です!nginx系には.htaccessみたいな概念もないのでWPホストする等の際は各自お調べください。

以上割と真面目にLEMP環境の構築方法を紹介しました。テンプレートが豊富なので是非お試しあれ。あとConoHa VPSコンパネの背景が変わりました~