2026年7月5日
2026年7月5日
FreeBSDでWordPressを動かす設定手順(Nginx・PHP-FPM・MySQL)
FreeBSD で WordPress を動かすには、pkg で Nginx・PHP・MySQL を入れ、sysrc で自動起動を設定し、Nginx から PHP-FPM へ PHP の処理を渡す設定を書きます。手順そのものは Linux と似ていますが、設定ファイルが /usr/local/etc 以下にある、wget が標準で入っていない、PHP の拡張機能が個別のパッケージに分かれているなど、FreeBSD ならではの違いでつまずきやすくなります。この記事では、インストールから初期画面の表示、公開前の確認までを順に説明します。
前提とバージョンの確認
この記事は、root 権限で操作できる FreeBSD のサーバーを想定しています。パッケージ名にはバージョン番号が含まれ、提供されるバージョンは時期によって変わります(2026年10月現在)。以下では PHP 8.3 を php83、MySQL 8.4 を mysql84-server として書いていますが、作業前に次のコマンドで実際に提供されている名前を確認し(拡張機能も含めて一覧が出るので、php83 のような本体の名前を探します)、必要に応じて読み替えてください。
pkg search '^php8'
pkg search 'mysql.*-server'
PHP のバージョンは、WordPress 本体と使う予定のテーマ・プラグインが対応しているものを選びます。サポートが終わったバージョンは避けてください。
システムを更新してパッケージを入れる
まず OS とパッケージを最新にします。
freebsd-update fetch install
pkg update && pkg upgrade
続いて、Web サーバー、PHP と WordPress が使う拡張機能、データベースを入れます。FreeBSD の PHP は本体と拡張機能が別のパッケージになっており、php83 だけでは mysqli などが入りません。
pkg install nginx php83 php83-mysqli php83-curl php83-gd php83-mbstring \
php83-zip php83-exif php83-fileinfo php83-intl php83-dom php83-xml \
php83-simplexml php83-xmlreader php83-xmlwriter php83-zlib php83-sodium \
php83-iconv php83-ctype php83-filter php83-session php83-tokenizer \
php83-opcache mysql84-server
パッケージ名が見つからないと表示された場合は、その拡張機能が本体に含まれているか、名前が変わっている可能性があります。pkg search php83- で一覧を確認してください。
サービスの自動起動と PHP の設定
sysrc で /etc/rc.conf に自動起動の設定を追加します。ファイルを直接編集するより書き間違いが起きにくい方法です。
sysrc nginx_enable=YES
sysrc php_fpm_enable=YES
sysrc mysql_enable=YES
PHP の設定ファイルは、本番向けの雛形をコピーして使います。
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
/usr/local/etc/php.ini を開き、画像やプラグインのアップロードで困らないよう、upload_max_filesize と post_max_size を必要な大きさに、memory_limit を 256M 程度に調整します。post_max_size は upload_max_filesize 以上にしてください。
PHP-FPM のプール設定は /usr/local/etc/php-fpm.d/www.conf にあります。標準では 127.0.0.1:9000 で待ち受け、www ユーザーで動きます。後で Nginx に書く接続先と一致しているかを確認しておきます。
設定ができたらサービスを起動します。起動スクリプトの名前は ls /usr/local/etc/rc.d/ で確認できます。
service mysql-server start
service php_fpm start
データベースとユーザーを作成する
MySQL を初めて起動したときの root パスワードの扱いは、バージョンやパッケージによって異なります。pkg info -D mysql84-server でインストール時のメッセージを読み、案内に従って root でログインしてください。初期設定の後は mysql_secure_installation で匿名ユーザーやテスト用データベースを削除しておきます。
WordPress 用のデータベースとユーザーを作成します。MySQL 8 以降では GRANT 文でパスワードを同時に設定する古い書き方は使えないため、CREATE USER と GRANT を分けます。パスワードは長いランダムな文字列にしてください。
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'your-strong-password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
WordPress を配置する
FreeBSD では、ファイルのダウンロードに標準の fetch コマンドを使えます。
cd /tmp
fetch https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz -C /usr/local/www/
cp /usr/local/www/wordpress/wp-config-sample.php /usr/local/www/wordpress/wp-config.php
chown -R www:www /usr/local/www/wordpress
wp-config.php を開き、DB_NAME、DB_USER、DB_PASSWORD を先ほど作った値に、DB_HOST を localhost にします。認証用キーの部分は、https://api.wordpress.org/secret-key/1.1/salt/ で生成した値に置き換えてください。サンプルのままにしておくと、ログインのクッキーが推測されやすくなります。
ファイルの所有者をすべて www にすると、管理画面からの更新が使える一方で、PHP の脆弱性を突かれたときに全ファイルが書き換えられるおそれがあります。更新を SSH や WP-CLI で行う運用なら、所有者を別のユーザーにし、wp-content/uploads など書き込みが必要な場所だけを www に書き込ませる構成も検討してください。
Nginx を設定する
/usr/local/etc/nginx/nginx.conf の http ブロック内に、WordPress 用の server ブロックを書きます。標準の設定に含まれている server ブロックは、ポートが重ならないよう削除するかコメントアウトします。
server {
listen 80;
server_name example.com www.example.com;
root /usr/local/www/wordpress;
index index.php;
client_max_body_size 64m;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
location / の try_files は、パーマリンクを「投稿名」などにしたときに記事の URL を index.php へ渡すための設定です。これがないと、トップページは表示されるのに記事を開くと 404 になります。client_max_body_size は、PHP 側の post_max_size と揃えておくと、アップロード時に 413 エラーが出るのを防げます。
書き終えたら構文を確認してから起動します。
nginx -t
service nginx start
ブラウザでサーバーのアドレスを開き、WordPress のインストール画面が出れば成功です。真っ白な画面や 502 エラーになる場合は、PHP-FPM が起動しているか(service php_fpm status)と、fastcgi_pass の接続先が www.conf の listen と一致しているかを確認します。ログは /var/log/nginx/error.log に出ます。
公開前に整えておくこと
- HTTPS: Let's Encrypt の証明書は certbot か acme.sh で取得できます。certbot のパッケージ名には Python のバージョンが含まれるため、
pkg search certbotで確認してから入れてください - ファイアウォール:
pfなどで、80・443 番と SSH 以外のポートを外部から閉じます。MySQL の 3306 番を外に公開する必要はありません - 脆弱性の確認:
pkg audit -Fで、入れたパッケージに既知の脆弱性がないかを定期的に確認します - 更新前の退避: ZFS を使っているなら、OS やパッケージの更新前にスナップショットや
bectlのブート環境を作っておくと、問題が起きたときに戻せます。データベースは別途mysqldumpでも保存してください
まとめ
- FreeBSD ではパッケージ名にバージョンが入るため、作業前に
pkg searchで提供中の名前を確認する - PHP の拡張機能は個別のパッケージなので、
mysqliなどを明示して入れる - 自動起動は
sysrc、設定ファイルは/usr/local/etc以下にある - MySQL 8 以降は
CREATE USERとGRANTを分けてユーザーを作る - Nginx の
try_filesとfastcgi_passの設定が合っているか、nginx -tとエラーログで確認する