nakayumcの技術ブログ

エンジニア2年目のブログです。

SDCCに参加してグローバルIPを取得した話

はじめに

最近SDCC(島根データセンター友の会)に加入しました。 加入すると、オープンネットワークに接続することで様々なことを行うことができ、 申請すればグローバルなIPアドレスを貰えるのでサーバーを公開することができます。

今回はCisco 1941を使用してSDCCへ接続し、BGPで経路情報を受け取るところまでまとめます。

参加方法

はじめにSDCCに参加できるかどうかを調べます。 BGPというプロトコルを使うので一般のご家庭にあるルーター(バッファローなど)では接続できません。 CiscoYAMAHAなどのBGPに対応したルーターを買ってください。

準備ができたらここからメールを送信して申し込みしましょう!

トンネルの接続する情報を取得

申し込みをして、申請書を提出するとSDDCの管理者から会員証が届きます。 その会員証に、自分のAS番号やアカウント情報、割当られたIPアドレスなどが書いてあり、その接続情報を使用して対向とトンネルを掘ります。

・どのトンネリングプロトコルを使うのか? ・接続に使用するIPアドレスはどれを使うのか?

など、接続に必要になる情報を相手と相談して決めます。

今回はグローバルIPv6アドレスを使用し、対向のルーターGREというトンネリングプロトコルを使用してトンネルを張り、BGPで経路情報を受け取ります。 ここまで決めればあとは設定するだけです!

トンネルの設定

実際に設定を入れる前に1度情報を整理します。

使用するトンネリングプロトコル GRE

トンネルインターフェイスIPアドレス

相手側 IPv4 100.80.X.0 IPv6 2001:XXXX:XXXX:XXXX::1/127

自分側 IPv4 100.80.X.1 IPv6 2001:XXXX:XXXX:XXXX::0/127

トンネルインターフェイスIPアドレス 相手側 2001:XXXX:XXXX::1 自分側 2407:XXXX:XXXX::0

トンネルの通信を流すときに使用するIPアドレス

自分側: 2400:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:6D81 相手側: 2408:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:A129

使用するルーティングプロトコル BGP

AS番号 相手側 413XXXXX01 自分側 411XXXXX01

ルーターID

特に縛りは無かったのですが、設定しないと要らぬトラブルを招く恐れがあったので、トンネル用のIPv4アドレスをIDとして設定する事にしました。

100.80.XX.0

これで最低限のトンネルを張って経路を受け取れます。 設定は完璧である事を信じて設定を入れていきます!

トンネルの設定

interface Tunnel0
 ip address 100.80.XX.0 255.255.255.254
 ipv6 address 2001:XXXX:XXXX:400::/127
 tunnel source 2400:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:6D81
 tunnel mode gre ipv6
 tunnel destination 2408:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:A129
exit

BGPの設定

router bgp 413XXXXX01
 bgp router-id 100.80.XX.0
 bgp log-neighbor-changes
 neighbor 2001:XXXX:XXXX:XXXX::1 remote-as 4100200001
 neighbor 2001:XXXX:XXXX:XXXX::1 update-source Tunnel0
 neighbor 2001:XXXX:XXXX:XXXX::1 version 4
 neighbor 100.80.XX.1 remote-as 4100200001
 neighbor 100.80.XX.1 update-source Tunnel0
 neighbor 100.80.XX.1 version 4
 address-family ipv4
  no neighbor 2001:XXXX:XXXX:XXXX::1 activate
  neighbor 100.80.XX.1 activate
 exit-address-family
 address-family ipv6
  neighbor 2001:XXXX:XXXX:XXX::1 activate
 exit-address-family
exit

 

設定を入れたら経路が落ちてくるのをを待ちましょう。

経路が落ちてきているかどうかどうかは show ip routeshow ipv6 routeコマンドで確認できます。

もしなにも落ちてこないという方は原因を探ってみましょう。

  1. トンネルが正しく張れているか確認する
  2. BGPのピアが上がっているか確認する
  3. フィルターの設定を見直す

トンネルが正しく張れているか確認する

まずは相手のトンネル用インターフェイスpingを送って反応があるか確認します。

今回は2001:XXXX:XXXX:XXX::1が相手のトンネル用インターフェイスIPアドレスなので、こことの疎通を確認します。

