【備忘録】Raspberry Pi 4 WEBサーバー化マニュアル


Docker + WordPressの自宅Webサーバー構築マニュアル


■用意したインターネット環境

  • 回線:enひかり オプション有(固定IP)
  • ルーター:tp-link


■ラズパイセットアップ編

  1. PCに「Raspberry Pi Imager」をインストール

2. MicroSDカードにOSを書き込み、初期設定を行う

※このとき、セキュリティのためにSSHは「公開鍵認証」を選ぶ

3. ラズパイにMicroSDカードを挿入し、電源をつなぐ

4. PCからSSHでラズパイにアクセス

ssh -i 鍵のパス ユーザー名@ホスト名

5. パッケージを最新の状態に更新

sudo apt update
sudo apt upgrade -y


■Docker導入編

  1. Dockerのインストール
curl -sSL https://get.docker.com | sh

2. 権限設定(sudoなしでdockerコマンドを使えるように)

sudo usermod -aG docker ユーザー名

3. いったんログアウトして、再度ログイン

exit

4. dockerの起動テスト

docker ps

CONTAINER ID ... と表示されていればインストール成功


■セキュリティ編

SSHのパスワードログインを禁止

  1. 設定ファイルを開く
sudo nano /etc/ssh/sshd_config

2. 以下の項目を探して変更(または追記)

PasswordAuthentication no # パスワード禁止PermitRootLogin no # 管理者での直接ログイン禁止PubkeyAuthentication yes # 公開鍵認証を許可

3. Ctrl + OEnter で保存し、Ctrl + X で終了

4. 設定を反映させる

sudo systemctl restart ssh


ファイアウォール(UFW)の導入

  1. インストール
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 の導入

  1. インストール
sudo apt install fail2ban -y

/var/log/fail2ban.log にてブロックされたIPアドレスが確認できる


■WordPress導入編

公式のWordPressイメージには最適化されたApacheが組み込まれているため、LAMP環境を直接構築するのではなく、Docker Composeを使って「WordPressコンテナ」と「データベースコンテナ」を立ち上げる。

  1. 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」を使用する。


アップロード容量制限の緩和

  1. 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


データの移行

  1. 引っ越し前のサイト: 「All-in-One WP Migration」プラグインから「エクスポート」→「ファイル」を選択し、サイトデータをダウンロードする

2. 引っ越し先のサイト: 「All-in-One WP Migration」→「インポート」を開き、上限が2GBになっていることを確認して、先ほどのデータをアップロードする

3. インポートが完了し「構造を更新しました」というメッセージが出たら、「設定」→「パーマリンク」を開く

※この時点でログイン情報を求められたら、引っ越し前のサイトのユーザー名とパスワードでログインすること

4. パーマリンク設定は何も変えずに「変更を保存」を2回クリック


■インターネット環境構築編

以下、回線は「enひかり 固定IPオプション」、ルーターはTP-Linkを使用した場合

  1. ルーターの管理画面にアクセスし、接続方式を「IPv4 PPPoE」等に設定してインターネットに接続

※スマホからルーターを設定する場合、キャリア通信を切り、Wi-Fiでルーターに接続した状態で行うこと

2. IPアドレスの固定化: 「DHCPサーバー」→「アドレス予約」にて、ラズパイのMACアドレスとプライベートIPを紐付け

※MACアドレスはラズパイ上で ip a を実行し、eth0link/ether 以下の文字列で確認できる

3. ポート開放: 「ポート転送」から以下を設定

  • サービス名:HTTP
  • デバイスのIPアドレス:ラズパイを選択
  • 外部ポート:個別のポート, 80
  • 内部ポート:80
  • プロトコル:すべて

4. 同様に、HTTPS/ 443も設定

※SSHを外部からアクセスできるようにする場合は、セキュリティ対策として外部ポートを 50022 などの任意の番号にし、内部ポートを 22 にするべし。

(接続例: ssh -p 50022 -i "鍵のパス" ユーザー名@グローバルIPアドレス


■アドレス設定・HTTPS化編

ローカル環境(http://ホスト名.local)前提で構築したWordPressを、取得したドメイン名とHTTPS(SSL)でアクセスできるように変更


DNS設定(例:ムームードメイン)

  1. ドメイン管理画面から「ネームサーバー設定変更」でサービスが「ムームーDNS」になっているか確認

2. 「ムームーDNS」→対象ドメインの「処理の変更」→「詳細2へ進む」→「設定を追加する」へ進み、以下のように設定

  • サブドメイン: (空欄)
  • 種別: A
  • 内容: 取得済の固定IPアドレス

3. 「設定を追加」をクリック


URLの置換

  1. WordPress管理画面からプラグイン「Better Search Replace」をインストールして有効化

2. 以下の設定で実行

  • Search for: http://旧ドメイン.local
  • Replace with: 新ドメイン
  • Select tables: すべてのテーブルを選択
  • Run as dry run?: チェックを外す


HTTPS化とリバースプロキシ(Nginx Proxy Manager)の導入

  1. 現在のWordPressのポートを変更する。

WordPress用の docker-compose.yml を開き、ポートの設定を以下の様に変更

# 変更前
ports:
  - "80:80"
# 変更後
ports:
  - "8080:80"

2. 設定を反映させる(docker-compose.yml があるディレクトリで実行)

docker compose up -d

docker ps0.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証明書を発行

  1. 同じネットワーク上の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 書き換え

  1. 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';
}

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です