お知らせ!! 「jpcmoh.myds.me」から「mohlog.com」へ変更しました
PR
NASでWebサーバー

Raspberry Pi+dockerでWEBサーバー(WordPress) – リバースプロキシ経由

アイキャッチ docker NASでWebサーバー
記事内に広告が含まれています。
スポンサーリンク

はじめに

こちらの記事のWEBサーバーと同じものを、dockerを使ってつくりました。

webサーバー接続図5docker
この攻勢ならNASは非力な機種で可
スポンサーリンク

RaspberryPi(以下ラズパイ)OS(システム)の冗長化

冗長化が不要な方は、ここはとばしてください。

ラズパイのシステムが入っているストレージをRAID1にして冗長化します。
こちらのいずれかの記事を参照ください。

スポンサーリンク

dockerのインストールとユーザー権限で使えるようにする

dockerのインストール

aptでdockerをインストールする場合、最新バージョンでないことがあります。
最新版を使いたいので、Docker公式サイトのインストールスクリプトを使う方法でインストールします。

Docker公式サイトのインストールスクリプトのダウンロード
curl -fsSL https://get.docker.com -o get-docker.sh
dockerのインストール
sudo sh get-docker.sh
dockerのバージョン確認
docker -v

ユーザー権限で使えるようにする

ユーザー権限でつかえるようにする
sudo gpasswd -a $USER docker
newgrp docker
スポンサーリンク

dockerでWordPress webサーバーをつくる

前提条件

  • Raspberry Pi 5 (メモリは4GBあれば充分、4Bでも可)
  • Raspberry Pi OS Release 1 Oct 2025 -- Debian ver 13(trixie)
  • webサーバー:apache2
  • データベースサーバー:mariaDB 11.8.3
  • 永続的オブジェクトキャッシュ:redis 8.2.2
  • phpの設定は、別ファイルを作っておいてコピーする方法をとる
  • リバースプロキシ対応 リバースプロキシのIPアドレス:192.168.0.218
  • WordPressのプラグイン EWWW Image Optimizerに対応
  • dockerのディレクトリ(フォルダ)-ファイルの構成は以下
dockerのディレクトリ(フォルダ)-ファイルの構成
dockerのディレクトリ(フォルダ)-ファイルの構成

ディレクトリ(フォルダ)作成

必要なディレクトリ(フォルダ)を作成します

必要なディレクトリ(フォルダ)を作成
mkdir ~/wp-docker
cd ~/wp-docker
mkdir conf database redis wordpress

docker-compose.yamlの作成

docker-compose.ymlの作成
nano docker-compose.yml

以下の内容を記載します。

docker-compose.ymlの内容
services:
  wordpress:
    build:
      context: .
      dockerfile: Dockerfile
    image: wordpress:php8.4-apache
    container_name:  wp
    ports:
      - 8080:80
    depends_on:
      db:
        condition: service_started
      redis:
        condition: service_healthy
    volumes:
      - ./wordpress:/var/www/html:rw
      - ./conf/php.ini:/usr/local/etc/php/conf.d/php.ini:ro
      - ./conf/remoteip.conf:/etc/apache2/conf-available/remoteip.conf:ro
      - ./conf/headers.load:/etc/apache2/mods-enabled/headers.load:ro
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: webdata #データベース名
      WORDPRESS_DB_USER: WebUser1 #データベースのユーザー名
      WORDPRESS_DB_PASSWORD: User1Pass #データベースのユーザーパスワード
    restart: unless-stopped
#ループバック対策 web URL:リバースプロキシのアドレス と記載
    extra_hosts:
     - "xxx.yyy.zz:192.168.0.218"

  db:
    image: mariadb:11.8.3
    container_name: wp_db
    security_opt:
      - no-new-privileges:true
    hostname: db
    #Docker外からもアクセス出きるようにポートを設定
    # mysql -P 13306 -u[user] -p[pass] でアクセス化
    ports:
      - 13306:3306
    environment:
      MYSQL_DATABASE: webdata #データベース名
      MYSQL_USER: WebUser1 #データベースのユーザー名
      MYSQL_PASSWORD: User1Pass #データベースのユーザーパスワード
      MYSQL_ROOT_HOST: localhost
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Tokyo
    volumes:
      - ./database:/var/lib/mysql:rw
    healthcheck:
      test: ["CMD-SHELL", "mariadb -uroot -proot -e 'SELECT 1;' || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    restart: unless-stopped

  redis:
#    image: redis:latest
    image: redis:8.2.2
    container_name: wp_redis
    healthcheck:
     test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    environment:
      TZ: Asia/Tokyo
    volumes:
      - ./redis:/data:rw
    restart: unless-stopped

Dockerfileの作成

Dockerfileの作成
nano Dockerfile

以下の内容を記載

Dockerfileの内容
#php8.4-apacheはdocker-compose.ymlで指定したもの
FROM wordpress:php8.4-apache
#モジュールの追加
COPY conf/headers.load /etc/apache2/mods-enabled/headers.load
#リバーシプロキシ対策
RUN a2enmod remoteip
# mod_remoteip の設定ファイルを追加
COPY conf/remoteip.conf /etc/apache2/conf-available/remoteip.conf
RUN a2enconf remoteip

#EWWW Image Optimizerプラグイン対策
# 必要なツールをインストール
RUN apt-get update && apt-get install -y \
    gifsicle \
    jpegoptim \
    optipng \
    libjpeg-progs \
    && apt-get clean

confディレクトリ内header.load の作成

header.load の作成
nano conf/header.load

以下の内容を記載

header.loadの内容
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

confディレクトリ内php.ini の作成

php.ini の作成
nano conf/php.ini

以下の内容を記載(環境にあわせて変更ください)

php.iniの内容
max_execution_time=300
memory_limit=512M
post_max_size=512M
upload_max_filesize=512M
max_input_time=600
max_input_vars=2000
date_timezone=Asia/Tokyo
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.jit=1205
opcache.jit_buffer_size=16M

confディレクトリ内remoteip.conf の作成

remoteip.conf の作成
nano conf/remoteip.conf

以下の内容を記載(環境にあわせて変更ください)

remoteip.confの内容
# remoteip.conf
RemoteIPHeader X-Forwarded-For
#リバースプロキシがDocker内にある場合。Dockerのbridgeネットワーク範囲を指定
#RemoteIPTrustedProxy 172.17.0.0/16
#リバースプロキシが外部の場合 そのリバースプロキシのIPアドレスを記載
RemoteIPTrustedProxy 192.168.0.218

起動

起動
docker compose up -d 
スポンサーリンク

リバースプロキシの設定

SynologyNASのリバースプロキシは、以下のようにします。

リバースプロキシの設定
リバースプロキシの設定

赤枠内は、環境にあわせて変更してください(前述のdocker-compose.yamファイル内の記述と一致している必要あり)

スポンサーリンク

WordPressの初期設定

ブラウザでhttps://xxx.yyy.zzにアクセスすれば、WordPressの初期設定画面が表示されます。

スポンサーリンク

プラグインRedis Object Cache導入前にやること

プラグインRedis Object Cacheを導入するまえに、WordPressの設定ファイル wp-config.phpを変更します。
こうしないとプラグインが認識してくれません。

wp-config.phpを編集
sudo nano ~/wp-docker/wordpress/wp-config.php
以下を追加
define('WP_REDIS_HOST', 'redis'); 
define('WP_REDIS_PORT', 6379); 
スポンサーリンク

おわりに

なにかの参考になればさいわいです。

コメント

タイトルとURLをコピーしました