nginx + MariaDBを使ってWordPressをCLIでデプロイしていくよ~!

インストールするもの

・nginx

yum install -y nginx

自動起動設定とサービスの開始

systemctl enable nginx
systemctl start nginx

状態チェック

systemctl status nginx

一応curlで応答してるか確認。

curl localhost

・MariaDB

yum install -y mariadb-server

自動起動とサービスの開始

systemctl enable mariadb
systemctl start mariadb

状態チェック

systemctl status mariadb

===ここまでOSにインストールした話===
===ここからソフトの設定の話===

初期設定

mysql_secure_installation

ここは空でエンターを押す

Enter current password for root (enter for none):

「ここでDBのパスワード設定すんのね~♪」と思って入れてみたら怒られました。空でエンターしてください。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

パスワード設定しますか?→はい

Set root password? [Y/n]

MariaDB用のルートパスワードを入力。

下記は全部「Y」(Yes)でよいと思いますよ~。

Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]

英語読めない人への解説;
匿名ユーザを削除しますか? ←当然はい。
リモートからのルートログインを拒否しますか? ←当然はい。
デフォルトで入っているテスト用DBとそれに対するアクセス権を削除しますか? ←デフォルトはアタックの標的になるのではい。
権限テーブルを読み込みなおしますか? ←やって損はまったくない。はい。

DBにログイン。さっきリモートからのルートログイン拒否したけど、リモートってループバック以外のことを指してるんかね。

mysql -u root -p

データベースの表示。

show databases;

データベースの新規作成。
create database [DB名]

create database wordPress;

できたか確認。

show databases;

余談だけど私のターミナルソフトは背景だけ白にしてあるから、黄色で表示する文字が読めないのにこのDBはやたらと黄文字で返してくる。全然読めない。(設定変えなさいよ)

バージョン確認。

select version();

ユーザの確認。

select  host, user from mysql.user;

ユーザの作成。
create user '[ユーザ名]'@'[接続元]'
ユーザ名と接続元の文字列はそれぞれシングルクォーテーションでくくる。

create user 'wpro'@'localhost'

接続元は入れなくてもできるけど、入れないと多分anyなので入れたほうがよいかな。
入れないで作ると'%'というホスト名になります。

create user [ユーザ名]

ユーザの作成 with パスワード。
create user '[ユーザ名]'@'[接続元]' identified by '[平文パスワード]'

create user 'wpro'@'localhost' identified by 'wpro'

パスワード後から設定。
alter user '[ユーザ名]'@'[接続元]' Identified by '[平文パスワード]';

alter user 'root'@'localhost' identified by "Password";

・PHP

インストール。バージョンが見たかったので -y 使いませんでした。使っても問題ありません。

yum install php

必要なパッケージは都度入れていくけど /etc/php.ini はここで弄っておくこと。あとでnginxに「The page you are looking for is temporarily unavailable.」って言われたときに切り分けしづらくなる。

post_max_size 8M=>128M
post_max_size 2M=>128M

・WordPress

パッケージはない。wgetでもcurlでもいい。HTTPなのに証明書エラー回避してんの草だけどリダイレクトするから許して。私の環境だと証明書エラーが出たから回避させてる。なぜ…

wget --no-check-certificate http://wordpress.org/latest.tar.gz
curl -O -k http://wordpress.org/latest.tar.gz

分解

 tar xfz latest.tar.gz

置きたい場所に移動しておく。nginxのファイルの置き場所って結局どこが正解なの…教えてえらいひと…

mv wordpress /usr/share/nginx/html/directory

とりあえず今のところはデフォルトの下に置きました。

・wp-cli

これを使わないとインストールできない。くそ。make installできるようにしてくれよ。(バイナリじゃないのよ…)

wget --no-check-certificate https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

パスの通っているところに移動。名前も変えておく。

cp wp-cli.phar /usr/local/bin/wp-cli

実行権限の付与。お好みでどうぞ。

chmod 544 /usr/local/bin/wp-cli

パスが通ってるかの確認。私はこの段階では例外吐かれた。まあパスは通ってるのでよし。

wp-cli --info

ちなみに例外は下記だった。ググったらphp-jsonを入れれば解決するとのことで、入れたらほんとに解決した。すげ~

PHP Fatal error:  Uncaught Error: Call to undefined function json_encode()
yum install -y php-json

wp-cli --infoリトライしたら色々情報出てきてこわ。DB認識されてるやんな。一部ディレクトリだけ伏せてます。
ただしwp-cliコマンドは後で作るwp-config.phpがあるディレクトリでやらないとうまく動作しないらしい。
(先に作っちゃったので下記の結果になった)

OS:     Linux 4.18.0-348.el8.0.2.x86_64 #1 SMP Sun Nov 14 00:51:12 UTC 2021 x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php
PHP version:    7.2.24
php.ini used:   /etc/php.ini
MySQL binary:   /usr/bin/mysql
MySQL version:  mysql  Ver 15.1 Distrib 10.3.28-MariaDB, for Linux (x86_64) using readline 5.1
SQL modes:
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path: *******
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.6.0

wp-configを作る

wp-config-sample.phpがあるので、これをコピーしてつくる。

cp wp-config-sample.php wp-config.php

このあたりはよきように修正。公式が説明してくれとる。

