DockerでWordPressを動かす(samba-ad連携)

 Samba-AD認証連携シリーズの最後はWordpressです。まさか連携できないだろうとか思ってたら世の中の奇特な方がWordPress用のプラグイン出しておられたみたいでそれを使用しました。あまり凝ったことはしないのでサクッとやりましたよ。

まぁそこまでして認証をADに寄せても結局はSSOしないとダメだよなぁと思いつつもそこまでの能力がないのでひとまずはAD認証連携でお茶を濁しています。

WordPressは先人が色々と準備してくださっているのでそれの丸パクリです(笑)


◆Version等

20.04.2 LTS (Focal Fossa)
Docker version 20.10.8, build 3967b7d
docker-compose version 1.29.1, build c34c88b2

◆構築手順

1.初期設定

# IPアドレス追加
$ sudo vi /etc/netplan/00-installer-config.yaml
-------------------------------------------------
# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      addresses:
      - 192.168.0.40/24
      - 192.168.0.41/24
      - 192.168.0.42/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        - 192.168.0.10
        - 192.168.0.11
  version: 2
-------------------------------------------------
$ sudo netplan apply

2.Docker関連作業

# ディレクトリ準備
$ cd docker/
$ mkdir wordpress
$ cd wordpress/

# Docker関連ファイル準備
$ mkdir image
$ vi image/Dockerfile
-----------------------------------
FROM wordpress

RUN set -x \
    && apt-get update \
    && apt-get install -y libldap2-dev \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \
    && docker-php-ext-install ldap \
    && apt-get purge -y --auto-remove libldap2-dev
-----------------------------------

$ vi docker-compose.yml
-------------------------
version: '3.9'

networks:
  wp_net:
    name: wordpress_net

services:

  https-portal:
    image: steveltn/https-portal:1
    container_name: web_https-portal
    ports:
      - ${HOSTNAME_WORDPRESS}:80:80
      - ${HOSTNAME_WORDPRESS}:443:443
    depends_on:
      - nginx
    restart: always
    volumes:
      - ./certs:/var/lib/https-portal
    networks:
      - wp_net
    environment:
      STAGE: 'local'
      DOMAINS: >-
        ${HOSTNAME_WORDPRESS} -> http://nginx
      WORKER_PROCESSES: auto
      WORKER_CONNECTIONS: 2048
      CLIENT_MAX_BODY_SIZE: '128M'

  # Nginx
  nginx:
    image: nginx:stable
    container_name: web_nginx
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/log:/var/log/nginx
      - ./nginx/www:/var/www
    networks:
      - wp_net
    depends_on:
      - wordpress
    restart: always

  # WordPress+PHP7.4
  wordpress:
    build: ./image/
    container_name: web_wordpress
    environment:
      - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
      - WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
      - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
      - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}
    volumes:
      - ./wordpress:/var/www/html
      - ./wordpress-php/conf.d/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    networks:
      - wp_net
    depends_on:
      - mysql
    restart: always

  # MySQL
  mysql:
    image: mysql:5.7
    container_name: web_mysql
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - wp_net
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
    restart: always
-------------------------

$ cat .env
-------------------------
HOSTNAME_WORDPRESS=192.168.0.42

# mysql
MYSQL_ROOT_PASSWORD=password
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
MYSQL_DATABASE=wordpress

# wordpress
WORDPRESS_DB_HOST=mysql
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=wordpress
WORDPRESS_DB_NAME=wordpress
-------------------------

#設定ファイル関連ディレクトリ作成
$ mkdir nginx
$ mkdir nginx/conf.d
$ mkdir wordpress-php
$ mkdir wordpress-php/conf.d

#設定ファイル作成
$ vi nginx/nginx.conf
---------------------------
user nginx;
worker_processes        auto;
worker_rlimit_nofile    80000;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
  worker_connections  2048;
  multi_accept  on;
  use epoll;
}

http {
  include /etc/nginx/mime.types;
  default_type  application/octet-stream;

  include /etc/nginx/conf.d/*.conf;
}
---------------------------

$ vi nginx/conf.d/wordpress.conf
---------------------------
server {
        listen 80;
        server_name example.com;

        location / {
                proxy_pass http://wordpress/;
                proxy_redirect          off;

                # リクエストヘッダーの情報を下位のサービスに伝える
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

                # タイムアウト設定
                proxy_connect_timeout   10;
                proxy_send_timeout      10;
                proxy_read_timeout      60;

                # 画像や動画をアップロードへの対応
                client_body_buffer_size 128M;
                client_max_body_size    128M;
                proxy_buffer_size       32K;
                proxy_buffers           50 32K;
                proxy_busy_buffers_size 64K;
        }
}
---------------------------

$ vi wordpress-php/conf.d/uploads.ini
---------------------------
file_uploads = On;
memory_limit = 256M;
post_max_size = 192M;
upload_max_filesize = 128M;
---------------------------

3.プラグイン(Active Directory Integration)導入

①WordPressログイン後にプラグイン→[新規追加]






②「Active Directory Integration」で検索し[今すぐインストール]をクリック






③インストールが完了したら[有効化]をクリック






④[LDAP/AD Login for Internet]セクションを選択






⑤[LDAP configuration]タブを選択し以下のパラメータを指定

・Select Your Directory Server:Microsoft Active Directory

・LDAP Server:samba-adサーバのIPアドレス入力

・Username:Administratorを設定

・Password:Administratorのパスワードを入力

全て設定したら[TestConnection&Save]をクリック








⑥下部に進み以下を追加で入力

・Search Base:[dc=で始まるドメインを入力]

・UsernameAttribute:sAMAccountNameを指定

上記設定後に[Save User Mapping]をクリック










⑦テストを行って接続確認

・Username:Samba-ADに登録している任意のユーザ

・Password:上記ユーザのパスワード





⑧LDAP Login有効化

[Sign-In Settings]タブを選択して[Enable LADP login]をチェックする







⑨Role編集(LDAPグループでロール指定できるみたいだが今回は未設定)

[Enable Role Mapping]にチェックを入れてDefaultRoleを編集者とする。

[Save Configuration]をクリックする









◆参考サイト

・AD連携

https://ja.wordpress.org/plugins/ldap-login-for-intranet-sites/

https://stackoverflow.com/questions/17739721/active-directory-integration-with-wordpress-and-ldap

・wordpress拡張

https://registry.hub.docker.com/r/dalareo/wordpress-ldap

・WordPressDocker


一応GitHub上げました

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)