SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
堅牢 & 運用楽々 な
WordPress を Azure App Service で
株式会社 pnop / Cloudlive 株式会社
浅見 城輝
2020/03/13 @JAZUG TOHOKU
© 2020 pnop
© 2011 Microsoft Corporation
All Rights Reserved.
About me
kuniteru.asami
Find me
Database
Azure 2012~
Microsoft Azure
© 2020 pnop
はじめに
Azure App Service の WordPress の構築については、
App Service(リリース当初は Web Apps)の登場と共に
何度も紹介されています。
しかしながら、App Service は日々進化しているため、最新の機能
(Preview を含む)なども取り入れ、今 Azure App Service に
WordPress を作るならというお話しをさせていただきます。
※ 2020/03/13 時点の情報がベースとなります
※ Preview 機能も紹介していますが、Preview であることは
明記していません
© 2020 pnop
WordPress のよくある課題
応答速度の向上 セキュリティ 可用性の向上
© 2020 pnop
応答速度を向上したい
よくある WordPress の高速化手法
Azure App Service での課題
© 2020 pnop
WordPress の Plugin と Azure の機能を組み合わせて高速化する
Azure Cache for Redis に Object
Cache を持つことで DB へのア
クセスを軽減
• Redis Object Cache Plugin
CDNを利用し
(Azure CDN or Azure Front Door)
グローバルに分散したコンテン
ツ キャッシュを持つ
よくある WordPress の高速化手法と Azure での対応
ページをキャッシュする
• WP Super Cache など
最新バージョンの PHP の利用
• App Service では最新への
バージョンアップが容易
• リビジョンレベルは
自動アップデート
WordPress
Plugin
の活用
App Service のスペックを上げる
• Premium (max):
CPU 4 core, RAM 14 GB, SSD
• Isolated (max):
CPU 8 core, RAM 32 GB, SSD
App Service のインスタンスを
増やし、アクセスを分散する
• 負荷状況に応じて自動で
増減することでコストを
抑制
App Service
の性能向上 Azure DB for MySQL/MariaDB の
スペックを上げる
• (max) CPU 64 core,
RAM 320 GB
データベースの読取レプリカで、
データベースへのアクセスを
分散する
• HyperDB Plugin
DB の
性能向上
外部
キャッシュ
の利用
PHP
ランタイム
の高速化
PHP アクセラレーターの利用
コードを圧縮し
通信データ量を減らす
• Autoptimize など
© 2020 pnop
Azure App Service での課題
Azure App Service では、
一般に WordPress をインストールする領域のストレージが遅め
速度が遅い領域での I/O を減らすために、データの永続化および App Service インスタンス間で
の共有が必要なディレクトリにのみ、Azure Files をマウントする(一部のデプロイ方法)
Premium File Storage をマウントしてそこにアプリケーションを展開(App Service for Container)
← デフォルトでは home 以下が Azure Files をマウントした共有ストレージ
← wwwroot が Web サイトのドキュメント ルート
/ (D:¥)
home
site
wwwroot
index.php
wp_content ← メディア や テーマ、プラグインのファイルが配置される(要永続化)
© 2020 pnop
セキュリティ
最新バージョンへの更新
Web Application Firewall
管理サイトの認証
© 2020 pnop
最新バージョンへの更新
古い WordPress で運用を続けたために、既知のセキュリティ ホールをつかれ、
コンテンツを改竄されるなどのインシデントが頻繁に発生している
WordPress の更新
WordPress の機能としての自動更新
WordPress アプリケーションのファイル全てを永続化領域(Azure Files)に
保存している場合に限り利用できる
wp_content だけを永続化領域に保存しているなどの場合、自動更新後のスケール アウトや障害による
インスタンスの再起動により、永続化領域以外のファイルがデプロイ直後のものに戻ってしまう
Official Docker Image を利用し、Continuous Deploy を有効にすれば、自動更新される
OS や httpd、PHP などの更新
基本的には Azure が自動で最新に更新してくれる
ただし App Service for Container の場合は、その Container Image に依存する
Continuous Deploy を有効にしている場合は、Image が更新されれば App Service も更新される
© 2020 pnop
Web Application Firewall
WordPress を対象とした攻撃は日々大量に来る
WAF を通して App Service にアクセスさせることで安全性を高める
Azure Application Gateway Azure Front Door
Virtual Machines (VMSS) に
セットアップした
3rd-Party の WAF 製品
3rd-Party が提供している
Azure 外の WAF サービス
※ 実は App Service 内にも WAF の機能は持っているが、ほとんど情報もなく、利用事例は極端に少ない
© 2020 pnop
WordPress の管理サイトへのログインを試みる攻撃も多い
WordPressが独自に実装する認証だけではなく、
App Service の Easy Auth 機能あるいは WordPress の Plugin により
外部 IdP が提供する安全な認証を適用することができる
とても簡単な設定だけで、リスクの低い認証を実現できる
MFA、アクセス元 IP 制限、ログイン監査 など
Easy Auth が対応する認証プロバイダー
管理サイトの認証
Azure Active
Directory
Microsoft Account Facebook Google Azure AD B2C
に対応する IdP
Twitter And
more…
© 2020 pnop
App Service や Azure DB for MySQL は通常、VNet には所属していない。
そのためそれらの間は通常はグローバル ネットワークでの通信となる
が、リージョン VNet 統合と PaaS への VNet サービス エンドポイントか
Private Link を組み合わせることで、通信経路を制限することができる。
App Service から Azure DB for MySQL への通信
(リージョン)VNet 統合
+ Private Link
VNet
グローバルネット
(IP 制限)
リージョン VNet 統合
+ サービス エンドポイント
VNet
My App Service
11.11.11.11
22.22.22.22
© 2020 pnop
可用性の高い環境
© 2020 pnop
App Service の可用性
App Service は インスタンスを複数にすると可用性が上がる
App Service Plan
Load Balancer
Azure DB fro MySQL
Instance #1 Instance #2
Azure Files
© 2020 pnop
データベースの高い可用性とレプリケーション
Azure DB for MySQL/MariaDBでは、標準で高可用性構成がとられる
ディザスタ リカバリあるいは読取分散による高速化のために、
同構成の読取専用レプリカを作ることも可能
Standard 可用性モデル
Gateway Ring
Primary
Database
Engine
spare
mount
Data files
Log files
failover
Page Blob (Premium)
spare
Client
※ Premium 可用性モデルでは、読取専用として Secondary にアクセスすることも可能
© 2020 pnop
お薦めの構成
© 2020 pnop
構成案
コンテンツ
管理者
読取レプリカ
レプリケーション
/wp-admin への
アクセスはフィルタ
アクセス制限
コンテンツ管理者
/wp-admin への
アクセスはフィルタ
コンテンツ管理用
WordPress
/wp-contents
Azure AD
認証
プライマリ
mount mount
アクセス制限
CDN
WAF
CDN
WAF
Azure Front Door Azure AD
App Service Azure Storage
Azure DB for MySQL
Azure AD
認証
© 2020 pnop
App Service に対するアプリケーションのデプロイ方法
ZIP / WAR file
Bitbucket
DropBox
GitHubローカル Git
OneDrive
Azure Repos
Docker
FTP(S)
Azure
Marketplace
© 2020 pnop
Azure Marketplace で提供されている WordPress
© 2020 pnop
Azure Marketplace で提供されている WordPress
https://github.com/azureappserviceoss/wordpress-azure https://hub.docker.com/r/appsvcorg/wordpress-alpine-php:0.72
© 2020 pnop
お薦めの WordPress デプロイ先とデプロイ方法
App Service for Container
に対し
Docker Hub の
WordPress Docker Official Image
Docker Compose で
Continuous Deploy
© 2020 pnop
Docker Compose – App Service for Linux
docker-compose.yml ファイルの例
version: '3.5'
services:
wordpress:
image: wordpress
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
# WORDPRESS_TABLE_PREFIX:
# WORDPRESS_AUTH_KEY:
# WORDPRESS_SECURE_AUTH_KEY:
# WORDPRESS_LOGGED_IN_KEY:
# WORDPRESS_NONCE_KEY:
# WORDPRESS_AUTH_SALT:
# WORDPRESS_SECURE_AUTH_SALT:
# WORDPRESS_LOGGED_IN_SALT:
# WORDPRESS_NONCE_SALT:
# WORDPRESS_DEBUG:
WORDPRESS_CONFIG_EXTRA: |
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
volumes:
- "${WEBAPP_STORAGE_HOME}/site/wwwroot/wp-
content:/var/www/html/wp-content"
© 2020 pnop
Docker Compose – App Service for Linux
接続先 MySQL 情報や /home 以下の永続化設定
App Service のアプリケーション設定として以下を追加/変更する
WEBSITES_ENABLE_APP_SERVICE_STORAGE(変更)
false → true に変更
WORDPRESS_DB_HOST(追加)
MySQL ホスト名
WORDPRESS_DB_NAME(追加)
MySQL データベース名
WORDPRESS_DB_USER(追加)
MySQL ログインユーザー名
WORDPRESS_DB_PASSWORD(追加)
MySQL ログインパスワード
© 2020 pnop
Tips
© 2020 pnop
WordPress on Azure App Service Tips
Azure Database for MySQL / MariaDB と SSL 通信するために
wp-config.php に以下を追加
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL)
外部の SMTP サーバーを利用したメール送信
SMTP サーバーを利用する WordPress プラグインで SendGrid などを利用
SendGrid - https://wordpress.org/plugins/sendgrid-email-delivery-simplified/
メディア ファイルへのアクセス
メディア ファイルの保存先に Azure Blob Storage を利用する WordPress プラグイン
Microsoft Azure Storage for WordPress - https://wordpress.org/plugins/windows-azure-storage/
メディア ファイルへのアクセスに CDN を利用するためのプラグインを利用
メディアファイルの変更時に、CDN にキャッシュされたファイルをリフレッシュする

