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

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

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

# LEMPとは
LEMP（レンプ）とは、OSの**L**inux・Webサーバである**N**ginX・データベースである**M**ySQL・スクリプト言語である**P**erl・**P**HP・**P**ython等からなるシステム群の総称です。
**LAMPのNginXバージョン**みたいなものです。

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

https://news.mynavi.jp/article/20210602-1897543/

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

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

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

https://www.conoha.jp/conoha/vps/

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/03f8b7df-195c-acbc-1a05-ba31c3f69f85.png)
Ubuntu等の有名Linuxディストリビューションだけでなく、超高速WP実行環境のKUSANAGIなどが非常にスムーズに作ることができます。
特に凄いのは**LEMPが最初から入ってるUbuntu環境をセットアップできる点**です。
普通にUbuntuをインストールした後にNginXとPHPとMySQL入れればええやん…と思うかも知れませんが**NginXとPHPのセットアップがちょっと面倒**なんですよね。

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


# 環境構築を実践
早速サーバーを構築していきます。
### ドメイン登録＋DNS設定
ドメイン関連のお話は今回の本題ではないので割愛。適宜コンパネのDNS設定でをいじって@のaレコードを次で作成するサーバーのIPアドレスに向けてください…
![rapture_20211129210526.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/32d4aa50-3876-3011-97fc-0d3874a2093f.png)
## LEMPを起ち上げ&OpenResty設定
では**3分で**作りましょう。のその前に…
LEMPを導入する前に注意しておきたいポイントは**普通にNginxを積んでいるわけでなく、OpenRestyがインストールされる**という点です。

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

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

ConoHa VPSのコントロールパネルにアクセス→[サーバー]→[サーバー追加]
お好きなSSDやメモリ・コア数を選んで**アプリケーションタブのLEMP(PHP)を選択**してサーバーを作成します。512MBプランでは東京リージョンのみ利用可能です。
![rapture_20211129211619.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/adba60f1-9aba-fa23-c743-c7b5b29bf748.png)
あとはタイトル通り３分ほど構築待ちをするだけで完了です。
早速サーバーにSSH接続すると、**NginXのルートディレクトリとMariaDBの初期rootパスワードが表示**されますのでメモっておきましょう。
![rapture_20211129212331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/a5477543-03d9-5f8a-7985-c1b93b116eae.png)
※上記インスタンスは削除済みなのでIPとかPwdは隠しません。
既にデフォルトで`phpinfo();`のファイルが置いてありFastCGI系の動作やモジュールの確認ができます。
![rapture_20211129212340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/b1fd7939-cdc9-04f9-6080-7a1cdefe3c48.png)

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

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

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

```conf
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
![rapture_20211129231520.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/14c5df5b-a9e2-e572-c8b7-9b73e3719aa2.png)
SSL設定の準備として**ファイヤーウォールの433ポートを開放**しましょう

```bash
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の保存場所を教えてくれるのでメモって**おきましょう
![rapture_20211129235346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/960912fd-e957-0aa7-9951-0d36140e1748.png)

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

```conf
    # 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ホストする等の際は各自お調べください。**
![rapture_20211130005520.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/7995f738-d18c-32e0-0068-e5327891c29b.png)
![rapture_20211129233458.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/f9b5338f-c8ae-de63-c599-471ebfcb6486.png)

以上割と真面目にLEMP環境の構築方法を紹介しました。テンプレートが豊富なので是非お試しあれ。あとConoHa VPSコンパネの背景が変わりました～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513165/64f4b0f6-2b87-0425-436d-0ffb6b54a890.png)