次に、相手のトンネル終端アドレスにpingを飛ばします。 2400:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:6D81pingを送ります。

もしpingが通らないようでしたら原因を探しましょう。

BGPのピアが上がらなくて沼にはまった

私は、neighbor 100.80.XX.1 dont-capability-negotiateというコマンドがシスコのルータが自動で入力されてしまい、AS番号が正しく相手に送れていない問題がありあました。

no neighbor 100.80.XX.1 dont-capability-negotiateコマンドを入力したらピアが上げることができました!!

なかなかこういうことやるひとがいないので・・・あまり情報が・・・ないです...

サーバーを接続して通信してみる

SDCCから割り当てされたIPアドレスを使用して、実際に外部と通信してみます。

G0/0にv4とv6アドレスを割当て、G0/1にL2SWをかましてサーバを接続し、IPを割り当てて通信してみましょう。

設定が正しくできていれば実際にインターネットに出ることができ、実際にインターネットから通信を受け取る事ができるようになります。

あとがき

ここまでできれば後はサーバーを用意したりして遊べるようになっているはずです。

もしやる事が無くなってしまったら、ほかのSDCC加入者の方とBGPのピアを貼ってみてください。

LinuC-1 に合格した話

取得した経緯

学校で掲示されていたパンフレットで「学校でLinuCのチケットを買うと、LinuC 101、102がそれぞれ1万円で受けられる」ので取得してみました。

LinuC とはなんぞや?

簡単に言えば、Linuxの認定資格 LPI-JAPAN公式HPを見た方がわかりやすいかと思います、、。

お家騒動的なのがあってLPICとLinuCがあるみたいです。 資格のレベル感はあまり変わらないみたいですが、 LPIC: 世界的 LinuC: 日本独自 らしいです... 。

勉強方法

・まず合格教本でざっと読む ・実際に触ってコマンドを叩いてみる ・問題集を解く ・ping-tの問題集とコマ門を少しやりました。

使った本

最短突破 LinuCレベル1 バージョン10.0 合格教本[101試験, 102試験対応][Amazon] ・Linux教科書 LinuCレベル1 スピードマスター問題集 Version10.0対応 [Amazon]

この本を使ってました。

本番の試験

まず、Pearson VUEで申し込む。

当日は10分前ぐらいに着いて、説明を聞いたり、顔写真を撮ってもらったらテストスタート。 ほとんどの問題が、選択問題でした。

事前に練習していた問題とほぼ似ている、全く同じ問題が出ました。 そのおかげで、最初に問題を見た段階で「あ、この問題分かる、分からない」 がすぐ判断できます。

テストが終わると、すぐに合否が出ます。

点数は、最低200点で、最高が800点です。

私の点数は、
101試験: 706点

102試験: 666点

だったので、100点満点にすると、80ー90点くらい取ることができたと思います。

資格にチャレンジしてわかったこと

こんなに本買う必要なかったと思いました。

試験日先に決めて、申し込んでおくと、 ・お金かかってる ・時間が限られている

と自分にいい意味でプレッシャーをかけられます。 私の場合、2週間前に、試験の予約をして、超集中型で取り組めました!

かなりおすすめです!

Apache(httpd)をソースから構築する

概要

今回はソースからインストールしてLAMP環境を構築していきます。必要になるものはなるべくソースからインストールしていますが、wgetgccはdnfコマンドでパッケージからインストールします。この記事は Apacheをソースからインストールします。MySQLPHPは次回の記事でインストールしていきます。

環境

OS - ホスト: ESXi 7.0.1 - OS: CentOS8 (最小限のインストール)

使用ライブラリ - apache-2.4.46 - apr-1.7.0 - apr-util-1.6.1 - openeel-3.0.0 - pcre-8.44 - expat-2.3.0

事前準備

Apacheソースコードからインストールするためには、gccmakepcrepcre-devel のライブラリが必要になります。 なので、それらをあらかじめインストールしておきます。

# dnf install gcc gcc-c++ make pcre pcre-devel perl wget

httpdをソースからインストール

今回は、ソースからApache(httpd)をインストールしていきます。 以下のページにApacheのビルドに必要なライブラリやインストール手順が書かれていて、ここを参考にしています。 Compiling and Installing – Apache HTTP Server Version 2.4 これに従うと、APRAPR-Util と PCRE というのライブラリが必要になりますが、その他にもExpatというライブラリや追加した方が良いモジュールもあるので、作業がスムーズになるように整理してまとめていきます。 まず、Apache本体をダウンロードします。

