AWS EC2 + Bitnami で始める WordPress

AWS EC2 + Bitnami で始める WordPress

2019-08-1511 min read

目次

  1. bitnami-wordpressを使うメリット
  2. bitnami-amiについて
  3. bitnami-wordpressの構成と設定
  4. apacheの設定を読み解く
  5. bnconfigコマンド
  6. bncert-tool-によるssl証明書の取得とhttps化
  7. ctlscriptshで各種サービスの管理

bitnamiはWebアプリケーションや開発ツールのインストラーやソフトウェアパッケージのライブラリです。 提供するスタックにはWordPress、Drupal、Joomla、Redmine、AbanteCart、PrestaShop、Magento、MediaWikiなどがあります。 ここではAWS EC2 のマーケットプレイスで公開されている Bitnami WordPress の AMI で WordPressサイトを構築するまでの方法と各種ツール・設定ファイルについて紹介します。

なおこの記事は、2019/08/15時点での情報です。

Bitnami WordPressを使うメリット

個人的に感じた3つのメリット

これまで、自前で構築した環境 + WordPress→ Amazon Lightsail + Bitnami WordPress → AWS EC2 + Bitnami WordPressという形でWordPress環境を利用してきました。

パッと思いつくBitnamiの良い点は次の3つであると思います。

  1. 安い (無料!)
  2. 設定が簡単 & 拡張しやすい
  3. 便利設定ツールが用意されている
1の料金についてですが、AWSのBitnami AMIは0$で提供されています。よく比較されているAmimoto AMIは利用時間当たりの若干の課金を払わなければなりません。

2の「設定が簡単 & 拡張しやすい」は、ディレクトリ構成やApacheの設定が拡張しやすいような構成になっていたため、1つのインスタンスで複数サイトを動かす際にも環境を用意しやすいと感じました。

3つめの「便利設定ツールが用意されている」については、記事の後半でも詳しく触れますが、SSLの設定やApache、MySQLの管理をBitnamiで用意されているコマンドを用いて簡単に管理することができます。

つまり、自らモジュールを導入したり設定する際の負荷を低くすることができます。

Amimoto AMI と比較して

Amimoto AMIを利用したことがないので、なんとも言えませんが Bitnami と Amimoto AMIと比較して Bitnami の方がパフォーマンス的に劣るというデータがあります。

比較方法は負荷テスト時のパフォーマンスでありデータを見るとが Amimoto が負荷分散に強い Nginx で Bitnami で Apache を利用していることもあり妥当な比較方法だとは思えません。

(Bitnami は Nginx版の WordPress AMI も用意している。)

https://support.amimoto-ami.com/en/articles/934104-amimoto-ami-%E3%81%A8-bitnami-%E3%81%AE%E6%AF%94%E8%BC%83

また、環境がAWSということもあり CloudFront やS3を組み合わせることでレスポンスの向上や負荷分散は十分に行えると思います。

Bitnami AMIについて

AMIの選択画面でWordPressを検索した時の状態

「WordPress」で検索し、AWS Marketplaceで絞り込むとBitnami WordPress の AMI が出てきます。

ここで一番上にある「WordPress Certified by Bitnami and Automattic」を選択してインスタンスを起動します。その他、セキュリティグループやEBS、ネットワーク関連の設定は任意とします。

Bitnami WordPressの構成と設定

WordPress Certified by Bitnami and Automattic のAMI を例に構成と設定を紹介します。

サーバの構成

AMIで設定されていた各種アプリケーションのバージョンは次のようになっています。

  • Ubutnu 16.04
  • Apache 2.4
  • PHP 7.3.6
  • MySQL 8.0.16

各種設定

次に各種設定状況やディレクトリ構成について説明します。

MySQL

このテーブルはデフォルトの状態でWordPressが利用しているテーブルです。

  • ユーザ: bn_wordpress
  • ホスト: localhost
  • テーブル: bitnami_wordpress
  • パスワード: /home/bitnami/apps/wordpress/htdocs/wp-config.php の DB_PASSWORD に定義
  • 文字コード: UTF-8

WordPress

  • 初期ユーザ: user
  • 初期パスワード: /home/bitnami/bitnami_credentials に記載

Apache

