今回は、レンタルサーバーではなく「ConoHa VPS」を使い、黒い画面(ターミナル)と格闘しながらゼロからWordPress環境を構築した記録をまとめました。
人気のWordPressテーマ「SWELL」を導入する際に直面した「容量オーバーでアップロードできないエラー」の解決法も詳しく解説しているので、これからVPSでWordPressを立ち上げる方の参考になれば嬉しいです!
【今回の構築環境】
- サーバー:ConoHa VPS
- OS:Ubuntu
- Webサーバー:Nginx
- プログラム:PHP 8.5
- データベース:MariaDB(MySQL互換)
- テーマ:SWELL
1. 【超重要】VPSの初期セキュリティ設定
VPSを契約した直後は「root(全権限を持つ危険なユーザー)」で「パスワードさえ分かれば誰でもログインできる」という無防備な状態です。まずはここを徹底的に防御します。
① 新しいユーザーの作成と権限付与
まずはrootユーザーでログインし、普段使いするための新しいユーザー(ここでは username とします)を作成し、管理者権限(sudo)を与えます。
# 新しいユーザーを作成する
adduser username
# 作成したユーザーに管理者権限(sudo)を付与する
usermod -aG sudo username② SSH鍵(公開鍵)の新しいユーザーへの移行
今のままだと、新しいユーザーは「パスワード」でしかログインできません。より安全な「公開鍵認証(鍵ファイルを使ったログイン)」ができるように、rootユーザーが持っている鍵の情報を新しいユーザーにコピーしてあげます。
# 新しいユーザーの場所に「.ssh」という隠しフォルダを作成
sudo mkdir /home/username/.ssh
# rootユーザーの鍵ファイル(authorized_keys)をコピーする
sudo cp ~/.ssh/authorized_keys /home/username/.ssh/
# コピーしたフォルダとファイルの「所有者」を新しいユーザーに変更する
sudo chown -R username:username /home/username/.ssh
# 他人が勝手に見られないように、正しい権限(パーミッション)を設定する
sudo chmod 700 /home/username/.ssh
sudo chmod 600 /home/username/.ssh/authorized_keys③ SSHのセキュリティ強化(ポート変更・パスワード禁止)
鍵の移行が完了したら、ハッカーの攻撃をシャットアウトするために「SSHの設定ファイル」を書き換えます。
# SSHの設定ファイルを開く
sudo nano /etc/ssh/sshd_configファイルの中から以下の3箇所を探し、書き換えます(前に # がある場合は消してください)。
- ポート番号の変更:
Port 22⇨Port 12345(任意の番号) - rootログインの禁止:
PermitRootLogin yes⇨PermitRootLogin no - パスワードログインの禁止:
PasswordAuthentication yes⇨PasswordAuthentication no
# SSHを再起動して設定を反映させる
sudo systemctl restart sshこれで、「自分が作ったユーザー」+「秘密鍵ファイルを持っているパソコン」からしか絶対にログインできない要塞になりました!
④ ファイアウォール(UFW)の設定とポート開放
最後に、外部からの通信を制限します。Webサイトを表示するためのポートと、先ほど変更した新しいSSH用のポート(例: 12345 番)だけを開放します。
# 基本的な通信をすべて遮断(セキュリティの基本)
sudo ufw default deny incoming
# サーバーの中から外へ出る通信は許可
sudo ufw default allow outgoing
# 変更した新しいSSHポート(例: 12345)を許可
sudo ufw allow 12345/tcp
# Webサイトを表示するためのポート(HTTPとHTTPS)を許可
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# ファイアウォールを起動(有効化)
sudo ufw enable
これで、次回からの安全なログインコマンドは以下のようになります。
ssh -p 12345 username@123.45.67.892. Webサーバー・PHP・データベースの構築
セキュリティが固まったら、WordPressを動かすための土台(LEMP環境)を作っていきます。
① 必要なソフトウェアの一括インストール
Ubuntuのシステムを最新状態にしてから、Nginx(Webサーバー)、MariaDB(データベース)、PHP(プログラム)をまとめてインストールします。
# パッケージ一覧を最新にする
sudo apt update && sudo apt upgrade -y
# Nginx、MariaDB、PHP本体と関連モジュールを一気にインストール
# ※環境に合わせてPHPのバージョン(ここでは8.5)は変更してください
sudo apt install nginx mariadb-server php8.5-fpm php8.5-mysql -y② WordPress用データベースの作成
インストールしたデータベース(MariaDB)に入り、WordPress専用のデータベースと、それを操作するユーザーを作成します。
# データベースの管理画面にログイン
sudo mysqlここからはSQL(データベースへの命令)を入力します。
-- ①「wordpress_db」という名前のデータベースを作成
CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8mb4;
-- ②「wp_user」というユーザーを作り、パスワードを設定(your_passwordの部分を変更)
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'your_password';
-- ③ 作成したデータベースに対するすべての権限をユーザーに与える
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
-- ④ 設定を反映させる
FLUSH PRIVILEGES;
-- ⑤ データベース管理画面から退出する
EXIT;3. WordPressのダウンロードと配置
土台ができたので、いよいよWordPress本体をサーバーにダウンロードして配置します。
# 日本語版の最新WordPressをダウンロードする
wget https://ja.wordpress.org/latest-ja.tar.gz
# ダウンロードした圧縮ファイルを解凍する
tar -xzvf latest-ja.tar.gz
# 解凍した「wordpress」の中身を、Webサーバーの公開フォルダに丸ごと移動する
sudo mv wordpress/* /var/www/example.com/
# Nginxがファイルにアクセスできるように、フォルダの「所有権」を変更する
sudo chown -R www-data:www-data /var/www/example.com
4. サイトのSSL化(https化)
サイトを安全に表示するため、「Let’s Encrypt」という無料の仕組みを使って通信を暗号化します。
# 全自動設定プログラム(Certbot)のインストール
sudo apt install certbot python3-certbot-nginx -y
# SSL証明書の発行とNginxへの自動設定を実行
sudo certbot --nginx -d example.com
画面の指示に従ってメールアドレス等を入力するだけで、あっという間にアドレスバーに「鍵マーク」が付きました!
5. WordPressのセキュリティと初期設定
ブラウザでサイトにアクセスし、WordPressの初期設定画面で先ほど作成したデータベース情報(DB名、ユーザー名、パスワード)を入力してインストールを完了させます。
その後、記事を書く前に必ず以下の初期設定を行いました。
- パーマリンクの設定: 「設定」>「パーマリンク」から、SEOに強い「投稿名」に変更。
- 初期データの大掃除: 最初から入っている「Hello world!」などのテスト記事や、不要な初期プラグインを削除。
- ログイン画面の隠蔽: 「SiteGuard WP Plugin」を導入し、ハッカーに狙われやすい
/wp-adminのログインURLを自分だけのオリジナルの文字列に変更しました。
6. 【山場】SWELL導入時のアップロードエラーと解決法
WordPressの土台が完成し、いざ大人気の有料テーマ「SWELL」をアップロードしようとしたところ、大きな壁にぶつかりました。
エラー①:「413 Request Entity Too Large」
SWELLの親テーマ(zipファイル)をアップロードすると、画面にデカデカとこのエラーが…。 これは、Nginx(Webサーバー)が「初期設定では1MB以上のファイルは通さない!」とブロックしているのが原因でした。
【解決法】Nginxの設定ファイルを編集する
# ご自身のドメイン名がついた設定ファイルを開く
sudo nano /etc/nginx/conf.d/example.com.confファイルを開き、server_name の下の行に制限を50MBに引き上げる設定(client_max_body_size 50M;)を追記します。
server {
server_name example.com;
# ↓この1行を追加してアップロードの上限を50MBに引き上げる
client_max_body_size 50M;
root /var/www/example.com;
}# 保存して閉じた後、Nginxを再起動して設定を反映
sudo systemctl restart nginxエラー②:「アップロードされたファイルが php.ini の upload_max_filesize を越えています」
Nginxのゲートを開けたのに、またエラー!今度は「PHP」側の初期設定(2MB制限)に引っかかっていました。
【解決法】WordPressディレクトリに.user.iniを作成する 長い設定ファイルを探すのは大変なので、WordPressのフォルダに「容量アップの呪文」を書いたファイルをコマンドでポンッと作って解決しました。以下のコマンドを1行ずつ実行します。
# アップロードの最大サイズを50MBにする設定をファイルに書き込む
echo "upload_max_filesize = 50M" | sudo tee /var/www/example.com/.user.ini
# データの送信最大サイズも50MBにする設定を追記する
echo "post_max_size = 50M" | sudo tee -a /var/www/example.com/.user.ini
# PHPを再起動して設定をすぐに反映させる(バージョンは環境に合わせて変更)
sudo systemctl restart php8.5-fpmこれで、すべての制限が解除され、無事にSWELLの親テーマ・子テーマの両方をインストールできました!
おわりに
ボタン一つでWordPressが作れるレンタルサーバーと違い、VPSでの構築は黒い画面(コマンド)との戦いでしたが、その分「サーバーの仕組み」がすごくよく理解できました。
同じようなエラーでつまずいている方の参考になれば幸いです!
