この記事について
[追記]
YouTubeにて実演してます(OSの選択から、独自ドメインのHTTPS化まで)。
WordPress をVPSサーバー(Ubuntu)にNginxを用いて公開する方法。独自ドメイン + HTTPS化もするよ!
VPSサーバーに、WordPressをインストールし公開することを目的とします。
この記事は、2022年10月のものです。
注意
あくまで、WordPressの公開を目的としており、細かい設定・カスタマイズはしていません。
・鍵認証はせず
・bashのまま
・その他の設定、カスタマイズはせず
・ローカルmacでは、zsh使ってます
環境
・さくらVPS
・Ubuntu22.04
・Nginx
・PHP8.1
・MySQL
VPSにUbuntu22.04をインストール
さくらVPSの1Gメモリ、50G(SSD)プランを利用しています。
コントロールパネルから、Ubuntu22.04を選びインストールします。
さくらVPSの初期設定画面では、パケットフィルタを利用する/しないの選択肢があるのですが、ここでは、パケットフィルタは利用しないを選択しました。(あとで自分でファイアーウォールの設定を行います)
初期設定が終わり、Ubuntu22.04をインストールしたら、ログインできるか確認します。
ログイン名:ubuntu
% ssh ubuntu@あなたのIPアドレス
パスワードが聞かれるので、初期設定できめたパスワードを入力してください。
ユーザー作成
user01というユーザーを作成します。
・ubuntuのパスワード
・作成したユーザーのパスワード(ここではuser01)
・パスワードをもう一度
・Full Name [] ~は空白でおk
$ sudo adduser user01
[sudo] password for ubuntu:
Adding user `user01' ...
Adding new group `user01' (1001) ...
Adding new user `user01' (1001) with group `user01' ...
Creating home directory `/home/user01' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for user01
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
作成したユーザーに、sudo権限をもたせます。
$ sudo usermod -aG sudo user01
一旦、ローカルから作成したユーザーでログインできるか確認します。
% ssh user01@あなたのIPアドレス
ログインできたら成功です。
sudoコマンドを打つたびにパスワードが聞かれるのが嫌なので、パスワード入力を省く設定をします。(自己責任でお願いします)
$ sudo visudo
末尾に、
user01 ALL=NOPASSWD: ALL
ubuntuでログインできないようにします。アカウントをロックします。
$ sudo passwd -l ubuntu
passwd: password expiry information changed.
ubuntuでログインできなくなったら成功です。ローカルから再度接続を試みます。
% ssh ubuntu@あなたのIPアドレス
パスワードを入力しても、ログインできなかったら成功です。
再度作成したユーザー(user01)でログインし直してください。
% ssh user01@あなたのIPアドレス
アップデート&アップグレード
パッケージの更新およびアップグレード。
$ sudo apt update -y
$ sudo apt upgrade -y
再起動し、再ログイン
$ sudo reboot
(ローカルから)
% ssh user01@あなたのIPアドレス
sshの設定
sshの設定を変更します。
$ sudo vim /etc/ssh/sshd_config
・ポート番号の変更。register port の1024~49151番を避け、49152番~65535番から選びます。ここでは、57654としています。
・空パスワード禁止
・ルートログイン禁止
#Port 22
↓
Port 57654
#PermitEmptyPasswords no
↓
PermitEmptyPasswords no
#PermitRootLogin prohibit-password
↓
PermitRootLogin no
sshの設定ファイルの文法チェック。
$ sudo sshd -t
$ sudo systemctl restart sshd
ファイアウォールの設定
インストールします。
$ sudo apt install ufw
起動します
$ sudo ufw enable
ステータスの確認。status: active になっているか確認してください。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
~
ssh設定ファイルで、設定したポートを開けます。
$ sudo ufw allow 57654
statusが以下のようになればおkです。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
57654 ALLOW Anywhere
57654 (v6) ALLOW Anywhere (v6)
ローカルからssh接続し、57654番で接続できるか確認します。ログインに失敗し、再ログインできなくなると困るので、ターミナルの別タブから試してください。
% ssh -p 57654 user01@あなたのIPアドレス
もし、失敗したらsshの設定ファイルかファイアウォールの設定ミスの可能性があります。
ファイアウォールが、22番ポートを開いていたら閉じます。
$ sudo ufw delete allow 22
この時点で開いているポートは、57654番だけです。
Nginxの導入
Webサーバーは、Nginxを使用します。
Nginxのインストール
$ sudo apt install nginx -y
起動
$ sudo systemctl start nginx
VPS再起動後も自動で起動させる
$ sudo systemctl enable nginx
Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install.
Nginxのルートディレクトリの確認
$ grep "root /" -r /etc/nginx/
/etc/nginx/sites-available/default: root /var/www/html;
/etc/nginx/sites-available/default:# root /var/www/example.com;
Nginxで使用する80番ポートを開ける。
$ sudo ufw allow 'Nginx HTTP'
Nginx HTTPと指定していますが、80でも大丈夫です。
Webブラウザで自分のIPアドレスにアクセスし、「Welcome to nginx!」が表示されれば成功です。
もし、さくらVPSを使用し、パケットフィルターを利用しているなら、うまく表示されない可能性があるのでパケットフィルタをオフにしてください。
PHPの設定
phpのインストール
$ sudo apt install php -y
ubuntu22.04を使用している場合は、PHP8.*系が使われると思います。
ubuntu20.04なら、PHP7.4だったと思います。
phpのアプリケーションサーバーのインストール
$ sudo apt install php-fpm -y
php-mysqlのインストール
$ sudo apt install php-mysql -y
2022/10月現在では、php8.1がインストールされています。
phpの設定ファイルを変更
$ sudo vim /etc/php/8.1/fpm/php.ini
もし、versionがphp8.2になっているなら、
/etc/php/8.2/fpm/php.ini
などと変更してください。
ファイルのアップロードのサイズの上限を変更
upload_max_filesize = 2M
↓
upload_max_filesize = 128M
post_max_size = 8M
↓
post_max_size = 128M
apache2を削除
phpをインストールしたときに、自動でapache2がインストールされています。
今回は、Nginxを使用しますので、apache2は削除します。
$ sudo apt remove apache2 -y
$ sudo apt purge apache2 -y
$ sudo rm -rf /etc/apache2
Nginxを再起動
$ sudo systemctl restart nginx
Nginxの設定(WordPress用)
wordpressファイルを置くルートディレクトリは、/var/www/wordpress とします。
シンボリックリンクの設定(/wordpressは、Nginxの設定ファイル)
$ sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
$ sudo vim /etc/nginx/sites-available/wordpress
以下のserver情報を書き込みます。
server {
listen 80;
listen [::]:80;
server_name あなたのIPアドレス;
root /var/www/wordpress;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
もし、phpのバージョンが違う場合は、fastcgi_pass unix:/run/php/php8.*-fpm.sock;
のように適時変更してください。
phpの動作確認
wordpress フォルダを作成
$ sudo mkdir /var/www/wordpress
info.phpを作成
$ sudo vim /var/www/wordpress/info.php
<?php phpinfo();
Nginxを再起動させます。
$ sudo systemctl restart nginx
実際に、webブラウザであなたのIPアドレス/info.phpでphpのinfoページが表示されるか確認します。
http://あなたのIPアドレス/info.php
Apache2の削除・Nginxの再起動直後は、うまく表示できない可能性があります。(あなたのIPアドレスにアクセスしたら、Apache2が表示される)
この場合は、しばらく時間をおいたり、ブラウザで再読み込み(キャッシュ削除)、サーバーの再起動など試してください。
MySQLの設定
インストール
$ sudo apt install mysql-server mysql-client -y
mysqlに接続
$ sudo mysql -u root -p
Enter password:
上で聞かれているpasswordは、任意でおkと思います。
そのままenter(空)でもいけました。
DB、ユーザー名、パスワード作成およびユーザーに権限付与。
CREATE DATABASE データベース名 CHARACTER SET UTF8 COLLATE UTF8_BIN;
CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL ON wordpress.* to 'ユーザー名'@'localhost';
もし、
DB: wordpress
ユーザー名: user01
パスワード password
だった場合は以下になります。
mysql> CREATE DATABASE wordpress CHARACTER SET UTF8 COLLATE UTF8_BIN;
Query OK, 1 row affected, 2 warnings (0.01 sec)
mysql> CREATE USER 'user01'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT ALL ON wordpress.* to 'user01'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
wordpressの導入
先程作った/var/www/内のwordpressフォルダ(仮)を一旦削除します。
あとで、wordpressフォルダを/var/www/にダウンロードするためです。
$ sudo rm -rf /var/www/wordpress
wordpressをwgetでダウンロードします。
まずは、wgetをインストールします。
$ sudo apt install wget
現在地の移動
$ cd /var/www/
wordpressのダウンロード
$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz
ダウンロードしたパッケージを解凍
$ sudo tar -xzvf latest-ja.tar.gz
wordpressの設定は、wordpress.orgを参考にしました。
wordpressフォルダに移動
$ cd /var/www/wordpress/
wordpress.orgより引用
wp-config-sample.php のファイル名を wp-config.php に変更し、wp-config.php ファイルの編集に従ってデータベースの情報を追加。
とありますので、wp-config-sample.php のファイル名を wp-config.php と変更します。
$ sudo mv wp-config-sample.php wp-config.php
さらに、このファイルを編集します。
$ sudo vim /var/www/wordpress/wp-config.php
データベース名、ユーザー名、パスワードを自分が設定したものに書き換えてください。
// ** データベース設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'データベース名' );
/** データベースのユーザー名 */
define( 'DB_USER', 'ユーザー名' );
/** データベースのパスワード */
define( 'DB_PASSWORD', 'パスワード' );
/** データベースのホスト名 */
define( 'DB_HOST', 'localhost' );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
もし、
DB: wordpress
ユーザー名: user01
パスワード password
に設定した場合は以下になります。
// ** データベース設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wordpress' );
/** データベースのユーザー名 */
define( 'DB_USER', 'user01' );
/** データベースのパスワード */
define( 'DB_PASSWORD', 'password' );
/** データベースのホスト名 */
define( 'DB_HOST', 'localhost' );
/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8' );
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define( 'DB_COLLATE', '' );
wordpressフォルダの所有権を書き換える。
$ sudo chown -R www-data:www-data /var/www/wordpress
この所有権の変更をしていないと、wordpressのダッシュボードで、以下のように表示されます。
このFTPの認証情報の入力は、wordpressフォルダの所有権をwww-dataに書き換えることで回避できます。
Nginxの再起動
$ sudo systemctl restart nginx
http://あなたのIPアドレス/
IPアドレスにWebブラウザからアクセスしたら、WordPressの設定画面が表示されます。
もし、データベース接続確立エラー と表示されたなら、MYSQLで作成したユーザー名、パスワード、データベース名と、wp-config.phpに書かれているユーザー名、パスワード、データベース名が違う可能性があります。
必要事項を入力しWordPressをインストールします。
先程、設定したユーザー名とパスワードを入力しログインします。
サイトヘルスステータスを良好にする。
ダッシュボードのトップ画面にサイトヘルスステータスを表示してあります。
サイトヘルス画面にアクセスへ進んでください。
1つ以上の推奨モジュールが存在しませんと表示されています。まずここを改善させます。
上の画像の警告は、以下のモジュールをインストールさせればおkです。
$ sudo apt install php-curl -y
$ sudo apt install php-dom -y
$ sudo apt install php-imagick
$ sudo apt install php-gd -y
サイトヘルスが良好になったと思います。
しかし、1つ以上の推奨モジュールが存在しませんとありますので、これも改善していきます。
$ sudo apt install php-mbstring -y
$ sudo apt install php-zip -y
$ sudo apt install php-intl -y
これで必要なモジュールをインストールでき、サイトヘルスも良好になってると思います。
一旦ここで終了したいと思います。
後日、独自ドメインの設定とhttps化を続編を考えています。
最後までありがとうございましたm(_ _)m