ルートの設定ファイルが各種アプリケーションの設定を読み込むような配置となっています。

このApacheの設定がなかなか複雑なため次の章で詳細に見ていきます。

  • ルート
    • 設定ファイル: /opt/bitnami/apache2/conf/*.conf
  • WordPress
    • ドキュメントルート: /opt/bitnami/apps/wordpress/htdocs
    • 設定ファイル: /opt/bitnami/apps/wordpress/conf/*.conf
  • phpMyAdmin
    • ドキュメントルート: /opt/bitnami/apps/phpmyadmin/htdocs
    • 設定ファイル: /opt/bitnami/apps/wordpress/conf/*.conf

Linux

デフォルトの作業ユーザは「bitnami」となっています。また、bitnamiのホームディレクトリ以下に各種設定ファイルが配置されていたり、ドキュメントルートが設定されています。

  • ユーザ: bitnami
  • ホームディレクトリ: /home/bitnami
ホームディレクトリ以下は次のようになっています。

bitnami_credentials以外はエイリアスとなっています。

appsはドキュメントルートやアプリケーションの設定ファイルが置いてあるディレクトリへのエイリアス、

bitnami_credentialsはWordPressの初期ユーザの情報、

htdocsはデフォルトのドキュメントルート、

となっています。

/home/bitnami/
├── apps -> /opt/bitnami/apps
├── bitnami_credentials
├── htdocs -> /opt/bitnami/apache2/htdocs
└── stack -> /opt/bitnami

Apacheの設定を読み解く

$ ls -la /opt/bitnami/apache2
total 8352
drwxr-xr-x 14 root    root    4096 Jun 21 06:41 .
drwxr-xr-x 18 root    root    4096 Jun 21 06:53 ..
drwxr-xr-x  2 root    root    4096 Jun 21 06:38 bin
-r-xr--r--  1 root    root 8493630 Jun 19 15:51 bnconfig
drwxr-xr-x  2 root    root    4096 Jun 21 06:38 build
drwxr-xr-x  2 root    root    4096 Jun 21 06:41 cgi-bin
drwxr-xr-x  5 bitnami root    4096 Aug 15 09:15 conf
drwxr-xr-x  3 root    root    4096 Jun 21 06:38 error
drwxr-xr-x  3 bitnami root    4096 Jun 21 06:38 htdocs
drwxr-xr-x  3 root    root    4096 Jun 21 06:38 icons
drwxr-xr-x  2 root    root    4096 Jun 21 06:38 include
drwxr-xr-x  3 root    root    4096 Aug 13 03:04 logs
drwxr-xr-x  2 root    root    4096 Jun 21 06:38 modules
drwxr-xr-x  2 root    root    4096 Jun 21 06:38 scripts
drwxr-xr-x  3 root    root    4096 Jun 21 06:38 var

WordPressを動かすapacheは/opt/bitnami/apache2にインストールされています。

Apacheの基本設定ファイル

bitnamiアプリケーション全体で利用される設定ファイルは/opt/bitnami/apache2/conf以下に置かれています。

/opt/bitnami/apache2/conf
├── bitnami
│   ├── bitnami-apps-prefix.conf
│   ├── bitnami-apps-vhosts.conf
│   ├── bitnami.conf
│   ├── httpd-2xlarge.conf
│   ├── httpd.conf -> /opt/bitnami/apache2/conf/bitnami/httpd-micro.conf
│   ├── httpd-large.conf
│   ├── httpd-medium.conf
│   ├── httpd-micro.conf
│   ├── httpd-small.conf
│   └── httpd-xlarge.conf
├── deflate.conf
├── extra
│   ├── httpd-autoindex.conf
│   ├── httpd-dav.conf
│   ├── httpd-default.conf
│   ├── httpd-info.conf
│   ├── httpd-languages.conf
│   ├── httpd-manual.conf
│   ├── httpd-mpm.conf
│   ├── httpd-multilang-errordoc.conf
│   ├── httpd-ssl.conf
│   ├── httpd-userdir.conf
│   ├── httpd-vhosts.conf
│   └── proxy-html.conf
├── httpd.conf
├── magic
├── mime.types
├── modsecurity.conf
├── original
│   ├── extra
│   │   ├── httpd-autoindex.conf
│   │   ├── httpd-dav.conf
│   │   ├── httpd-default.conf
│   │   ├── httpd-info.conf
│   │   ├── httpd-languages.conf
│   │   ├── httpd-manual.conf
│   │   ├── httpd-mpm.conf
│   │   ├── httpd-multilang-errordoc.conf
│   │   ├── httpd-ssl.conf
│   │   ├── httpd-userdir.conf
│   │   ├── httpd-vhosts.conf
│   │   └── proxy-html.conf
│   └── httpd.conf
├── pagespeed.conf
├── pagespeed_libraries.conf
├── php-fpm-apache.conf
├── privkey.pem
├── server.crt
├── server.csr
├── server.key
├── ssi.conf
├── example.com.crt -> /opt/bitnami/letsencrypt/certificates/example.com.crt
└── example.com.key -> /opt/bitnami/letsencrypt/certificates/example.com.key

アプリケーションごとの設定ファイル

/opt/bitnami/apps/wordpress/conf
├── banner.conf
├── certs
├── htaccess.conf
├── httpd-app.conf # デフォルトで読み込まれる
├── httpd-prefix.conf
├── httpd-vhosts.conf # デフォルトで読み込まれていない
└── php-fpm
    ├── php-settings.conf
    └── pool.conf

VirtualHostを使って管理したい場合は、「httpd-vhosts.conf」に設定を記述して読み込むようにします。

(例えば、サイトと管理画面のURLを変えたい場合やSSLか非SSLで制御を変えたい場合など)

bnconfigコマンド

bnconfigコマンドを使うことでアプリケーションの様々な設定を変更することができます。

所有者がrootなのでsudoで実行する必要があります。

コマンド例では

sudo /home/bitnami/apps/wordpress/bnconfig

と書いてありますが wordpress の部分は任意のアプリケーション名に変えます。

Helpをみる

sudo /home/bitnami/apps/wordpress/bnconfig --help

Bitnamiロゴを消す

次のコマンドを実行することでBitnamiのロゴを消します。

sudo /opt/bitnami/apps/wordpress/bnconfig –disable_banner 1

アプリケーションのホスト名を設定する

sudo /opt/bitnami/apps/wordpress/bnconfig --machine_hostname 0.0.0.0

URL prefixを設定する

sudo /home/bitnami/apps/wordpress/bnconfig --appurl /

デフォルト言語の設定

sudo /home/bitnami/apps/wordpress/bnconfig --installer-language ja

bncert-tool によるSSL証明書の取得とHTTPS化

bncert-toolはLet's Encryptによる証明書の取得を行い、自動で設定するためのツールです。

またhttpからhttpsへのリダイレクトのルールなどを編集することもできます。

ツール呼び出しは次のコマンドで実行します。

sudo /opt/bitnami/bncert-tool

次のように聞かれるのでSSL化対象のURLを入力します。

複数入力する場合はスペースでつなぎます。

----------------------------------------------------------------------------
Welcome to the Bitnami HTTPS Configuration tool.

----------------------------------------------------------------------------
Domains

Please provide a valid space-separated list of domains for which you wish to 
configure your web server.

The web server name will be configured as the first provided domain name.

If you provide a non-www domain (e.g. example.com) but not its www subdomain 
(e.g. www.example.com), it will be added automatically, and viceversa.

Domain list []: test-exmaple.com   # ← SSL化するURL(複数可)を記述する

ドメインを入力すると自動的にhttpsへのリダイレクトのルールなども作られます。

「Do you agree to these changes?」に対して 「Y」 を入力すると表示されているルール通りにapacheの設定ファイルが書き換えられます。

「n」を入力すると自分でルールを編集できます。

----------------------------------------------------------------------------
Changes to perform

The following changes will be performed to your Bitnami installation:

1. Stop web server
2. Configure web server to use an existing Let's Encrypt certificate and renew: 
/opt/bitnami/letsencrypt/certificates/test-example.com.crt
3. Disable existing Let's Encrypt cron jobs configured with the tool
4. Configure a cron job to automatically renew the certificates each month
5. Configure web server name to: test-example.com
6. Enable HTTP to HTTPS redirection (example: redirect 
http://test-example.com to https://test-example.com)
7. Enable non-www to www redirection (example: redirect test-example.com 
to www.test-example.com)
8. Start web server once all changes have been performed

You can modify the list of changes to perform if you select 'No'

Do you agree to these changes? [Y/n]: n

nを選択した場合、次の質問を聞かれます。

----------------------------------------------------------------------------
Additional configuration

Please select the list of changes you wish to perform on your Bitnami 
installation.

Enable HTTP to HTTPS redirection [Y/n]: Y

Enable non-www to www redirection [Y/n]: n

Enable www to non-www redirection [y/N]: y

「Enable HTTP to HTTPS redirection」: httpsのリダイレクトを行う場合は Y そうでなければ n を入力します。

「Enable non-www to www redirection」: example.com から www.example.com へのリダイレクトです。

「Enable www to non-www redirection」: www.example.com から example.com へのリダイレクトです。「Enable non-www to www redirectionを有効にしている場合は「N」を選択しなければなりません。

----------------------------------------------------------------------------
Create a free HTTPS certificate with Let's Encrypt

Please provide a valid e-mail address for which to associate your Let's Encrypt 
certificate.

Domain list: test-example.com www.test-example.com

Server name: test-example.com

E-mail address []: example@gmail.com

The Let's Encrypt Subscriber Agreement can be found at:

https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

Do you agree to the Let's Encrypt Subscriber Agreement? [Y/n]: Y

最後にメールアドレスを入力します。エラーがなければ無事にcrtファイルとkeyファイルが/opt/bitnami/letsencrypt/certificates/に生成されます。

エラーがあった場合でも割と丁寧なメッセージでエラー原因を教えてくれました。

ctlscript.shで各種サービスの管理

サービスに必要な各種アプリケーションは/opt/bitnami/ctlscript.shで管理します。

Apacheを起動・停止・再起動

次のコマンドでApacheを管理します。

各種設定を変更した後はapacheの再起動を行わないと設定が反映されない場合が多いです。

# 起動
sudo /opt/bitnami/ctlscript.sh start apache

# 停止
sudo /opt/bitnami/ctlscript.sh stop apache

# 再起動
sudo /opt/bitnami/ctlscript.sh restart apache

# ステータス確認
sudo /opt/bitnami/ctlscript.sh status apache
## apache already running</span>

mysql や php-fpm についても同様に ctlscript.sh で管理します。

sudo /opt/bitnami/ctlscript.sh restart php-fpm
sudo /opt/bitnami/ctlscript.sh restart mysql</span>

http://designhack.slashlab.net/how-to-setup-multiple-wordpress-without-multisite-with-bitnami/

https://docs.bitnami.com/installer/how-to/understand-bncert/

https://docs.bitnami.com/aws/apps/trac/administration/generate-configure-certificate-letsencrypt/

Recommends
AWS EC2 + Bitnami で始める WordPress
2019-08-15
amazon%20aws
wordpress
ubuntu
Ubuntu18.04にApache MariaDB PHP7.2 をセットアップ
2019-07-29
amazon%20aws
php
linux
AWS Lightsail + bitnami に自作アプリケーションを作って共存させる ...
2018-08-18
amazon%20lightsail
php
apache
AWS System Manager(SSM)でEC2にSSHを実行! ポート解放なし
2019-08-14
amazon%20aws
linux
ubuntu
PHP-FPM(php7.4) Apache2.4 on Ubutnu20.04 Webサ...
2021-01-19
php
apache
ubuntu
WordPressやめます Gatsbyに移行しました
2020-05-11
wordpress
blog
gatsby
WordPressを静的サイトに変換するプラグインの紹介。WP2Static
2019-12-07
wordpress
cms
amazon%20s3
WordPressをAmazon S3 + CloudFront構成で月額200円で運用
2019-12-04
amazon%20aws
wordpress
cms
SAA試験対策 AWS BlackBeltを写経する
2019-09-29
amazon%20aws
amazon%20ec2
amazon%20s3
AWS BlackBeltを写経する EC2編
2019-12-21
amazon%20aws
amazon%20ec2
amazon%20s3
フランスからWordPressに悪意のあるリクエストが大量に届くので解析
2018-08-17
amazon%20aws
amazon%20lightsail
apache
WordPress開設で、自分のサーバを持ちたいけど手間はかけたくないとき【AWS Lig...
2018-07-29
amazon%20aws
amazon%20lightsail
wordpress
【WordPress】ソースコードから編集してhttps対応URLに変更
2018-02-10
amazon%20aws
amazon%20lightsail
wordpress
【WordPress】Amazon LightsailとCertbotでHTTPS化に挑戦...
2018-02-03
amazon%20aws
amazon%20lightsail
wordpress
[AWS]Lambda vs Fargate. APIを実装する場合に思うこと
2022-07-30
amazon%20aws
amazon%20ecs
%E9%9B%91%E8%AB%87
New Posts
[JS]Intl.DateTimeFormatで和暦と西暦を変換
2022-08-18
javascript
[NestJS]少し大きな規模のRESTfull APIを構築するディレクトリ構成を考えて...
2022-09-04
nestjs
typescript
%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3
Prisma MySQL でUTC以外の任意のタイムゾーンを利用するのが難しい件
2022-08-08
prisma
typescript
mysql
Prisma TypeScript MySQLなプロジェクトの構築
2022-08-08
prisma
typescript
mysql
Prisma TypeScript SQLiteなプロジェクトの構築
2022-08-06
prisma
typescript
sqlite
[AWS]Lambda vs Fargate. APIを実装する場合に思うこと
2022-07-30
amazon%20aws
amazon%20ecs
%E9%9B%91%E8%AB%87
macOSにzigをインストールしてHello World!する
2022-07-18
zig
mac
[AWS CDK] Cognito の OIDC プロバイダに Auth0 を設定
2022-07-03
auth0
amazon%20aws
aws%20cdk
Amazon S3 でライフサイクルポリシーを設定する
2022-06-19
amazon%20aws
amazon%20s3
AWS Certified Developer Associate に合格した
2022-06-19
amazon%20aws
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93
Fisher-Yates shuffleで配列シャッフル [js/ts/php]
2022-06-19
javascript
node.js
typescript
JavaScriptでUTF-16コードを文字列に変換
2022-06-18
javascript
node.js
[JS]乱数でランダムな整数を生成する
2022-06-18
javascript
node.js
[JS]BigIntでMathが使えない件
2022-06-12
javascript
node.js
atcoder
AWS SAPに合格しました
2022-06-11
amazon%20aws
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93
Hot posts!
Proxy環境下でcurlを実行する
2019-12-07
linux
curl
OpenCVのMatのタイプ一覧表
2018-11-25
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86
opencv
Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
2019-12-21
linux
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
mysql
TablePlusを使ってみる。シンプルでモダンなSQLクライアントツール
2018-09-30
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
DBクライアントツールはDBeaverをおすすめしたい
2021-03-08
oracle
mysql
sqlite
AWS S3のアクセスキーIDとシークレットアクセスキーの取得 作業用ユーザを作成
2019-06-12
amazon%20aws
linux
amazon%20s3
AtCoderで初めて色がつくまでの話(茶色) レートが中々上がらなかった原因
2018-11-25
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
%E9%9B%91%E8%AB%87
CentOS8でEPELとPowerToolsリポジトリの有効化
2020-11-30
centos
red%20hat
EPEL
Macでターミナルからポートスキャンを行う方法。
2018-12-09
linux
mac
apple
Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
2018-11-27
python
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86
opencv
Date
▶︎
2022 年 (39)
▶︎
2021 年 (40)
▶︎
2020 年 (30)
▶︎
2019 年 (90)
▶︎
2018 年 (89)
▶︎
2017 年 (1)
Tags
javascript(98)
amazon%20aws(47)
linux(47)
node.js(38)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
typescript(28)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mysql(19)
mac(19)
canvas(18)
opencv(17)
%E9%9B%91%E8%AB%87(16)
wordpress(15)
atcoder(14)
docker(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
amazon%20lightsail(7)
react(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
next.js(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
curl(4)
webassembly(4)
ssh(4)
Author
s-yoshiki
s-yoshiki
githubzenntwitterqiita
ただの備忘録です。
JavaScript/TypeScript/node.js/React/AWS/OpenCV
※このブログの内容は個人の見解であり、所属する組織等の見解ではありません。