/** The name of the database for WordPress */
define( 'DB_NAME', 'wordPress' );
/** Database username */
define( 'DB_USER', 'wpro' );
/** Database password */
define( 'DB_PASSWORD', 'wpro' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

ここはよくわからんが触らなくてよいらしい。

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

AUTH_KEYからは、このサイト(公式)で作ったものを入れる。一意である必要があるらしい。

define( 'AUTH_KEY',         'put your unique phrase here' );
define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
define( 'NONCE_KEY',        'put your unique phrase here' );
define( 'AUTH_SALT',        'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
define( 'NONCE_SALT',       'put your unique phrase here' );

デバッグモードは強い心をもってオフにしておく。デフォルトのまま。

define( 'WP_DEBUG', false );

末尾に2行追加してな。
[リモートホストからアクセスしたいサイトのURL]は、リモートホストが使うIPなり名前なりにしてね。192.168.1.50/directory みたいな。
この2行を入れないとアクセスしたときキモいリダイレクトの仕方をして正しいところにリダイレクトできない。
理由はこのブログがわかりやすかった。

define('WP_HOME','http://[リモートホストからアクセスしたいサイトのURL]');
define('WP_SITEURL','http://[リモートホストからアクセスしたいサイトのURL]');

いよいよインストールしてみるぞ!(失敗)

挙動を見たいのでオプションは全部つけずにやってみる。

wp-cli core install
Error: Your PHP installation appears to be missing the MySQL extension which is required by WordPress.

Oh…God…
ググるとどうやらphp-mysqlというパッケージを入れる必要があるとのこと。

yum -y install php-mysql
Error: Unable to find a match: php-mysql

クソが…

yum list php-mysql*
Last metadata expiration check: ****
Available Packages
php-mysqlnd.x86_64        7.2.24-1.module+el8.4.0+413+c9202dda         appstream
yum -y install php-mysqlnd

よしワンチャンあるで!

wp-cli core install
Error: Can’t select database. We were able to connect to the database server (which means your username and password is okay) but not able to select the `wordPress` database.

この世はクソ。

mysql -u root -p
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordPress          |
+--------------------+

いやwordPressって名前のDBあるやんけ?!そんなときは権限を確認するのです。確認クエリはこれ。もー全然わからんからコピペ。

SELECT user, host, db FROM mysql.db;

権限追加は grant all privileges on [DB名].* to '[ユーザ名文字列]'@'[接続元文字列]' 。

grant all privileges on wordPress.* to 'wpro'@'localhost'

無事につきました。めでたしめでたし。

SELECT user, host, db FROM mysql.db;
+------+-----------+-----------+
| user | host      | db        |
+------+-----------+-----------+
| wpro | localhost | wordPress |
+------+-----------+-----------+

ようやくインストールできるぜ!!!!

wp-cli core install
Error: Parameter errors:
missing --url parameter (The address of the new site.)
missing --title parameter (The title of the new site.)
missing --admin_user parameter (The name of the admin user.)
missing --admin_email parameter (The email address for the admin user.)

その反応を…まってたんだよ…

インストール(成功)

wp-cli core install --url=http://example.local/ --title=Demo --admin_user=admin --admin_email=email@example.com

やったよママー!

sh: /usr/sbin/sendmail: No such file or directory
Admin password: ****
Success: WordPress installed successfully.

お分かりの通り、パスワードは自動生成されてしまったので、
--admin_password=<password>で好きなのをつけることをおすすめします。
あと/usr/sbin/sendmailが無ぇ言われたけどminimalだしないのかもね~エラー出てないからいいか~。

- 設定の変更

なぁ、さっき --url=http://example.local/ ってしたやろ。要所要所でこのURL使ってリダイレクトしてくんねん。
ところがなー、この名前はクライアントのhostsに書いてないんやー。つながるIPに変えんとなぁ。
コマンドとしてはこれがあるらしいです。

wp-cli options update host '[URL]'
wp-cli options update siteurl '[URL]'

いろいろあったのでDBそのまま触ってしまいました。
DBに接続してから値を見ると、http://example.local/ て値が入ってると思います。

mysql -u wprw -p
use wordPress

select * from wp_options where option_name = "home";
select * from wp_options where option_name = "siteurl";

update wp_options set option_value = "[URL]" where  option_name = "home";
update wp_options set option_value = "[URL]" where  option_name = "siteurl";

use [DB名]; でDBに接続、
show tables; でテーブルを表示、
describe [テーブル名]; で指定したテーブルのカラムが見えます。

MariaDB [wordPress]> show tables;
+-----------------------+
| Tables_in_wordPress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0.000 sec)
MariaDB [wordPress]> describe wp_options;
+--------------+---------------------+------+-----+---------+----------------+
| Field        | Type                | Null | Key | Default | Extra          |
+--------------+---------------------+------+-----+---------+----------------+
| option_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(191)        | NO   | UNI |         |                |
| option_value | longtext            | NO   |     | NULL    |                |
| autoload     | varchar(20)         | NO   | MUL | yes     |                |
+--------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.001 sec)

設定終わったらnginx再起動。reloadとかWordPressの読み込み直しとかありそうだけどわっかんねぇからとりあえずnginxごと再起動。

systemctl restart nginx

てここまでやって思ったんだけどwp-config.phpで書いてるからあんま関係ないのでは…?

- /wp-admin/ が管理サイトでぇす

でぇす
このときなぜかリダイレクトが走るようで、wp-config.phpで「WP_HOME」「WP_SITEURL」の定義をしていないとキモいリダイレクトの仕方をして繋がらない。何がどうキモいかは自分で確かめてみて。
そしてこの定義が名前になってるのにクライアントが解決できなくても当然つながらない。

- WordPressのパスワードの変更

UPDATE [DB名].[ユーザ情報のテーブル名] SET user_pass = MD5('[新しいパスワード]') WHERE user_login = '[パスを変更したいユーザー名]';

UPDATE wordPress.wp_users SET user_pass = MD5('P@ssw0rd') WHERE user_login = 'admin';

あとがき

GUIでやれよ!!!!!

この記事が気に入ったらサポートをしてみませんか?