# cd /usr/local/src 
# wget https://ftp.yz.yamagata-u.ac.jp/pub/network/apache/httpd/httpd-2.4.46.tar.gz
# tar zxvf httpd-2.4.46.tar.gz

APRAPR-Util

APR(Apache Portable Runtime)は、Apacheのサポートライブラリで、OS等の環境の違いを吸収する機能です。使用するOSが、機能が備わっていない場合、このAPRが代わりとなってその機能を提供してくれます。

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/apr/apr-1.7.0.tar.gz
# tar zxvf apr-1.7.0.tar.gz
# mv apr-1.7.0 httpd-2.4.46/srclib/apr

APR-Utilも同様に、ダウンロードと解凍をして、解凍できたディレクトリをhttpd-2.4.46/srclib/apr-utilに移動させます

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/apr/apr-util-1.6.1.tar.gz
# tar zxvf apr-util-1.6.1.tar.gz
# mv apr-util-1.6.1.tar.gz httpd-2.4.46/srclib/apr-util

以上でAPRAPR-Utilの準備は終わりです。

PCRE

PCRE(Perl Compatible Regular Expressions)は、Perl互換の正規表現を他の言語でも使えるようにするもので、多くのミドルウェアで必要とされているライブラリです。 事前準備が終わっていなければ、インストールしてください。 PCREのビルドをしていきます。wget でダウンロードして、展開・解凍を行い、解凍・展開してビルドします。

# wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
# tar zxvf pcre-8.44.tar.gz
# cd pcre-8.44.tar.gz
# ./configure 
# make 
# make install

Expat

Expatとは、XMLファイルの中身のデータを解析・整形するライブラリです。 Welcome to Expat! · Expat XML parser のサイトから、wget でダウンロードして、展開・解凍を行い、解凍・展開してビルドします。

# wget https://github.com/libexpat/libexpat/releases/download/R_2_3_0/expat-2.3.0.tar.gz 
# tar zxvf expat-2.3.0.tar.gz 
# cd expat-2.3.0.tar.gz 
# ./configure 
# make 
# make install

OpenSSL

これでApacheのビルドができますが、TLS通信は必須なので、OpenSSLをソースからビルドしていきます。 この段階で設定しておかないと、後からOpenSSLを使用できないからです。(再度ビルドすることになる)

# wget https://www.openssl.org/source/openssl-3.0.0-alpha14.tar.gz
# tar zxvf openssl-3.0.0-alpha14.tar.gz
# cd openssl-3.0.0-alpha14.tar.gz
# ./config
# make
# make install

Apacheのビルド

これで準備ができたので、Apacheをビルドしていきます。

# cd httpd-2.4.46/
# ./configure \
--prefix=/usr/local/httpd \
--with-included-apr \
--with-pcre=/usr/local/src/pcre-8.44/pcre-config \
--enable-mods-shared=all \
--enable-ssl \
--with-ssl=/usr/local/ssl \
--with-mpms-shared=all
# make
# make install

configureのオプションは以下の通りです。

オプション 説明
–prefix インストールするディレクトリを指定
–with-included-apr srclib内のAPRAPR-Utilもビルド対象にする
–with-pcre インストールしたPCREのディレクトリを指定
–enable-mods-shared 動的モジュールをビルド対象にする
–enable-ssl sslモジュールをビルド対象にする
–with-ssl インストールしたOpenSSLのディレクトリを指定
–with-mpms-shared worker, prefork, eventをビルド対象にする

ビルドができたら、新しくapacheのユーザとグループを作成し、メイン設定ファイルを変更します。 サービスを動かす用のユーザなので、デフォルトシェルに/sbin/nologinを指定して、ログインを禁止にします。

# cd /usr/local/httpd/
# groupadd apache
# useradd apache -g apache -s /sbin/nologin
# chown -R apache.apache .
# vi conf/httpd.conf

# vi /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/httpd/bin/apachectl start
ExecReload=/usr/local/httpd/bin/apachectl graceful
ExecStop=/usr/local/httpd/bin/apachectl stop

