目次
Bitnamiとは?
BitnamiはWordPressやRedmineなどのウェブアプリケーションをPHPやMySQLなどのミドルウェアとともに一式設定済みでパッケージ化して提供してくれるソリューション。例えばAWSのEC2でWordPressを搭載したインスタンスを作るとき、一式インストール済みのインスタンスを選択することができるが、これを提供しているのがBitnamiである。
自前でPHP+Apache+MySQL+CMS(WordPress)をインストールするのとBitnamiはディレクトリ構成や設定ファイルが異なる。
一般的には1インスタンス1パッケージの形で提供されたものを使うことになり、あまりそのあたりを気にせずに使える。ただし1インスタンスに複数のパッケージを同居させるなど拡張して使う場合などには中身を触ることになり、仕組みを知っておく必要がある。
- 同じインスタンスにWordPress(記事コンテンツ)とMyBB(掲示板)を同居
- 複数のWordPressを同じインスタンスのバーチャルホストで並行運用
などのケースである。
パッケージごとのURLの識別の考え方
1インスタンスに複数のパッケージをインストールする場合、それぞれのパッケージのURLを
- サブディレクトリで識別する
- バーチャルホストで識別する
いずれかの方法を選択する。前者をprefix、後者をvhostsでの識別という。これらを組み合わせて「WordPressとRedmineは同じドメイン、MediaWikiは別ドメイン」という構成も可能である。
ディレクトリ構成
CMSやミドルウェア一式がインストールされているディレクトリは
/opt/bitnami
個別のアプリは
/opt/bitnami/apps
配下にあり、アプリ別の設定もここで行う。
/opt/bitnami/apache2
がApacheのファイル一式で、バイナリやログが格納されている。Apacheの設定もここで行う(アプリ固有の設定はapps配下の設定をインクルードする)。
基本的な使い方
WordPressのインスタンスを使う場合
起動スクリプト
パッケージの更新とタイムゾーンの設定は起動スクリプトで自動実行
apt update
DEBIAN_FRONTEND=noninteractive apt upgrade -y -o Dpkg::Options::="--force-confnew"
timedatectl set-timezone Asia/Tokyo
ログイン
OSのログインは各クラウドのルール通り(公開鍵)。
WordPressやMySQLなどミドルウェアのパスワードはBitnamiが生成したもので、
/home/bitnami/bitnami_application_password
に格納されている。
デフォルトでWordPressで作られたサイトのURLは
http://ホスト名/wordpress/
になる。
WordPressの設定
WordPressユーザのデータベースやユーザの設定は完了済み。
デフォルトでページの右下にBitnamiのロゴが表示されるが、それを削除する。
sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1
これ以外に--installer-language
や--machine_hostname
などのオプションもあるが、指定しても意味がなかった。
管理画面の設定
ログインパスワードを取得
cat bitnami_application_password
W3 Total Cacheを使う場合は設定時のみ権限を変更する必要がある
sudo chmod 664 /opt/bitnami/apps/wordpress/htdocs/wp-config.php
<管理画面で設定>
http://ホスト名/wordpress/wp-admin/
設定後
sudo chmod 644 /opt/bitnami/apps/wordpress/htdocs/wp-config.php
Apacheなどミドルウェアの起動
OSのsystemctlではなくBitnami付属のctlscript.sh
を使ってサービスの起動コントロールをする。
sudo /opt/bitnami/ctlscript.sh start apache
sudo /opt/bitnami/ctlscript.sh stop mysql
複数のWordPressや他のWebアプリケーションをインストールする
WordPressインストール済みのインスタンスで追加のWordPressをインストールする。BitnamiではWordPressのMultiSite版をインストールすることもできるが、構成が複雑になってしまうので分けたい場合はこの方法がいい。またWordPressに限らずRedmineやTracなどほかのウェブアプリケーションを追加インストールする場合も同様の手順でできる。
なお複数のパッケージをインストールする場合、デフォルトでそれらはURLのサブディレクトリで識別する(ドメインでの識別をする場合は別設定が必要)。
インストーラの取得
以下からBitnami用のWordPressのインストーラを取得して実行権限を付ける
https://bitnami.com/stack/lamp/modules
curl -LO https://bitnami.com/redirect/to/772973/bitnami-wordpress-5.2.4-1-module-linux-x64-installer.run
chmod a+x bitnami-wordpress-5.2.4-1-module-linux-x64-installer.run
パッケージのインストールだけでなくApacheやデータベースの設定も同時に行ってくれる。
WordPressのインストール
2基目のインストール
--wordpress_instance_name
でアプリ名を指定する。インストール済みのWordPressでwordpress
をいう名前が使われているので違う名前を指定する。アプリ名は英数字だけで、ハイフンやアンダーバーが含まれるとNG
sudo ./bitnami-wordpress-5.2.4-1-module-linux-x64-installer.run --wordpress_instance_name wordpress2
途中で質問されるBitnamiのディレクトリは
/opt/bitnami
これで
/opt/bitnami/app/wordpress2
以下にWordPressがインストールされる。WordPressサイトのURLは
http://ドメイン名/wordpress2/
になる。
2基目のWordPressのバナー削除設定
sudo /opt/bitnami/apps/wordpress2/bnconfig --disable_banner 1
あとは管理画面で設定を行う(W3 Total Cacheを使う場合はディレクトリの権限変更を忘れずに)
Apacheの設定
デフォルトでサイトのURLは
http://ホスト名/アプリ名/
になるが、これの場所を変更したりバーチャルホストに切り替えたりするにはApacheの設定が必要になる。
BitnamiにおけるApacheの設定ファイルの仕組みを説明する。
AWSのインスタンスタイプ別にパフォーマンスチューニングを変えている
/opt/bitnami/apache2/conf/bitnami/
にはインスタンスタイプ別の設定
httpd-2xlarge.conf
httpd-large.conf
httpd-medium.conf
httpd-micro.conf
httpd-small.conf
httpd-xlarge.conf
が格納されている。
この中のインスタンスのサイズに適した設定ファイルに対して
/opt/bitnami/apache2/conf/bitnami/httpd.conf
からシンボリックリンクが張られている。
URLとアプリ振り分け方法
Bitnamiではデフォルトでサブディレクトリ(prefix)でアプリケーション(wordpress, wordpress2)を振り分けている。
/opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf
では各アプリのサブディレクトリ振り分け用の設定をインクルードしている
Include "/opt/bitnami/apps/wordpress/conf/httpd-prefix.conf"
Include "/opt/bitnami/apps/phpmyadmin/conf/httpd-prefix.conf"
Include "/opt/bitnami/apps/wordpress2/conf/httpd-prefix.conf"
Include "/opt/bitnami/apps/redmine/conf/httpd-prefix.conf"
各アプリのサブディレクトリ振り分け用の設定は
/opt/bitnami/apps/アプリ名/conf/httpd-prefix.conf
アプリごとのURLのパス名を変更する場合はこのファイルで設定する。
バーチャルホストで振り分ける場合はprefix振り分け用のインクルード設定を削除し、代わりにvhost振り分け用のファイルをインクルードする設定にする。
/opt/bitnami/apache2/conf/bitnami/bitnami.conf
から
Include "/opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf"
をコメントアウトし、
/opt/bitnami/apache2/conf/bitnami/bitnami-apps-vhosts.conf
に
Include "/opt/bitnami/apps/wordpress/conf/httpd-vhosts.conf"
#Include "/opt/bitnami/apps/phpmyadmin/conf/httpd-vhosts.conf"
Include "/opt/bitnami/apps/wordpress2/conf/httpd-vhosts.conf"
Include "/opt/bitnami/apps/redmine/conf/httpd-vhosts.conf"
を追加する。アプリ別の設定は
/opt/bitnami/apps/アプリ名/conf/httpd-vhosts.conf
でvhostsごとに行う。まずはServerNameとAliasのみを書き換えればいい
/opt/bitnami/apps/アプリ名/conf/httpd-app.conf
サブディレクトリ用のリライトの設定をバーチャルホスト用に修正する。
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [S=1]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
RewriteEngine On
#RewriteBase /wordpress/
RewriteRule ^index\.php$ - [S=1]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
/opt/bitnami/apps/アプリ名/htdocs/wp-config.php
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/wordpress');
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/wordpress');
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/');
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST'] . '/');
httpをhttpsにするのも忘れずに。
SSL証明書の取得
BitnamiにもSSL証明書(Let’s Encrypt)を取得する機能が備わっているが、1インスタンス1アプリしか設定できない。
自前でcertbotをインストールしてコマンドラインで発行するのがいい。
前提条件
- example1.com / www.example1.comでオリジナルのwordpress
- example2.com / www.example2.comでwordpress2
- example3.1.22.333.444.nip.ioでredmine
を公開する場合
証明書の取得と設定手順
Apacheを停止
sudo /opt/bitnami/ctlscript.sh stop apache
証明書の取得
apt install -y certbot
sudo certbot certonly --standalone -d example1.com -d www.example1.com -m someone@example1.com --agree-tos
sudo certbot certonly --standalone -d example2.com -d www.example2.com -m someone@example2.com --agree-tos
sudo certbot certonly --standalone -d example.1.22.333.444.nip.io -m someone@example2.com --agree-tos
サーバにインストールされた証明書にアプリの設定ディレクトリから参照できるようにする
sudo ln -s /etc/letsencrypt/live/example1.com/privkey.pem /opt/bitnami/apps/wordpress/conf/certs/server.key
sudo ln -s /etc/letsencrypt/live/example1.com/fullchain.pem /opt/bitnami/apps/wordpress/conf/certs/server.crt
sudo ln -s /etc/letsencrypt/live/example2.com/privkey.pem /opt/bitnami/apps/wordpress2/conf/certs/server.key
sudo ln -s /etc/letsencrypt/live/example2.com/fullchain.pem /opt/bitnami/apps/wordpress2/conf/certs/server.crt
sudo ln -s /etc/letsencrypt/live/example3.1.22.333.444.nip.io/privkey.pem /opt/bitnami/apps/redmine/conf/certs/server.key
sudo ln -s /etc/letsencrypt/live/example3.1.22.333.444.nip.io/fullchain.pem /opt/bitnami/apps/redmine/conf/certs/server.crt
Apacheを起動
sudo /opt/bitnami/ctlscript.sh start apache
証明書の自動更新
更新時は
sudo /opt/bitnami/ctlscript.sh stop apache
sudo certbot certonly --standalone -d example1.com -d www.example1.com -m someone@example1.com --agree-tos
sudo certbot certonly --standalone -d example2.com -d www.example2.com -m someone@example2.com --agree-tos
sudo certbot certonly --standalone -d example.1.22.333.444.nip.io -m someone@example2.com --agree-tos
sudo /opt/bitnami/ctlscript.sh start apache
crontabに以下追記しておくと2か月に1回自動で更新される。
0 2 1 1-12 *
sudo sh -c '/opt/bitnami/ctlscript.sh stop apache && certbot certonly --standalone -d example1.com -d www.example1.com -m someone@example1.com --agree-tos && certbot certonly --standalone -d example2.com -d www.example2.com -m someone@example2.com --agree-tos && certbot certonly --standalone -d example.1.22.333.444.nip.io -m someone@example2.com --agree-tos && /opt/bitnami/ctlscript.sh start apache'
追加アプリ
にあるアプリ以外に自前で作ったwebアプリをBitnamiの形式に合わせて設置する(Bitnamiで一元管理)ことも可能。
Apache
すべてroot権限で
export APPNAME=whatismyapp
export DOMAINNAME=whatismyapp.net
mkdir -p /opt/bitnami/apps/${APPNAME}/{conf,htdocs}
chown -R bitnami:daemon /opt/bitnami/apps/${APPNAME}/htdocs/
chmod -R g+w /opt/bitnami/apps/${APPNAME}/htdocs/
cat << EOF > /opt/bitnami/apps/${APPNAME}/conf/httpd-app.conf
<Directory "/opt/bitnami/apps/${APPNAME}/htdocs">
Options +FollowSymLinks
AllowOverride None
<IfVersion < 2.3 >
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Directory>
EOF
以上がデフォルトのアプリ用Apache設定だが、AllowOverride
がNone
になっているのに気を付けよう。.htaccess
を使う場合はAll
にしておくといい(セキュリティの問題はあるので要件を確認したうえで)
ドキュメントルートは
/opt/bitnami/apps/${APPNAME}/htdocs/
サブディレクトリ振り分けを採用する場合
cat << EOF > /opt/bitnami/apps/${APPNAME}/conf/httpd-app.conf
Alias /${APPNAME}/ "/opt/bitnami/apps/${APPNAME}/htdocs/"
Alias /${APPNAME} "/opt/bitnami/apps/${APPNAME}/htdocs"
Include "/opt/bitnami/apps/${APPNAME}/conf/httpd-app.conf"
EOF
cat << EOF >> /opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf
Include "/opt/bitnami/apps/${APPNAME}/conf/httpd-prefix.conf"
EOF
バーチャルホスト振り分けを採用する場合
cat << EOF > /opt/bitnami/apps/${APPNAME}/conf/httpd-vhosts.conf
<VirtualHost *:80>
ServerName www.${DOMAINNAME}
ServerAlias ${DOMAINNAME}
DocumentRoot "/opt/bitnami/apps/${APPNAME}/htdocs"
RewriteEngine On
RewriteRule ^(.*)?$ https://www.${DOMAINNAME}$1 [R=301,L]
Include "/opt/bitnami/apps/${APPNAME}/conf/httpd-app.conf"
</VirtualHost>
<VirtualHost *:443>
ServerName www.${DOMAINNAME}
ServerAlias ${DOMAINNAME}
DocumentRoot "/opt/bitnami/apps/${APPNAME}/htdocs"
SSLEngine on
SSLCertificateFile "/opt/bitnami/apps/${APPNAME}/conf/certs/server.crt"
SSLCertificateKeyFile "/opt/bitnami/apps/${APPNAME}/conf/certs/server.key"
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)?$ https://www.%{HTTP_HOST}/$1 [R=301,L]
Include "/opt/bitnami/apps/${APPNAME}/conf/httpd-app.conf"
</VirtualHost>
EOF
cat << EOF >> /opt/bitnami/apache2/conf/bitnami/bitnami-apps-vhosts.conf
Include "/opt/bitnami/apps/${APPNAME}/conf/httpd-vhosts.conf"
EOF
バーチャルホストのSSL証明書
/opt/bitnami/ctlscript.sh stop apache
if certbot certonly --standalone -d ${DOMAINNAME} -d www.${DOMAINNAME} -m white35g@getsv.com --agree-tos; then
mkdir -p /opt/bitnami/apps/${APPNAME}/conf/certs/
ln -s /etc/letsencrypt/live/${DOMAINNAME}/privkey.pem /opt/bitnami/apps/${APPNAME}/conf/certs/server.key
ln -s /etc/letsencrypt/live/${DOMAINNAME}/fullchain.pem /opt/bitnami/apps/${APPNAME}/conf/certs/server.crt
fi
/opt/bitnami/ctlscript.sh start apache
MySQL
export DBNAME=DB名
export USERNAME=ユーザ名
export PASSWORD=パスワード
cat << EOF | mysql -uroot -p
create database ${DBNAME};
create user '${USERNAME}'@'localhost' identified by '${PASSWORD}';
grant all privileges on ${DBNAME}.* to '${USERNAME}'@'localhost';
flush privileges;
EOF
その他のミドルウェアのインストール
Nodejs
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs
Python
sudo apt install -y python3-pip
Bitnamiはダメだった
BitnamiとWordPress5.3は相性悪い。テンプレートのPHPを保存しようとすると
致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。SFTP を使うなど、他の手段で PHP ファイルの変更をアップロードする必要があります。
のエラーが発生する。プラグインを停止してもwp-admin/includes/file.php
をコメントアウトしてもダメ。Pleskだと問題ない。
参考
データ周辺の技術 の記事一覧