Cinfu VPS Nginx+php-fpm構成で作ったった

Cinfu VPS Nginx+php-fpm構成で作ったった

ども、皆さんこんばんちわ。
ピン村でございます。

今回は、Cinfu VPS (ドイツ) でNginx+php-fpm(remi)構成を試していきたいと思います。
最終的には、WordpressとGrafanaの立ち上げまで行います。

Contents

Cinfu VPSって何?

セーシェル共和国の首都ヴィクトリアに拠点を構えるClosco Ltd という会社が運営しているVPSになります。
この記事を書くまで知らなかったんですがそうらしいです。
いやー、でもデータセンターの展開がヨーロッパ中心なので恐らくドイツあたりが本拠点だと思うのですがホントにセーシェルか?とは思う部分があります。

結論: 詳細は知らん(´Д`)

構築していくよ~

1. Nginx (repo) インストール

root@localhost ~# vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

root@localhost ~# dnf -y remove httpd* && dnf -y --disablerepo=AppStream install nginx

2. php-fpm(remi) インストール

root@localhost ~# dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

root@localhost ~# dnf -y module install php:remi-7.4

root@localhost ~# dnf -y install php php-fpm php-mbstring php-bcmath php-intl php-zip php-opcache php-ldap && dnf -y install php-mysqlnd php-gd

php-mysqlnd はMariaDBなどのデータベースを使う際、絶対に使うモジュールになるのでインストール忘れ等無いようにしましょう。

3. php-fpm初期設定 (www.conf)

root@localhost ~# vi /etc/php-fpm.d/www.conf  

[www.conf]
#変更点 ピックアップ
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

listen.owner = nginx
listen.group = nginx

:wq でwww.confを保存
www.conf 以下確認
; Note: This value is mandatory.
listen = /run/php-fpm/www.sock

listen = 以降同じであれば何もいじらないこと。
異なる場合は、指定されているディレクトリを覚えておくこと

4. nginx 初期設定 (default.conf)

/etc/nginx/conf.d/default.conf

server {
    listen       [::]:80;               #←IPv6は[::]で書きますー。
    server_name  blog.yukiafronia.com;

    charset utf-8;
    access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {

         root           /usr/share/nginx/html;      #←こいつもドキュメントルートで絶対パスで書かなきゃダメらしい
         fastcgi_pass   unix:/run/php-fpm/www.sock; #←[::]:9000でダメだったからsocket通信にした。ファイルパスは/usr/php-fpm.d/www.confのlisten=~~.sockを参照
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;   #←変更した
         include        fastcgi_params;
     }
}

次に、Nginx がデフォルトで作っている50x.htmlなどのエラーページ等々を削除していきます。
削除出来たら、Nginx と php-fpm を起動しておきます。


root@localhost ~# rm -rf /usr/share/nginx/html/*

root@localhost ~# systemctl enable nginx php-fpm

root@localhost ~# systemctl start nginx php-fpm

※CertbotでSSL化させたい人向け※

root@localhost ~# rpm -ivh http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/python3-mock-2.0.0-11.el8.noarch.rpm

root@localhost ~# dnf -y install python3-certbot && dnf -y install certbot

root@localhost ~# certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory --preferred-challenges dns-01 -d '*.ドメイン名' -m メールアドレス --agree-tos --manual-public-ip-logging-ok

/etc/nginx/conf.d/default.conf
server {
    listen       [::]:80;               #←IPv6は[::]で書きますー。
    server_name  blog.yukiafronia.com;

    charset utf-8;
    access_log  /var/log/nginx/host.access.log  main;

    ssl_certificate     /etc/letsencrypt/live/ドメイン名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {

         root           /usr/share/nginx/html;      #←こいつもドキュメントルートで絶対パスで書かなきゃダメらしい
         fastcgi_pass   unix:/run/php-fpm/www.sock; #←[::]:9000でダメだったからsocket通信にした。ファイルパスは/usr/php-fpm.d/www.confのlisten=~~.sockを参照
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;   #←変更した
         include        fastcgi_params;
     }
}

参照先:
Certbot Wildcard CentOS8 作り方  

画像はこちら

image

5. MariaDB Install + Create Database

MariaDBをインストールしていきます。
VPSが特殊な環境な為、Cinfu VPS (IPv6)に限りこのやり方です。
また、国内VPS、ESXi上に載せるVMに関してもIPv6 onlyの場合は下記のコマンドラインが参考になると思います。

今んところの、必要なパッケージに関するダウンロードリンクは下記参照

galera-4-26.4.4-1.rhel8.0.el8.x86_64.rpm

MariaDB-common-10.4.13-1.el8.x86_64.rpm

MariaDB-client-10.4.13-1.el8.x86_64.rpm

MariaDB-server-10.4.13-1.el8.x86_64.rpm

root@localhost ~# dnf -y install galera-4-26.4.4-1.rhel8.0.el8.x86_64.rpm && dnf -y install MariaDB-common-10.4.13-1.el8.x86_64.rpm && dnf -y install MariaDB-client-10.4.13-1.el8.x86_64.rpm && dnf -y install MariaDB-server-10.4.13-1.el8.x86_64.rpm

root@localhost ~# systemctl start mariadb
root@localhost ~# systemctl enable mariadb

root@localhost ~# mysql -u root

mysql> create database wordpress;

mysql> create user 'wpadmin'@'localhost' identified by '************';

mysql> grant all on wordpress.* to 'wpadmin'@'localhost';

ちなみに、MariaDBをrpmから引っ張ってきた場合 /usr/sbin/semodule`` /usrlib/tmpfiles.d/net-snmp.confでそれぞれエラーが出ますが、MariaDB自体の起動、挙動には影響が出なかったので放置してしまいました。

image

※ MariaDBとwordpressの間で認証エラーになった際の対処法

root@localhost ~# mysql -u root

mysql> alter user 'wpadmin'@'localhost' identified with mysql_native_password by '*********';

参照先 : WordPress推奨構成とデータベースの作成

6. 海外VPSを利用する上でのhttp TimeOut回避策

海外VPSを利用すると、場所によってはping値が300とか言う頭のおかしい遅さになることがしばしばです。

こうなってしまうと、pluginのアップロードだったり、画像のアップロードだったりと時間のかかる作業に支障が出てしまうこともあるのであらかじめ、nginxとphp側でTimeOutの時間を伸ばしておきます。

  1. /etc/php.ini 内のmax_execution_timeを変更

    max_execution_time = 3000000
  2. /etc/php-fpm.d/www.conf 内のrequest_terminate_timeoutを変更

    request_terminate_timeout = 3000000
  3. /etc/nginx/nginx.conf 内のfastcgi_read_timeoutを変更

    fastcgi_read_timeout 3000000;

各パラメーターの意味

• max_execution_time
PHPスクリプトの実行時間
• request_terminate_timeout
リクエストを終了するまでの待ち時間
• fastcgi_read_timeout
FastCGIプロセスへデータを送信するための待ち時間

7. WordPressアップロード制限回避

WordPressのアップロード制限はデフォルトで8Mだった気がします。
画像アップロードするのにも10MB以上はあるぞ? という場合は、デフォルトのアップロード制限を変更し10GBぐらいにしておきましょう。

  1. /etc/nginx/conf.d/default.conf内にclient_max_body_sizeを追記

    client_max_body_size 10G;
  2. /etc/php.ini内のpost_max_sizeを変更

    post_max_size = 10G
  3. /etc/php.ini内のupload_max_filesizeを変更

    upload_max_filesize = 10G

これで、大丈夫だと思います。

あとは、wordpressのadminダッシュボードでごちゃごちゃ弄った結果....

image

こうなりました。
まぁ、いいんじゃないですかね?w
ということでおしまいです。

総括

IPv6 Only になるといつも使っているリポジトリが使えなかったり PHPの composerが使えなかったり、githubのcurilが使えなかったり、rubyのプラグイン導入が出来なかったりとかなり制約事項が多いですがIPv4の枯渇状況を見てこれからは積極的にIPv6を使っていかなければならないかと思います。....

また、グローバルアドレスがIPv4に比べ莫大な数持つことからセキュリティ面の懸念もしなければなりませんがサービスとして時代に即したサービスの展開と保守、運用が、求められるかと思います。
ちょっと難しいところもありますが是非、皆さんもIPv6 OnlyサービスLet's Try!!