12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VPSサーバーに、Ubuntu 22.04 + Nginx + PHP8.1 + WordPress で環境構築をする。

Last updated at Posted at 2022-10-26

この記事について

[追記]
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としています。
・空パスワード禁止
・ルートログイン禁止

/etc/ssh/sshd_config
#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
などと変更してください。

ファイルのアップロードのサイズの上限を変更

/etc/php/8.1/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情報を書き込みます。

/etc/nginx/sites-available/wordpress
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
/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

データベース名、ユーザー名、パスワードを自分が設定したものに書き換えてください。

/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
に設定した場合は以下になります。

/var/www/wordpress/wp-config.php
// ** データベース設定 - この情報はホスティング先から入手してください。 ** //
/** 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のダッシュボードで、以下のように表示されます。
Screenshot 2022-09-07 9.56.36.png
このFTPの認証情報の入力は、wordpressフォルダの所有権をwww-dataに書き換えることで回避できます。

Nginxの再起動

$ sudo systemctl restart nginx
http://あなたのIPアドレス/

IPアドレスにWebブラウザからアクセスしたら、WordPressの設定画面が表示されます。

Screenshot 2022-10-25 8.19.18.png

もし、データベース接続確立エラー と表示されたなら、MYSQLで作成したユーザー名、パスワード、データベース名と、wp-config.phpに書かれているユーザー名、パスワード、データベース名が違う可能性があります。

必要事項を入力しWordPressをインストールします。

先程、設定したユーザー名パスワードを入力しログインします。

サイトヘルスステータスを良好にする。

ダッシュボードのトップ画面にサイトヘルスステータスを表示してあります。

Screenshot 2022-10-25 9.46.47.png

サイトヘルス画面にアクセスへ進んでください。

Screenshot 2022-10-25 8.21.30.png

1つ以上の推奨モジュールが存在しませんと表示されています。まずここを改善させます。

Screenshot 2022-10-25 8.22.40.png

上の画像の警告は、以下のモジュールをインストールさせればお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つ以上の推奨モジュールが存在しませんとありますので、これも改善していきます。
Screenshot 2022-10-25 8.28.43.png

$ sudo apt install php-mbstring -y
$ sudo apt install php-zip -y
$ sudo apt install php-intl -y

Screenshot 2022-10-25 8.33.26.png

これで必要なモジュールをインストールでき、サイトヘルスも良好になってると思います。

一旦ここで終了したいと思います。

後日、独自ドメインの設定とhttps化を続編を考えています。

最後までありがとうございましたm(_ _)m

12
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?