[Install]
WantedBy=multi-user.target

以下のコマンドで変更を反映させます。

# systemctl daemon-reload

ファイアウォールの設定を変更して、HTTP/HTTPS通信用の待ち受けポートを開放させます。

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload

自動起動&今すぐ起動の設定を行います。

# systemctl enable httpd --now

まずはcurlコマンドでページをとってこれるか確認します。

# curl http://192.168.1.220
<html><body><h1>It works!</h1></body></html>

そしたら、実際にWebブラウザで開いてみて、この画面が表示されればApacheがビルドして、起動することができています。

まとめ

こんかいは、Apacheのみでしたが、これから、LAMP環境のMySQL PHPのソースからのインストールに挑戦していきたいと思います。

ESXi7.0でVMFSL領域を減らしてデータストアの容量を増やす方法

TL;DR

・ESXi7.0からコンテナに対応するため、ESX-OSData(VMFSL領域)が作られます

・VMFSLの容量を減らすにはインストール時にオプションを付ける必要があり、既にインストール済みの方はクリーンインストールする必要があります。 減らす方法は以下をご覧下さい。

概要

バージョン7.0の新機能等はこちらのリリースノートに詳しく詳細が記載されています。

簡単に言うと「Kubernetesへのネイティブに対応するため」で、要するにコンテナ対応です。

まず、公式ガイドの ESXi ハードウェア要件をまとめると以下のようになります。

  • ESXi 6.7 まで - 最低 1 GB の起動デバイス - VMFS ボリュームと 4 GB のパーティションを起動デバイスに作成するには、5.2 GB 以上のデバイスが必要(HDD/SSD/SAN 等) - SDカード、USB メモリをブートデバイスとする場合はコアダンプの保存に利用するため 4GB 以上、推奨は 16 GB 以上のフラッシュドライブの利用が推奨されている
  • ESXi 7.0 から - 最低 4 GB の起動デバイス - SD カード、USB メモリをブートデバイスとする場合は 8 GB 以上が推奨 - HDD、SSD、NVMe などのその他のデバイスでは 32 GB 以上が推奨され、ブート パーティションESX-OSData ボリュームが作成される - 138GB を超える HDD、SSD、NVMe ドライブの場合は ブート パーティション、ESX-OSData ボリューム、および VMFS データストアが作成される

このように、ESXi 7 では新たに ESX-OSData という VMFS-L フォーマットの新しい領域が作成されます。

可変の ESX-OSData が 120GB まで拡張されるため、VMFSで利用できる容量が少なくなってしまいます。

VMFSL(VMFS-L)を減らす方法

「コンテナなんか使わないのに!」と考えている方(大半がこれ)は無駄な容量なので削減したいところですが、この領域を減らすにはインストール時に起動オプションを入れる必要があり、インストール済みの方は再度クリーンインストールする必要があるということです。

※インストール後は減らすことが出来ません。 もし出来たら連絡していただけますと幸いです。修正いたします。

ではやり方を説明していきます。

この操作を実行したことによって損害が発生しても責任は負えません。 自己責任でお願いいたします。
※ライセンスキーを控える、仮想マシン等のデータは別のデータストア(他のHDDやSSD)に移しておくことをおすすめします。

いつも通りにrufusなどでESXiのインストーラを作成してください。 インストーラーが起動したら、すぐに(右下に書いてある)SHIFT + O を押して、起動オプションを編集します。

既に、cdromBoot runweaselが記述されているので、うしろに(今回は8GBでインストールを進めます)

autoPartitionOSDataSize=8192

を追記(大小文字は区別されます)して、Enterを押してください。

あとはそのままインストール作業をしてください。インストールできたら、Web管理画面に移動して、パーティションを確認してみましょう。

このようにVMFSLの領域が8GBになっています。

まとめ

VMFSLが大量に浪費されているのは Kubernetes へのネイティブな対応するためでした。これで容量を増やすことができると思います。 それでは、楽しいESXiライフを。

RHEL8でNginx1.18+PHP7.4+MariaDB10.3でWordPressをインストールする

はじめに

WordPressをRHEL8環境下でインストールしたので備忘録として手順をまとめます。

