はじめに
僕がやってるPSO2っていうオンラインゲームがあるんですけどそのチームのWebページを作ったときの話です。
Ubuntu 18.04にApacheとDockerとDocker-composeをインストールして運用してます。
ほぼ自分への備忘録なのであんまり参考にしないほうがいいと思います。
とりあえずいろいろインストール
まずはApacheとDockerとDocker-composeがないと始まりません。
# apt install apache2
# apt install docker docker-compose
Ubuntu18.04だとリポジトリ追加しなくてもdockerのインストールできるっぽいですね・・・。
Apacheの設定
リバースプロキシの設定の前にApacheの設定をします。
ディレクトリを表示しないようにする
URLで存在しないページを指定した場合そのディレクトリが表示されてしまいます。下みたいな感じに表示される機能ですね。
これだとセキュリティ的にあまりよろしくないので表示しないようにする設定です。
# vim /etc/apache2/apache2.conf
上記コマンドでapache2.confを開き(ここではvimを使ってますがお好きなテキストエディタを使ってください)、のセクションで
Options Indexes FollowSymLinks
となっているところを
Options FollowSymLinks
とします。
/var/www/htmlを表示させない
apacheインストールしてアクセスすると表示されるあのテストページを表示されないようにします。
vim /etc/apache2/sites-enabled/000-default.conf
で000-default.confファイルのDocumentRootの前に#をつけてコメントアウトします。
あと、のセクションを以下のようにします。なかったら追加してください。
<Location />
Order deny,allow
Deny from All
</Location>
バーチャルドメイン・リバースプロキシの設定
さっきホストでインストールしたapacheをリバースプロキシにしてdockerコンテナにつなげるのでそれの設定です。
/etc/apache2/sites-enabledにvirtualdomain.confを作成し、そこにリバースプロキシの設定を書き込みます。
<VirtualHost *:80>
ServerName ドメイン名
ProxyRequests On
ProxyPass / http://[ホストのIPアドレス]:8080/
ProxyPassReverse / http://[ホストIPアドレス]:8080/
</VirtualHost>
[ホストのIPアドレス]ってところはlocalhostでも127.0.0.1でも::1でもいけると思うけど自分の環境だとなぜかいけない・・・
最後にapacheを再起動します。
# systemctl restart apache2
#Docker-ComposeでWordPressのコンテナを作成
まずはdocker-compose.ymlを書きます。
version: '2'
services:
database:
image: mysql:5.7.24
container_name: database
env_file: .env
volumes:
- db-data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: WordPress
ports:
- "8080:80"
links:
- database
volumes:
- ./html:/var/www/html
environment:
WORDPRESS_DB_HOST: "database:3306"
env_file: .env
volumes:
db-data:
環境変数のファイルは.envとして別に記述して、docker-compose.ymlと同じ場所に置きます。
WORDPRESS_DB_NAME=wordpress_database
WORDPRESS_DB_USER=worduser
WORDPRESS_DB_PASSWORD=password
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=wordpress_database
MYSQL_USER=worduser
MYSQL_PASSWORD=password
データベースのユーザー名とパスワードは適当に変えてください。
#Docker-ComposeでWordPressのコンテナを作成(自分流)
ここは自分の環境のやり方なので興味がある人だけ読めばいいと思います。
データベースとwordpressが動くサーバを自分の環境では別々のサーバで動かしているのでデータベースとHTTPサーバのIPアドレスが異なります。そこで、docker-compose.ymlは自分ではこのように書いてます。
version: '2'
services:
wordpress:
image: wordpress:latest
container_name: WordPress
ports:
- "8080:80"
volumes:
- ./html:/var/www/html
environment:
WORDPRESS_DB_HOST: "[データベースIPアドレス]:3306"
env_file: .env
.envファイルは上のと同じです。(Mysql関連の環境変数は消してもいいかも)
コンテナを立ち上げよう
コンテナを立ち上げるだけです。
$ docker-compose up -d
最初はイメージとかダウンロードするので時間がかかるのでバウムクーヘンでも食べながらまったりお待ちください。
立ち上がるとapacheのバーチャルドメインで設定したドメイン名でWordPressの設定画面が表示されると思うので適当にWordPressの設定をしてください。
SSLへの対応
WordPressをSSLに対応させると絶対パスで指定してるところがhttpsでなくなります。そこで、WordPressの以下のプラグインをインストールすることでWordPressがSSLに対応します。
https://ja.wordpress.org/plugins/really-simple-ssl/
Let's Encryptで証明書取得
ここからはルーターのポートのTCP 80番と443番が空いてないとできないと思います。ルーターのポートフォワードが設定されているかを確認してください。
まず、certbotをインストールします。
# apt install certbot
次に以下のコマンドを実行してcertbotでLet's Encryptの証明書を取得します。
# certbot
いろいろ聞かれると思いますが適当に答えれば証明書がもらえると思います。
最後にhttpでアクセスしてきた場合もhttpsにリダイレクトするか的な質問もあると思うのでyesを選んでおけばhttpsを強制できます。
まとめ
多分これでDockerコンテナを使ってSSL対応WordPressを動かすことができます。自分はこれでいけました。