Weitere ähnliche Inhalte

Mehr von Kuniteru Asami

クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-
クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-
クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-Kuniteru Asami
 
OSS/linux on Azureの活用方法と勘所
OSS/linux on Azureの活用方法と勘所OSS/linux on Azureの活用方法と勘所
OSS/linux on Azureの活用方法と勘所Kuniteru Asami
 
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターンKuniteru Asami
 
CDP 勉強会 - Multiple Datacenter Deployment ガイダンス
CDP 勉強会 - Multiple Datacenter Deployment ガイダンスCDP 勉強会 - Multiple Datacenter Deployment ガイダンス
CDP 勉強会 - Multiple Datacenter Deployment ガイダンスKuniteru Asami
 
クラウド案件の作り方 for azureしなの4周年
クラウド案件の作り方 for azureしなの4周年クラウド案件の作り方 for azureしなの4周年
クラウド案件の作り方 for azureしなの4周年Kuniteru Asami
 
SMTPサービス SendGridを契約する
SMTPサービス SendGridを契約するSMTPサービス SendGridを契約する
SMTPサービス SendGridを契約するKuniteru Asami
 
インストールマニアックス振り返り
インストールマニアックス振り返りインストールマニアックス振り返り
インストールマニアックス振り返りKuniteru Asami
 