CentOS8が、2021年12月31日にサポートが終了してしまうので、代わりのOSを探していたところ、2月1日から個人開発者には本番環境を含む最大16システムまで無料でRed Hat Enterprise Linuxの利用が認められるようになりました。(個人でも商用でも1人で使用するサーバに限られるようです。)  

インストールした環境

- ホスト: ESXi 6.7
- OS: Red Hat Enterprise Linux 8
- nginx 1.18
- PHP 7.4
- MariaDB 10.3
- WordPress 5.7

今回はRed Hat CDNを使用して [サーバー] で進めました。

各パッケージのインストールと設定

RHEL8ではパッケージ管理に大きな変更がありました。 Red Hatからリリースされるコンテンツは BaseOS と Appstream の二つのリポジトリから配信されるようになり、特に Appstream では、従来のパッケージ形式のソフトウェア管理に加わる形で、新たにモジュールという概念が追加されました。 モジュールとは、小さなリポジトリの集合から構成されるもので、RPM をさらに拡張させた新たなパッケージ管理の仕組みです。yum コマンドの使用感をそのままに新たな概念が導入された結果、dnf コマンドにはパッケージ形式とモジュール形式という二つのインストール形式が共存することになりました。

nginx1.18のインストール

普通に dnf module install でインストールすると1.14のバージョンがインストールされます。 下記のコマンドを叩いてみてください。

dnf module list nginx

この画像を見てみると、Stream列のところの 1.14 に [d][e] となっていますね。これは、インストールされるデフォルト[d]のバージョンが1.14で、それが有効[e]になっていることを示しています。ですので、dnf module install で進めると1.14がインストールされるわけです。

なので、下記のコマンドで1.18のnginxをインストールします。

dnf module install nginx:1.18

nginxの起動&自動起動の有効化

下記のコマンドで起動と自動起動の有効化が同時にすることができます。

systemctl --now enable nginx
firewalld (ポート着信許可設定)

次に、firewall-cmd コマンドで http(80) と https(443) のポートを開けていきます。

firewall-cmd --permanent --add-service=http
success

firewall-cmd --permanent --add-service=https
success

firewall-cmd --reload
success

firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: cockpit dhcpv6-client http https ssh <- ここに「http」と「https」が追加されたことを確認
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

次に、正しくポートが空いているか実際に確認します。

サイトにアクセスできるか確認

これでサーバのIPアドレスでアクセスすると下記のような画面が表示されます。

この画面が出れば、正しくポートが開いています。

PHP7.4のインストール

PHPも同様に、dnf module install を使用して、インストールしていきます。

dnf module install php:7.4

あと、WordPressを動かすのに足りないパッケージもインストールします。

dnf install php php-devel php-mysqlnd php-pdo php-gd

PHPのバージョン確認

バージョンが7.4であることを確認します。

# php -v
PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies
 
# php-fpm -v
PHP 7.4.6 (fpm-fcgi) (built: May 12 2020 08:09:15)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies
PHPのバージョン非表示

続いて、PHPバージョンを非表示にしていきますWappalyzerという chrome拡張機能でバージョンが 7.4.6であることが分かってしまいます。このような状態だと、攻撃に有用な情報を取得される可能性がありますので念のため非表示にします。

変更するには /etc/php.ini ファイルを変更します。

vi /etc/php.ini

目安として380行目あたりにあると思われますが、expose_php = On を Off に変更します。

;;;;;;;;;;;;;;;;;
; Miscellaneous ;
;;;;;;;;;;;;;;;;;

; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
expose_php = On <- Off に変更

/etc/php-fpm.d/www.conf のユーザ変更
vi /etc/php-fpm.d/www.conf

/etc/php-fpm.d/www.confをスーパーユーザーのテキストエディタで開き、下記のように2つの箇所を変更してください。

変更前
user = apache
group = apacheapache の部分をnginxに変更

変更後
user = nginx
group = nginx
変更前
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660

↑コメントを外して、nobody を nginx に変更

変更後
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

編集が終わったら保存してエディタを終了します。

また、このままだとセッションを保存しておくディレクトリの所有者が apache になっていて、ユーザーのログインなどが出来なくなってしまうのでchownコマンドで変更します。

chown -R nginx:nginx /var/lib/php/session

これができたら起動します。

systemctl enable --now php-fpm

MariaDB10.3 のインストール

MariaDBは dnf install を使用してインストールしていきます。

