AlmaLinuxにWordPressを自力構築してみる ― 手動手順とシェルスクリプトで作る インストールから独自ドメインでのHTTPS公開まで
はじめに
今回は、LinuxサーバーにWordPressを自力でインストールし、独自ドメインを使ってHTTPSで公開するところまで進めます。
レンタルサーバーでは「WordPress簡単インストール」が用意されていることも多いですが、今回はその機能を使わず、
- Apache
- PHP
- MariaDB
- WordPress
を自分で準備します。
WordPressを自力で構築することで、Webサーバー、PHP、データベースがどのように連携してWebサイトを動かしているのかも理解しやすくなります。
この記事の読み方: セクション1〜7は、1コマンドずつ手動で実行して仕組みを理解する構成です。手順をまとめて自動実行したい場合は、同じ内容を1本にまとめたシェルスクリプトを用意しています。まずは手動で流れを理解し、2回目以降の構築でスクリプトを使う、という進め方がおすすめです。
1. Apacheをインストールする
最初にWebサーバーとなるApacheをインストールします。
dnf -y install httpd
インストール後、Apacheを起動します。
systemctl start httpd
サーバー起動時にもApacheが自動的に起動するようにします。
systemctl enable httpd
状態を確認します。
systemctl status httpd
active (running) と表示されていればApacheは起動しています。
2. PHPをインストールする
WordPressはPHPで作られているため、PHPの実行環境が必要です。
手順書ではPHP本体と、MySQL/MariaDBとの接続などに必要なパッケージをインストールしています。
dnf -y install php php-mysqlnd php-json php-devel
PHPをインストールしたらApacheを再起動します。
systemctl restart httpd
現在の環境に合わせて確認(コマンドを確定する前に)
PHPのバージョンや導入方法はAlmaLinuxのメジャーバージョンで異なります。コマンドを打つ前に、自分の環境の既定バージョンを必ず確認してください。
# OSのバージョンを確認する cat /etc/almalinux-release # インストール可能なPHPパッケージ(既定バージョン)を確認する dnf info php環境ごとの目安は次の通りです(執筆時点。詳細は各版のリリースノートで確認してください)。
環境 既定のPHP 備考 AlmaLinux 8 PHP 7.4 / 8.0 dnf module list phpでモジュールを選択できるAlmaLinux 9 PHP 8.0 dnf moduleでバージョン切り替え可能AlmaLinux 10 PHP 8.3 dnf moduleは廃止。既定リポジトリのバージョンをそのまま利用するWordPressの動作要件を満たす新しいPHP(例: 8.2 / 8.3 / 8.4)が必要で、既定リポジトリに無い場合は、Remiリポジトリなどのサードパーティリポジトリを追加してから導入します。まずは上記コマンドで既定バージョンを確認し、要件を満たすなら既定のまま
dnf -y install php ...を実行するのが最もシンプルです。なお、
php-jsonはPHP 8.0以降ではPHP本体(php-common)に統合されているため、環境によっては個別インストールが不要(dnf info php-jsonで確認)です。インストール後はphp -vで実際のバージョンを確認しておきましょう。php -v
3. MariaDBをインストールする
WordPressでは、記事や設定などをデータベースへ保存します。
今回はMariaDBを使用します。
dnf -y install mariadb mariadb-server
MariaDBを有効化します。
systemctl enable mariadb
起動します。
systemctl start mariadb
状態を確認します。
systemctl status mariadb
現在の環境に合わせて確認(コマンドを確定する前に)
MariaDBもAlmaLinuxのバージョンで既定のリリースが異なります。インストール前に、提供されるバージョンを確認しておきます。
# インストール可能なMariaDBのバージョンを確認する dnf info mariadb-server # AlmaLinux 8 / 9 ではモジュールでバージョンを選べる場合がある dnf module list mariadbAlmaLinux 10 では
dnf moduleが廃止されているため、既定リポジトリのバージョン(MariaDB 10.11系など)をそのまま利用します。特定バージョンが必要な場合は、MariaDB公式リポジトリを追加してから導入してください。セキュリティ初期設定: 本番運用では、DB作成の前に
mariadb-secure-installation(旧mysql_secure_installation)を実行し、rootパスワード設定・匿名ユーザー削除・テスト用DB削除などを済ませておくことを推奨します。mariadb-secure-installationインストール後は、実際のバージョンも確認しておきましょう。
mariadb --version
4. WordPress用データベースを作成する
MariaDBへログインします。
mysql -u root -p
補足: 新しいMariaDB(10.5以降)では
mysqlコマンドはmariadbコマンドへのエイリアスです。現在の環境では次のコマンドが推奨表記です(どちらでも動作します)。mariadb -u root -p
続いてWordPress用のデータベースを作成します。
今回は、以下とします。
- データベース名:
wordpress - ユーザー名:
wp
CREATE DATABASE wordpress;
WordPress用ユーザーを作成します。
CREATE USER wp@localhost IDENTIFIED BY 'パスワード';
作成したユーザーにWordPressデータベースへの権限を付与します。
GRANT ALL PRIVILEGES ON wordpress.* TO wp@localhost;
FLUSH PRIVILEGES;
データベースを確認します。
SHOW DATABASES;
一覧に wordpress が表示されればOKです。
最後にMariaDBからログアウトします。
exit
5. WordPressをダウンロードする
一時作業用ディレクトリを作成します。
mkdir /tmp/wp
移動します。
cd /tmp/wp
WordPressをダウンロードします。
wget https://wordpress.org/latest.tar.gz
ダウンロードしたファイルを展開します。
tar xzvf latest.tar.gz
展開すると、wordpress ディレクトリが作成されます。
6. WordPressをApacheの公開ディレクトリへ配置する
WordPressのファイルをApacheの公開ディレクトリへ移動します。
mv wordpress/* /var/www/html/
ファイルを確認します。
ls /var/www/html
WordPress関連のファイルが表示されればOKです。
続いて所有者をApacheへ変更します。
chown -R apache:apache /var/www/html
書き込み権限を設定します。
chmod -R +w /var/www/html
補足:
chmod -R +wは広めに書き込み権限を付けます。SELinuxが有効な環境では、権限(パーミッション)だけでなく SELinuxのコンテキスト も重要になります(次のセクションで扱います)。WordPressが書き込むディレクトリ(wp-contentなど)には、SELinuxコンテキストhttpd_sys_rw_content_tを設定するのがより安全です。
7. SELinuxとFirewallを現在の環境に合わせて設定する
SELinuxやFirewallを無効化して進めていることがあります。しかし AlmaLinux では、これらは既定で有効になっており、無効化するとセキュリティ上のリスクになります。無効化せず、必要な許可だけを与えるのが現在の推奨です。
7-1. まず現在の状態を確認する
# SELinuxの状態を確認する(enforcing / permissive / disabled)
sestatus
# Firewall(firewalld)が動いているか確認する
systemctl status firewalld
firewall-cmd --state
sestatus で Current mode: enforcing と表示されていれば、SELinuxが有効です。この状態を前提に、必要な許可を追加していきます。
7-2. SELinuxのBoolean(許可設定)を確認・設定する
WordPressはプラグイン更新やWordPress.orgとの通信、DB接続のためにネットワークアクセスが必要です。SELinuxが有効なままこれらを許可するには、対応するBooleanを有効化します。
まず現在の設定を確認します。
getsebool -a | grep httpd
次に、必要なものだけを有効化します(-P は再起動後も設定を保持するオプション)。
# httpd(Apache/PHP)からDBへ接続することを許可する
setsebool -P httpd_can_network_connect_db 1
# 外部(更新チェック・プラグイン取得など)への接続を許可する場合
setsebool -P httpd_can_network_connect 1
注意: DBが同じサーバー上の
localhostにある構成では、httpd_can_network_connect_dbは不要なこともあります。まずはBooleanを変更せずにセットアップを試し、SELinux由来のエラー(/var/log/audit/audit.logにdeniedが記録される)が出たときに、必要なBooleanだけを有効化するのが確実です。
WordPressのファイルにApacheが読み書きできるよう、SELinuxコンテキストも確認・設定します。
# 公開ディレクトリのコンテキストを確認する
ls -Z /var/www/html
# WordPressが書き込む領域に読み書き可能なコンテキストを付与する例
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wp-content(/.*)?"
restorecon -Rv /var/www/html
semanageが無い場合はdnf -y install policycoreutils-python-utilsで導入できます。
7-3. Firewallでポートを開放する
外部のブラウザからアクセスできるよう、HTTP(80番)とHTTPS(443番)を許可します。
# HTTP / HTTPS を許可する
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 設定を反映する
firewall-cmd --reload
# 許可されているサービスを確認する
firewall-cmd --list-all
services: の欄に http と https が表示されていれば、ポートが開いています。
レンタルサーバーのVPSなどの場合: サーバーOS内のfirewalldとは別に、VPS側のパケットフィルタ/ネットワーク側のファイアウォール でも 80/443 を許可する必要があります。両方を確認してください。
7-4. VPS・クラウド側のファイアウォールを開放する
OS内のfirewalldを設定しても、VPS・クラウド側のネットワークファイアウォール が閉じていると、外部のブラウザからはアクセスできません。サーバー内では curl http://localhost/ で応答するのに外部から開けない場合は、ここが原因であることがほとんどです。
レンタルサーバーのVPSの場合は、コントロールパネルで次の設定を行います。
- 対象サーバーの パケットフィルタ設定 に、「Web(TCP 80 / 443)」の許可ルールを追加 する
これで、HTTP(80番)とHTTPS(443番)が外部から到達できるようになります。設定を保存・反映したあと、ブラウザから http://サーバーのIPv4アドレス/wp-admin/install.php にアクセスできるか確認してください。
補足: AWSなど他のクラウドでは、同様に セキュリティグループ/ネットワークACL で 80 / 443 のインバウンドを許可します。OS内firewalldと、クラウド/VPS側フィルタの 両方 を開放する必要がある点に注意してください。
シェルスクリプトでまとめて構築する(セクション1〜7)
ここまでのセクション1〜7(Apacheのインストールから、SELinux・Firewallの設定まで)は、1本のシェルスクリプトにまとめてあります。仕組みを理解したうえで、2回目以降の構築や別サーバーへの展開を素早く行いたいときに便利です。
なお、このスクリプトが自動化するのは セクション1〜7まで です。ブラウザからの初期設定(次のセクション8以降)は、これまで通り手動で行います。
ダウンロード
今回使用するセットアップスクリプトは、以下GitHubから取得できます。
# wget で取得する場合
wget -O setup_wordpress.sh https://raw.githubusercontent.com/aiota-jp/wordpress-setup/main/setup_wordpress.sh
# リポジトリごと clone する場合
git clone https://github.com/aiota-jp/wordpress-setup.git
実行方法
ダウンロードしたら実行権限を付け、root権限(sudo)で実行します。
# 実行権限を付与する
sudo chmod +x setup_wordpress.sh
# DBパスワードを指定して実行する(推奨)
WP_DB_PASS='強力なパスワード' sudo -E ./setup_wordpress.sh
WP_DB_PASS を省略した場合は、スクリプトが自動でパスワードを生成し、最後に接続情報として表示します。
主な設定(環境変数で上書き可能)
必要に応じて、次の環境変数で挙動を変更できます。
| 環境変数 | 既定値 | 説明 |
|---|---|---|
WP_DB_NAME |
wordpress |
作成するデータベース名 |
WP_DB_USER |
wp |
作成するDBユーザー名 |
WP_DB_PASS |
(自動生成) | DBユーザーのパスワード |
WEB_ROOT |
/var/www/html |
WordPressを配置する公開ディレクトリ |
ALLOW_OUTBOUND |
1 |
1のときSELinuxの外部接続許可も有効化 |
実行後にやること
スクリプトが完了すると、DB接続情報とセットアップ用URLが表示されます。そのまま次のセクションへ進み、ブラウザで初期設定を行ってください。
http://サーバーのIPv4アドレス/wp-admin/install.php
注意: このスクリプトはインストールと設定を自動化しますが、本番運用では
mariadb-secure-installationの実行や、より厳密な権限・SELinux設定の見直しを別途行ってください。内容を理解せずに実行せず、まずはセクション1〜7を一読することをおすすめします。
トラブルシュート:ブラウザからアクセスできないとき
手動手順・スクリプトのどちらで構築しても、「サーバー内では動いているのに、ブラウザからアクセスできない」ということがよくあります。原因を サーバー内の問題 と サーバー外(経路)の問題 に切り分けるため、次の順番で確認します。
# 1. httpd が起動しているか
systemctl is-active httpd
# 2. サーバー自身の80番で応答があるか(ローカルからの確認)
curl -I http://localhost/
# 3. 80番で待ち受けているプロセスがあるか
ss -ltnp | grep ':80'
# 4. firewalld の状態(無効なら firewall は原因ではない)
systemctl status firewalld --no-pager
# 5. WordPress の index.php が配置されているか
ls -l /var/www/html/index.php /var/www/html/wp-login.php
結果の読み方
それぞれの結果から、どこに問題があるかを判断できます。
| 確認項目 | 期待される結果 | 結果が異なる場合の対処 |
|---|---|---|
| 1. httpd | active |
systemctl enable --now httpd で起動する |
| 2. curl |
HTTP/1.1 200 または 302 Found(setup-config.php へのリダイレクト) |
httpdの起動やWordPress配置を確認する |
| 3. 待ち受け |
LISTEN ... *:80 の行が表示される |
httpdが80番で待ち受けていない。設定・再起動を確認する |
| 4. firewalld |
active または inactive
|
active なら 80/443 を許可(セクション7-3参照)。inactive なら firewall は原因ではない |
| 5. ファイル |
index.php と wp-login.php が存在する |
WordPressの配置(セクション6)をやり直す |
典型的なパターン
ローカルからは応答するのに、外部から届かない場合
curl -I http://localhost/ が次のように応答し(サーバー内は正常)、
HTTP/1.1 302 Found
Server: Apache/2.4.63 (AlmaLinux)
X-Powered-By: PHP/8.3.33
Location: http://localhost/wp-admin/setup-config.php
さらに firewalld が inactive(OS側は素通し)にもかかわらず外部から開けない場合、原因は サーバーの外側=ネットワーク側のファイアウォール です。
- レンタルサーバーのVPSの場合: コントロールパネルの パケットフィルタ で TCP 80(および後で 443)が許可されているか確認します。VPSは初期状態でパケットフィルタが有効になっており、SSH(22)などだけが開いていて 80/443 が閉じていることがよくあります。コントロールパネルからWeb(80/443)の許可ルールを追加してください。
- AWS / その他クラウドの場合: セキュリティグループやネットワークACLで 80/443 のインバウンドが許可されているか確認します。
ポイント: OS内の
firewalldが無効でも、クラウド/VPS側のファイアウォールは別に存在します。「サーバー内ではcurlで応答する」「OSのfirewalldは無効」という2点が揃ったら、まずネットワーク側のフィルタ設定を疑うのが近道です。
8. ブラウザからWordPressをセットアップする
ここまで準備できたらブラウザを起動します。
http://サーバーのIPv4アドレス/wp-admin/install.php
WordPressのセットアップ画面が表示されたら、日本語を選択して「次へ」をクリックします。
続いてデータベース情報を入力します。
| 項目 | 入力値 |
|---|---|
| データベース名 | wordpress |
| ユーザー名 | wp |
| パスワード | 設定したパスワード |
| データベースのホスト名 | localhost |
| テーブル接頭辞 | wp_ |
入力後、「送信」をクリックします。
データベースへの接続に成功したら、「インストール実行」をクリックします。
9. WordPressのサイト情報を設定する
続いてWordPressサイトそのものの設定を行います。
主に、
- サイトのタイトル
- 管理者ユーザー名
- 管理者パスワード
- メールアドレス
を入力します。
ここで設定するユーザー名とパスワードは、先ほどのMariaDBの wp データベース用パスワードとは別物です。
MariaDB の wp
↓
WordPressからDBへ接続するユーザー
WordPress管理者
↓
人間がWordPress管理画面へログインするユーザー
すべて入力したら、「WordPressをインストール」をクリックします。
10. WordPressへログインする
インストールが成功したら、WordPress管理画面へログインします。
http://サーバーのIPv4アドレス/wp-admin/
先ほど設定したWordPress管理者の
- ユーザー名
- パスワード
を入力します。
ログインに成功すると、以下のような画面が表示されます。
独自ドメインで実際に公開する場合
あらかじめ取得したドメイン「mono-finder.com」と、レンタルサーバーのVPS上のWordPressをインターネット公開する場合は、この続きとして、以下手順で実施します。
WordPress構築(済)
↓
レンタルサーバーのVPSのTCP 80/443を許可(済)
↓
mono-finder.comのDNS設定
↓
ApacheのVirtualHost設定
↓
mono-finder.comでアクセス確認
↓
Let's Encrypt
↓
HTTPS化
↓
https://mono-finder.com
ここからは、この流れを ① 〜 ⑧ の手順として具体的に進めます。
① WordPress構築
ここまでのセクション1〜10(または「シェルスクリプトでまとめて構築する」)で、VPS上にWordPressが動作している状態を用意します。この時点では、まだIPアドレス(http://サーバーのIPv4アドレス/)でアクセスできる状態です。
# IPアドレスでWordPressが応答するか確認する(サーバーのIPv4アドレスに置き換える)
curl -I http://サーバーのIPv4アドレス/
HTTP/1.1 200 または 302 Found が返れば、WordPress本体は正常に動作しています。
② 独自ドメインのDNSをVPSへ向ける
独自ドメイン(例:mono-finder.com)を管理しているサービスのDNS設定で、VPSのグローバルIPアドレスを指すレコードを登録します。
| レコード種別 | ホスト名 | 値(例) |
|---|---|---|
| A |
mono-finder.com(または@) |
VPSのIPv4アドレス |
| A | www |
VPSのIPv4アドレス |
補足: レンタルサーバー(ドメイン事業者・VPS事業者)を使う場合
ドメインをどこで管理し、どのネームサーバー(DNS)を使うかで、設定する画面が変わります。「ドメインの登録事業者」と「VPSの提供事業者」が別の会社であることも多いため、どちらのDNSでAレコードを設定するかを最初に決めます。
- ドメイン事業者のDNSをそのまま使う場合: ドメインを取得した事業者のコントロールパネルにある「DNS設定」「DNSレコード設定」で、上記のAレコードを追加します。もっとも手軽な方法です。
- VPS事業者のネームサーバーを使う場合: 多くのVPS事業者は独自のネームサーバー(DNSサービス)を提供しています。この場合は、(1) ドメイン事業者側で ネームサーバーをVPS事業者のもの(例:
ns1.example-vps.jpなど)に変更し、(2) VPS事業者のDNSゾーン画面でAレコードを登録します。ネームサーバーの変更は反映に時間がかかります。- レンタルサーバー付属のDNSを使う場合: WordPressをVPSではなく共有レンタルサーバーで動かす構成では、そのレンタルサーバーの管理画面(コントロールパネル)でドメインを追加し、DNSレコードを設定します。この場合、値はVPSのIPではなく、そのレンタルサーバーが指定するIP・ホスト名になります。
どの方法でも、最終的に 独自ドメインがWordPressの動いているサーバーのグローバルIPを指す ようになっていれば問題ありません。設定後は、次の反映確認で実際に返るIPをチェックしてください。
DNSの反映には時間がかかることがあります。反映されたかは、次のコマンドで確認します。
# 名前解決がVPSのIPを返すか確認する
dig +short mono-finder.com
nslookup mono-finder.com
返ってきたIPアドレスが、VPSのグローバルIPと一致していればOKです。
確認ポイント: HTTPS化(④)の前に、DNSが正しくVPSを指していること と HTTP(80番)でアクセスできること を必ず確認します。DNSが未反映のままだと、Let's Encryptのドメイン所有確認に失敗します。
③ Apacheに独自ドメイン(例:mono-finder.com)を設定する
mono-finder.com 宛てのリクエストをWordPressに渡すため、ApacheのVirtualHostを設定します。設定ファイルを新規に作成します。
# VirtualHost用の設定ファイルを作成する
vi /etc/httpd/conf.d/mono-finder.conf
内容は次のようにします。
<VirtualHost *:80>
ServerName mono-finder.com
ServerAlias www.mono-finder.com
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/mono-finder_error.log
CustomLog /var/log/httpd/mono-finder_access.log combined
</VirtualHost>
設定を確認して反映します。
# 設定ファイルの文法をチェックする
apachectl configtest
# 問題なければApacheを再起動する
systemctl restart httpd
Syntax OK と表示されればOKです。ブラウザで http://mono-finder.com/ にアクセスし、WordPressが表示されることを確認します。
ここまでで、独自ドメインからWordPressへアクセスできるようになりました。次に、Let's Encryptが提供する無料のSSL/TLS証明書を取得し、WebサイトをHTTPS化します。最終的には、次のURLで安全にアクセスできる状態を目指します。
https://mono-finder.com
証明書の取得・更新を自動化できる Certbot を使用します。
④ Certbotをインストールする
CertbotとApache用のプラグインをインストールします。AlmaLinux 10 では、これらは EPELリポジトリ から提供されるため、先にEPELを有効化します。
sudo dnf -y install epel-release
sudo dnf -y install certbot python3-certbot-apache
インストール後、バージョンを確認します。
certbot --version
以下のような結果になればOKです。
certbot 4.2.0
⑤ Certbot実行前の準備(ssl.conf 用の証明書を用意する)
AlmaLinux 10 では、Apacheの /etc/httpd/conf.d/ssl.conf が /etc/pki/tls/certs/localhost.crt を参照していますが、このファイルが用意されていない場合があります。Certbotは実行前に apachectl configtest でApacheの設定を確認するため、この証明書が無いと処理を進められません。そこで、Certbotを実行する前に、ssl.conf の参照先となる 一時的な自己署名証明書 を用意します。
まずOpenSSLをインストールします。
sudo dnf -y install openssl
続いて、自己署名証明書と秘密鍵を作成します。
sudo openssl req -newkey rsa:2048 -nodes -x509 -days 1 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt -subj "/CN=localhost"
注意: ここで作成する証明書は、Webサイトで最終的に使用する証明書ではありません。
ssl.confが参照するファイルを用意して Apacheの設定チェックを通すためだけの、一時的な自己署名証明書 です。本番の証明書は、このあとLet's Encryptから取得します。
作成されたファイルを確認します。
sudo ls -l /etc/pki/tls/certs/localhost.crt
sudo ls -l /etc/pki/tls/private/localhost.key
今回の環境では、次のように作成されました。
-rw-r--r-- 1 root root 1115 Sep 13 18:59 /etc/pki/tls/certs/localhost.crt
-rw------- 1 root root 1704 Sep 13 18:59 /etc/pki/tls/private/localhost.key
証明書を作成したら、Apacheの設定に問題がないか確認します。
sudo apachectl configtest
次のように表示されれば正常です。
Syntax OK
Apacheを再起動します。
sudo systemctl restart httpd
これで、Certbotを実行する準備が整いました。
⑥ Let's Encryptの証明書を取得する
Certbotを実行して、独自ドメイン用の証明書を取得します。
sudo certbot --apache -d mono-finder.com -d www.mono-finder.com
指定しているオプションの意味は次の通りです。
| オプション | 意味 |
|---|---|
--apache |
Apacheの設定を自動的に認識・変更する |
-d mono-finder.com |
証明書を発行するドメイン |
-d www.mono-finder.com |
www付きドメインも証明書の対象にする |
実行すると、対話形式でいくつか入力を求められます。
-
メールアドレスの入力(
Enter email address or hit Enter to skip.): 普段確認できるメールアドレスを入力します。有効期限切れ間近などの通知が届きます。 -
利用規約への同意(
Do you agree? (Y)es/(N)o:): 内容を確認し、同意する場合はYを入力します。 -
EFFへのメール共有(
Would you be willing ... to share your email address with the Electronic Frontier Foundation? (Y)es/(N)o:): 証明書の発行には必須ではありません。不要ならNで問題ありません。
補足: Let's Encryptを利用する場合、認証局のWebサイトで事前にユーザー登録したり、有料の証明書を購入したりする必要はありません。CertbotがACMEプロトコルを通して、アカウント登録と証明書発行を自動で行います。
ドメイン認証に成功すると、Certbotが証明書を取得します。今回の環境では、次のように表示されました。
Successfully received certificate.
Certificate is saved at:
/etc/letsencrypt/live/mono-finder.com/fullchain.pem
Key is saved at:
/etc/letsencrypt/live/mono-finder.com/privkey.pem
さらにCertbotがApacheへ証明書を設定します。
Successfully deployed certificate for mono-finder.com
Successfully deployed certificate for www.mono-finder.com
最終的に、次のように表示されればHTTPS化は成功です。
Congratulations! You have successfully enabled HTTPS on https://mono-finder.com and https://www.mono-finder.com
今回、Certbotによって作成・更新されたファイルは次の通りです。
| 種類 | パス |
|---|---|
| Apacheの追加設定(HTTPS用VirtualHost) | /etc/httpd/conf.d/mono-finder-le-ssl.conf |
| 証明書(本番) | /etc/letsencrypt/live/mono-finder.com/fullchain.pem |
| 秘密鍵(本番) | /etc/letsencrypt/live/mono-finder.com/privkey.pem |
certbot --apache は、この本番証明書を使うようApacheのHTTPS設定を自動で作成し、あわせて HTTP→HTTPSのリダイレクト も設定します(実行時のプロンプトでリダイレクトを選択した場合)。
⑦ WordPressのURLをHTTPSへ変更する
証明書を導入したら、ブラウザから次のURLへアクセスし、正常にWordPressが表示されることを確認します。
https://mono-finder.com
続いて、WordPress側にもサイトのURLがHTTPSであることを認識させます。
- WordPress管理画面の 「設定」→「一般」 を開く
- 次の2項目を、いずれも
https://mono-finder.comに変更する- WordPress アドレス (URL)
- サイトアドレス (URL)
- 変更を保存する
注意: 変更を保存すると再ログインを求められる場合があります。その場合は
https://mono-finder.com/wp-admin/からログインします。URLを誤って設定すると管理画面にアクセスできなくなることがあるため、必要ならデータベースのバックアップを取っておくと安全です(直接修正する場合はwp_optionsテーブルのsiteurlとhomeを更新します)。
また、http://mono-finder.com へアクセスしたときに https://mono-finder.com へリダイレクトされることも確認しておきます。
curl -I http://mono-finder.com/
HTTP/1.1 301 Moved Permanently と Location: https://mono-finder.com/ が返れば、リダイレクトは成功です。
⑧ 証明書の自動更新を確認する
Let's Encryptの証明書には有効期限があります。今回取得した証明書では、次のように表示されました。
This certificate expires on 2026-12-12.
ただし、Certbot実行時に次のように表示されており、自動更新の仕組みも設定されています。
Certbot has set up a scheduled task to automatically renew this certificate in the background.
実際に更新処理が正常に動作するか、次のコマンドでテストします。--dry-run は、実際に証明書を更新するのではなく、更新処理をシミュレーションするオプションです。
sudo certbot renew --dry-run
今回の環境では、次のように表示されました。
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/mono-finder.com/fullchain.pem (success)
これで、証明書の自動更新についても正常に動作することを確認できました。
HTTPS化の流れを整理
今回行った作業を整理すると、次のようになります。
独自ドメインをVPSへ向ける
↓
HTTPでWordPressの動作確認
↓
EPELを有効化
↓
Certbotをインストール
↓
Certbot実行
↓
ApacheのSSL設定エラー発生
↓
OpenSSLをインストール
↓
localhost用の自己署名証明書を一時作成
↓
apachectl configtest → Syntax OK
↓
Apache再起動
↓
Certbotを再実行
↓
Let's Encryptでドメイン認証
↓
SSL/TLS証明書取得
↓
Apacheへ証明書を自動設定
↓
https://mono-finder.com で公開
↓
WordPressのURLをHTTPSへ変更
↓
certbot renew --dry-run で自動更新テスト成功
これで、独自ドメインを使用したWordPressサイトをHTTPSで安全に公開できる環境が整いました。
現在の環境に合わせて確認すべきポイント
実際の AlmaLinux 10 + レンタルサーバーのVPS環境で記事化する場合は、次の点を 確認してからコマンドを確定 するのがおすすめです。
| 項目 | 確認コマンド | 現在の環境での注意点 |
|---|---|---|
| OSバージョン | cat /etc/almalinux-release |
8 / 9 / 10 でPHP・MariaDBの既定バージョンが異なる |
| PHP |
dnf info php / php -v
|
AlmaLinux 10 は既定PHP 8.3、dnf module は廃止。新版はRemiで導入。php-json は本体に統合済み |
| MariaDB |
dnf info mariadb-server / mariadb --version
|
mysql は mariadb のエイリアス。本番は mariadb-secure-installation を実施 |
| SELinux |
sestatus / getsebool -a | grep httpd
|
無効化せず、必要なBoolean(httpd_can_network_connect_db 等)とコンテキスト(httpd_sys_rw_content_t)だけ設定 |
| Firewall | firewall-cmd --list-all |
OS内firewalldに加え、VPS側のパケットフィルタ でも 80/443 を許可 |
| HTTPS | certbot renew --dry-run |
Let's Encryptで取得。80番アクセス確認後に実施し、自動更新を確認 |
これで、WordPressの基本環境を自分で構築し、独自ドメインを使用してHTTPSでサイトを公開するところまで確認できました。
まとめ
今回はAlmaLinux上にWordPressを自力で構築しました。
作業の流れは以下となります。
Apacheインストール
↓
PHPインストール
↓
MariaDBインストール
↓
WordPress用DB作成
↓
WordPressダウンロード
↓
/var/www/htmlへ配置
↓
SELinux・Firewallを確認して設定
↓
ブラウザからWordPress初期設定
↓
WordPressへログイン
↓
DNSをVPSへ向ける
↓
ApacheにVirtualHostを設定
↓
Let's EncryptでHTTPS化
↓
HTTP→HTTPSへリダイレクト
↓
https://mono-finder.com で公開
| 工程 | 使うもの | ポイント |
|---|---|---|
| Webサーバー | Apache(httpd) |
systemctl で起動・自動起動を設定 |
| 実行環境 | PHP | WordPress本体を動かす。php-mysqlnd でDB接続 |
| データベース | MariaDB | 記事・設定を保存。専用DBとユーザーを作成 |
| アプリ | WordPress |
/var/www/html に配置し、所有者をApacheへ変更 |
| セキュリティ | SELinux / Firewall | 無効化せず、必要なBooleanとポート(80/443)だけ許可 |
| セットアップ | ブラウザ | DB情報とサイト情報を入力してインストール |
| 公開 | DNS / Apache / Let's Encrypt | 独自ドメインを割り当て、HTTPS化してリダイレクトまで設定 |
WordPressの「簡単インストール」を使う場合、この裏側の作業はほとんど自動化されています。
今回はあえて自分で構築することで、Webサーバー・PHP・データベース・WordPressがどのようにつながっているのかを確認することができました。
シリーズ記事一覧
【実践 第1回】Codex + MCPでAIアフィリエイト支援システムを設計してみる 〜商品情報取得・DB蓄積・記事作成・WordPress連携〜
【実践 第2回】楽天商品をPythonのMCP Serverで取得・DB蓄積してみる 〜商品検索・ランキング取得・保存まで〜
【実践 第3回】Codexに商品・キーワードを選定させてアフィリエイト記事を作成してみる 〜商品評価・キーワード選定・記事生成・WordPress下書き登録まで〜
