Docker + WordPressの自宅Webサーバー構築マニュアル
■用意したインターネット環境
- 回線:enひかり オプション有(固定IP)
- ルーター:tp-link
■ラズパイセットアップ編
- PCに「Raspberry Pi Imager」をインストール
2. MicroSDカードにOSを書き込み、初期設定を行う
※このとき、セキュリティのためにSSHは「公開鍵認証」を選ぶ
3. ラズパイにMicroSDカードを挿入し、電源をつなぐ
4. PCからSSHでラズパイにアクセス
ssh -i 鍵のパス ユーザー名@ホスト名
5. パッケージを最新の状態に更新
sudo apt update
sudo apt upgrade -y
■Docker導入編
- Dockerのインストール
curl -sSL https://get.docker.com | sh
2. 権限設定(sudoなしでdockerコマンドを使えるように)
sudo usermod -aG docker ユーザー名
3. いったんログアウトして、再度ログイン
exit
4. dockerの起動テスト
docker ps
CONTAINER ID ... と表示されていればインストール成功
■セキュリティ編
SSHのパスワードログインを禁止
- 設定ファイルを開く
sudo nano /etc/ssh/sshd_config
2. 以下の項目を探して変更(または追記)
PasswordAuthentication no # パスワード禁止PermitRootLogin no # 管理者での直接ログイン禁止PubkeyAuthentication yes # 公開鍵認証を許可
3. Ctrl + O → Enter で保存し、Ctrl + X で終了
4. 設定を反映させる
sudo systemctl restart ssh
ファイアウォール(UFW)の導入
- インストール
sudo apt update
sudo apt install ufw -y
2. 基本方針(外からの通信はすべて拒否、中からの通信はすべて許可)を設定
sudo ufw default deny incoming
sudo ufw default allow outgoing
3. 必要なポートだけを開ける
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 22/tcp # SSH
4. ファイアウォールを有効化
sudo ufw enable
※事前に sudo ufw show added コマンドなどで 22/tcp (SSH) が許可されていることを必ず確認
Fail2Ban の導入
- インストール
sudo apt install fail2ban -y
※ /var/log/fail2ban.log にてブロックされたIPアドレスが確認できる
■WordPress導入編
公式のWordPressイメージには最適化されたApacheが組み込まれているため、LAMP環境を直接構築するのではなく、Docker Composeを使って「WordPressコンテナ」と「データベースコンテナ」を立ち上げる。
- WordPress用のディレクトリを作り、設定ファイル(
docker-compose.yml)を作成
version: '3.8'
services:
db:
image: mariadb:10.6
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: your_wp_password
volumes:
- db_data:/var/lib/mysql
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: your_wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
※パスワード(your_root_password, your_wp_password)は推測されにくいものに
2. 保存して閉じる(Ctrl+O, Enter, Ctrl+X)
3. コンテナを起動
docker compose up -d
4. ブラウザから http://ホスト名.local にアクセスすると、WordPressの初期設定画面が表示されるはず。Jetpackなどのプラグインも入れとく
■サイトデータ引っ越し編
既存のWordPressサイトからデータを移行する手順。プラグイン「All-in-One WP Migration」を使用する。
アップロード容量制限の緩和
- WordPressコンテナの中に入る
docker exec -it [WordPressのコンテナ名] bash
2. .htaccess ファイルの最下部に以下を追記
php_value upload_max_filesize 2048M
php_value post_max_size 2048M
php_value memory_limit 512M
php_value max_execution_time 300
php_value max_input_time 300
データの移行
- 引っ越し前のサイト: 「All-in-One WP Migration」プラグインから「エクスポート」→「ファイル」を選択し、サイトデータをダウンロードする
2. 引っ越し先のサイト: 「All-in-One WP Migration」→「インポート」を開き、上限が2GBになっていることを確認して、先ほどのデータをアップロードする
3. インポートが完了し「構造を更新しました」というメッセージが出たら、「設定」→「パーマリンク」を開く
※この時点でログイン情報を求められたら、引っ越し前のサイトのユーザー名とパスワードでログインすること
4. パーマリンク設定は何も変えずに「変更を保存」を2回クリック
■インターネット環境構築編
以下、回線は「enひかり 固定IPオプション」、ルーターはTP-Linkを使用した場合
- ルーターの管理画面にアクセスし、接続方式を「IPv4 PPPoE」等に設定してインターネットに接続
※スマホからルーターを設定する場合、キャリア通信を切り、Wi-Fiでルーターに接続した状態で行うこと
2. IPアドレスの固定化: 「DHCPサーバー」→「アドレス予約」にて、ラズパイのMACアドレスとプライベートIPを紐付け
※MACアドレスはラズパイ上で ip a を実行し、eth0 の link/ether 以下の文字列で確認できる
3. ポート開放: 「ポート転送」から以下を設定
- サービス名:HTTP
- デバイスのIPアドレス:ラズパイを選択
- 外部ポート:個別のポート, 80
- 内部ポート:80
- プロトコル:すべて
4. 同様に、HTTPS/ 443も設定
※SSHを外部からアクセスできるようにする場合は、セキュリティ対策として外部ポートを 50022 などの任意の番号にし、内部ポートを 22 にするべし。
(接続例: ssh -p 50022 -i "鍵のパス" ユーザー名@グローバルIPアドレス)
■アドレス設定・HTTPS化編
ローカル環境(http://ホスト名.local)前提で構築したWordPressを、取得したドメイン名とHTTPS(SSL)でアクセスできるように変更
DNS設定(例:ムームードメイン)
- ドメイン管理画面から「ネームサーバー設定変更」でサービスが「ムームーDNS」になっているか確認
2. 「ムームーDNS」→対象ドメインの「処理の変更」→「詳細2へ進む」→「設定を追加する」へ進み、以下のように設定
- サブドメイン: (空欄)
- 種別: A
- 内容: 取得済の固定IPアドレス
3. 「設定を追加」をクリック
URLの置換
- WordPress管理画面からプラグイン「Better Search Replace」をインストールして有効化
2. 以下の設定で実行
- Search for:
http://旧ドメイン.local - Replace with:
新ドメイン - Select tables: すべてのテーブルを選択
- Run as dry run?: チェックを外す
HTTPS化とリバースプロキシ(Nginx Proxy Manager)の導入
- 現在のWordPressのポートを変更する。
WordPress用の docker-compose.yml を開き、ポートの設定を以下の様に変更
# 変更前
ports:
- "80:80"
# 変更後
ports:
- "8080:80"
2. 設定を反映させる(docker-compose.yml があるディレクトリで実行)
docker compose up -d
※ docker ps で 0.0.0.0:8080->80/tcp となっていればOK
3. 続けて Nginx Proxy Manager (NPM) を起動する
新しいディレクトリを作成し、移動する
mkdir npm
cd npm
4. npm フォルダ内に以下の docker-compose.yml を作成
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 外からのHTTP
- '81:81' # 管理画面
- '443:443' # 外からのHTTPS
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
5. NPMを起動
docker compose up -d
Nginx Proxy Manager でSSL証明書を発行
- 同じネットワーク上のPCブラウザから
http://ラズパイのプライベートIPアドレス:81にアクセス
2. 初期ログイン情報(admin@example.com / changeme)でログインし、パスワードとユーザー情報を変更
3. [Hosts] > [Proxy Hosts] > [Add Proxy Host] をクリックし、以下を設定
- Domain Names: 自分のドメイン(例:
your-domain.com) - Forward Hostname / IP: ラズパイのプライベートIPアドレス
- Forward Port:
8080
※ここでは scheme を https にせず、http のまま
4. [SSL] タブを開き、一旦 SSL Certificate はいじらず、Force SSL をOFFのまま [Save]
5. 作成した Proxy Host の右側のメニュー(縦の「・・・」)から再度編集画面を開き、[SSL] タブで以下のように変更
- SSL Certificate:
Request a new SSL Certificate - Force SSL:
ON
利用規約同意のチェックを入れてから保存する。これでLet’s Encryptの証明書が発行される
WordPressの wp-config.php 書き換え
- WordPressコンテナに入る
docker exec -it [WordPressのコンテナ名] bash
※コンテナ名は docker ps で確認
2. wp-config.php を開き、以下の内容を追記
define( 'WP_HOME', 'https://あなたのドメイン.com' );
define( 'WP_SITEURL', 'https://あなたのドメイン.com' );
define( 'FORCE_SSL_ADMIN', true );
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS'] = 'on';
}

コメントを残す