dnf install mariadb-server mariadb

起動&ユーザー作成

まずMySQLを起動と自動起動を有効化します。

systemctl enable --now mariadb

そしたら、mysql_secure_installationコマンドで、rootパスワード設定と初期設定をしていきます。

mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):何も打たずにEnter
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
# パスワード入力
New password:
# パスワード再入力
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

# 匿名ユーザを削除するか? [y]を選択
Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

# rootユーザのリモートログインをブロックするか? [y]を選択
Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

# テストDBを削除するか? [y]を選択
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

# 権限テーブルをリロードするか? [y]を選択
Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
データベース作成

MySQL内でWordPress用のDB、ユーザ作成をします。
ユーザへ権限付与 MySQL 8.0から GRANT文でのユーザ作成ができないので、CREATE文でユーザ作成をして、権限付与しています。 また、MySQL 8.0からユーザ作成はcaching_sha2_password形式がデフォルトの設定になっていますが、PHP7.2以降は対応していないので従来のmysql_native_password形式指定をしています。

これらのコマンドでデータベースとユーザーを作成してください。パスワードに関しては、rootに設定したものとは別のものにすることをお勧めします。

mysql -uroot -ppassword <-オプションと文字列をくっつける

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.27-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database wp_database default character set utf8;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> grant all on wp_database.* to wp_admin@localhost identified by 'wp_admin用のパスワード';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> exit
Bye

Wordpressのインストール

wgetコマンドで WordPress をダウンロード、/var/www/html/wordperssに展開しました。さらにchownコマンドで 所有権をnginxに設定します。

cd /tmp/
wget https://ja.wordpress.org/latest-ja.tar.gz
tar zvxf latest-ja.tar.gz -C /var/www/html/
chown -R nginx:nginx /var/www/html/wordpress
ll /var/www/html/wordpress/

nginxの設定

以下の内容に書き換えてください。心配な方は必要に応じて元の記述内容をコメントアウトしてください。

vi /etc/nginx/conf.d/wordpress.confuser nginx;
worker_processes auto;
error_log /var/log/nginx/main_error.log warn;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}

http {
    server_tokens off;  #これをどこかに追加

    server {
        listen 80;
        server_name _;

        location / {
                return 301 https://example.com$request_uri;
        }
    }

    server {
        listen 443 ssl;
        server_name example.com;

        access_log  /var/log/nginx/ssl_access.log  main;
        error_log  /var/log/nginx/ssl_error.log warn;

        index index.php index.html;
        root /var/www/html/wordpress;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

        location ~* /wp-config.php {
                deny all;
        }

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

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

example.com となっている場所はすべてご自身のドメインに置き換えてください。編集が終わったら nginxを再起動してください。

systemctl restart nginx

SELinuxの設定

SELinuxが有効化された状態だと、PHPでのファイル書き込みとインターネット通信が制限されてしまうので、テーマやプラグイン、アップデートのインストールができません。なので、これらを許可する必要があるので、下記のコマンドを叩きます。

setsebool -P httpd_can_network_connect 1
chcon -R -h -t httpd_sys_script_rw_t /var/www/html/wordpress

WordPress のセットアップ

ブラウザからサーバーIPの /wp-admin/install.php にアクセスしてください。例えば、ドメインexample.com だとURLは https://example.com/wp-admin/install.php です。

アクセスすると、このような画面が表示されます。

次に進んで、データベースの設定の画面では以下のようにMariaDB で設定したデーターベース名・ユーザー名・パスワードを指定します。
ここでエラーが出る方は、上記の設定をもう一度見直してみてください。

この記事の通りにしているならばデータベース名は wp_database、ユーザー名は wp_admin 、パスワードはMariaDBのところで wp_admin用パスワードを設定したと思うので、そのパスワードを入力してください。

正しくできれば、「インストールを実行」という画面が表示されます。続いてボタンをクリックしてください。

あとはサイトのタイトルと管理者のユーザーを作って「Wordpressをインストール」押せば設定は完了です。

成功したら「ログイン」を押すとログイン画面に移動するので、先ほど作った管理者用のユーザーでログインしてください。

これでインストール完了です。

終わりに

以上でインストール完了ですが、現状ではWordpressを動かすのに必要最低限の設定しか行っていません。ので今後nginx の設定も書いていきたいです。