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









コメント