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
コメント