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でやれよ!!!!!