第2回JAZUG総会 LT インストールマニアックス・ファイナル
第2回JAZUG総会 LT インストールマニアックス・ファイナル第2回JAZUG総会 LT インストールマニアックス・ファイナル
第2回JAZUG総会 LT インストールマニアックス・ファイナルKuniteru Asami
 

Mehr von Kuniteru Asami (10)

クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-
クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-
クラウド時代のWordPressプラットフォーム -WordCamp Tokyo 2016-
 
OSS/linux on Azureの活用方法と勘所
OSS/linux on Azureの活用方法と勘所OSS/linux on Azureの活用方法と勘所
OSS/linux on Azureの活用方法と勘所
 
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
 
CDP 勉強会 - Multiple Datacenter Deployment ガイダンス
CDP 勉強会 - Multiple Datacenter Deployment ガイダンスCDP 勉強会 - Multiple Datacenter Deployment ガイダンス
CDP 勉強会 - Multiple Datacenter Deployment ガイダンス
 
クラウド案件の作り方 for azureしなの4周年
クラウド案件の作り方 for azureしなの4周年クラウド案件の作り方 for azureしなの4周年
クラウド案件の作り方 for azureしなの4周年
 
AzureでOracle
AzureでOracleAzureでOracle
AzureでOracle
 
SMTPサービス SendGridを契約する
SMTPサービス SendGridを契約するSMTPサービス SendGridを契約する
SMTPサービス SendGridを契約する
 
インストールマニアックス振り返り
インストールマニアックス振り返りインストールマニアックス振り返り
インストールマニアックス振り返り
 
PHP on Azure
PHP on AzurePHP on Azure
PHP on Azure
 
第2回JAZUG総会 LT インストールマニアックス・ファイナル
第2回JAZUG総会 LT インストールマニアックス・ファイナル第2回JAZUG総会 LT インストールマニアックス・ファイナル
第2回JAZUG総会 LT インストールマニアックス・ファイナル
 

Kürzlich hochgeladen

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Kürzlich hochgeladen (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

堅牢&運用楽々な WordPress を Azure App Service で

  • 1. 堅牢 & 運用楽々 な WordPress を Azure App Service で 株式会社 pnop / Cloudlive 株式会社 浅見 城輝 2020/03/13 @JAZUG TOHOKU
  • 2. © 2020 pnop © 2011 Microsoft Corporation All Rights Reserved. About me kuniteru.asami Find me Database Azure 2012~ Microsoft Azure
  • 3. © 2020 pnop はじめに Azure App Service の WordPress の構築については、 App Service(リリース当初は Web Apps)の登場と共に 何度も紹介されています。 しかしながら、App Service は日々進化しているため、最新の機能 (Preview を含む)なども取り入れ、今 Azure App Service に WordPress を作るならというお話しをさせていただきます。 ※ 2020/03/13 時点の情報がベースとなります ※ Preview 機能も紹介していますが、Preview であることは 明記していません
  • 4. © 2020 pnop WordPress のよくある課題 応答速度の向上 セキュリティ 可用性の向上
  • 5. © 2020 pnop 応答速度を向上したい よくある WordPress の高速化手法 Azure App Service での課題
  • 6. © 2020 pnop WordPress の Plugin と Azure の機能を組み合わせて高速化する Azure Cache for Redis に Object Cache を持つことで DB へのア クセスを軽減 • Redis Object Cache Plugin CDNを利用し (Azure CDN or Azure Front Door) グローバルに分散したコンテン ツ キャッシュを持つ よくある WordPress の高速化手法と Azure での対応 ページをキャッシュする • WP Super Cache など 最新バージョンの PHP の利用 • App Service では最新への バージョンアップが容易 • リビジョンレベルは 自動アップデート WordPress Plugin の活用 App Service のスペックを上げる • Premium (max): CPU 4 core, RAM 14 GB, SSD • Isolated (max): CPU 8 core, RAM 32 GB, SSD App Service のインスタンスを 増やし、アクセスを分散する • 負荷状況に応じて自動で 増減することでコストを 抑制 App Service の性能向上 Azure DB for MySQL/MariaDB の スペックを上げる • (max) CPU 64 core, RAM 320 GB データベースの読取レプリカで、 データベースへのアクセスを 分散する • HyperDB Plugin DB の 性能向上 外部 キャッシュ の利用 PHP ランタイム の高速化 PHP アクセラレーターの利用 コードを圧縮し 通信データ量を減らす • Autoptimize など
  • 7. © 2020 pnop Azure App Service での課題 Azure App Service では、 一般に WordPress をインストールする領域のストレージが遅め 速度が遅い領域での I/O を減らすために、データの永続化および App Service インスタンス間で の共有が必要なディレクトリにのみ、Azure Files をマウントする(一部のデプロイ方法) Premium File Storage をマウントしてそこにアプリケーションを展開(App Service for Container) ← デフォルトでは home 以下が Azure Files をマウントした共有ストレージ ← wwwroot が Web サイトのドキュメント ルート / (D:¥) home site wwwroot index.php wp_content ← メディア や テーマ、プラグインのファイルが配置される(要永続化)
  • 8. © 2020 pnop セキュリティ 最新バージョンへの更新 Web Application Firewall 管理サイトの認証
  • 9. © 2020 pnop 最新バージョンへの更新 古い WordPress で運用を続けたために、既知のセキュリティ ホールをつかれ、 コンテンツを改竄されるなどのインシデントが頻繁に発生している WordPress の更新 WordPress の機能としての自動更新 WordPress アプリケーションのファイル全てを永続化領域(Azure Files)に 保存している場合に限り利用できる wp_content だけを永続化領域に保存しているなどの場合、自動更新後のスケール アウトや障害による インスタンスの再起動により、永続化領域以外のファイルがデプロイ直後のものに戻ってしまう Official Docker Image を利用し、Continuous Deploy を有効にすれば、自動更新される OS や httpd、PHP などの更新 基本的には Azure が自動で最新に更新してくれる ただし App Service for Container の場合は、その Container Image に依存する Continuous Deploy を有効にしている場合は、Image が更新されれば App Service も更新される
  • 10. © 2020 pnop Web Application Firewall WordPress を対象とした攻撃は日々大量に来る WAF を通して App Service にアクセスさせることで安全性を高める Azure Application Gateway Azure Front Door Virtual Machines (VMSS) に セットアップした 3rd-Party の WAF 製品 3rd-Party が提供している Azure 外の WAF サービス ※ 実は App Service 内にも WAF の機能は持っているが、ほとんど情報もなく、利用事例は極端に少ない
  • 11. © 2020 pnop WordPress の管理サイトへのログインを試みる攻撃も多い WordPressが独自に実装する認証だけではなく、 App Service の Easy Auth 機能あるいは WordPress の Plugin により 外部 IdP が提供する安全な認証を適用することができる とても簡単な設定だけで、リスクの低い認証を実現できる MFA、アクセス元 IP 制限、ログイン監査 など Easy Auth が対応する認証プロバイダー 管理サイトの認証 Azure Active Directory Microsoft Account Facebook Google Azure AD B2C に対応する IdP Twitter And more…
  • 12. © 2020 pnop App Service や Azure DB for MySQL は通常、VNet には所属していない。 そのためそれらの間は通常はグローバル ネットワークでの通信となる が、リージョン VNet 統合と PaaS への VNet サービス エンドポイントか Private Link を組み合わせることで、通信経路を制限することができる。 App Service から Azure DB for MySQL への通信 (リージョン)VNet 統合 + Private Link VNet グローバルネット (IP 制限) リージョン VNet 統合 + サービス エンドポイント VNet My App Service 11.11.11.11 22.22.22.22
  • 14. © 2020 pnop App Service の可用性 App Service は インスタンスを複数にすると可用性が上がる App Service Plan Load Balancer Azure DB fro MySQL Instance #1 Instance #2 Azure Files
  • 15. © 2020 pnop データベースの高い可用性とレプリケーション Azure DB for MySQL/MariaDBでは、標準で高可用性構成がとられる ディザスタ リカバリあるいは読取分散による高速化のために、 同構成の読取専用レプリカを作ることも可能 Standard 可用性モデル Gateway Ring Primary Database Engine spare mount Data files Log files failover Page Blob (Premium) spare Client ※ Premium 可用性モデルでは、読取専用として Secondary にアクセスすることも可能
  • 17. © 2020 pnop 構成案 コンテンツ 管理者 読取レプリカ レプリケーション /wp-admin への アクセスはフィルタ アクセス制限 コンテンツ管理者 /wp-admin への アクセスはフィルタ コンテンツ管理用 WordPress /wp-contents Azure AD 認証 プライマリ mount mount アクセス制限 CDN WAF CDN WAF Azure Front Door Azure AD App Service Azure Storage Azure DB for MySQL Azure AD 認証
  • 18. © 2020 pnop App Service に対するアプリケーションのデプロイ方法 ZIP / WAR file Bitbucket DropBox GitHubローカル Git OneDrive Azure Repos Docker FTP(S) Azure Marketplace
  • 19. © 2020 pnop Azure Marketplace で提供されている WordPress
  • 20. © 2020 pnop Azure Marketplace で提供されている WordPress https://github.com/azureappserviceoss/wordpress-azure https://hub.docker.com/r/appsvcorg/wordpress-alpine-php:0.72
  • 21. © 2020 pnop お薦めの WordPress デプロイ先とデプロイ方法 App Service for Container に対し Docker Hub の WordPress Docker Official Image Docker Compose で Continuous Deploy
  • 22. © 2020 pnop Docker Compose – App Service for Linux docker-compose.yml ファイルの例 version: '3.5' services: wordpress: image: wordpress ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST} WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME} WORDPRESS_DB_USER: ${WORDPRESS_DB_USER} WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD} # WORDPRESS_TABLE_PREFIX: # WORDPRESS_AUTH_KEY: # WORDPRESS_SECURE_AUTH_KEY: # WORDPRESS_LOGGED_IN_KEY: # WORDPRESS_NONCE_KEY: # WORDPRESS_AUTH_SALT: # WORDPRESS_SECURE_AUTH_SALT: # WORDPRESS_LOGGED_IN_SALT: # WORDPRESS_NONCE_SALT: # WORDPRESS_DEBUG: WORDPRESS_CONFIG_EXTRA: | define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL); volumes: - "${WEBAPP_STORAGE_HOME}/site/wwwroot/wp- content:/var/www/html/wp-content"
  • 23. © 2020 pnop Docker Compose – App Service for Linux 接続先 MySQL 情報や /home 以下の永続化設定 App Service のアプリケーション設定として以下を追加/変更する WEBSITES_ENABLE_APP_SERVICE_STORAGE(変更) false → true に変更 WORDPRESS_DB_HOST(追加) MySQL ホスト名 WORDPRESS_DB_NAME(追加) MySQL データベース名 WORDPRESS_DB_USER(追加) MySQL ログインユーザー名 WORDPRESS_DB_PASSWORD(追加) MySQL ログインパスワード
  • 25. © 2020 pnop WordPress on Azure App Service Tips Azure Database for MySQL / MariaDB と SSL 通信するために wp-config.php に以下を追加 define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL) 外部の SMTP サーバーを利用したメール送信 SMTP サーバーを利用する WordPress プラグインで SendGrid などを利用 SendGrid - https://wordpress.org/plugins/sendgrid-email-delivery-simplified/ メディア ファイルへのアクセス メディア ファイルの保存先に Azure Blob Storage を利用する WordPress プラグイン Microsoft Azure Storage for WordPress - https://wordpress.org/plugins/windows-azure-storage/ メディア ファイルへのアクセスに CDN を利用するためのプラグインを利用 メディアファイルの変更時に、CDN にキャッシュされたファイルをリフレッシュする