4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ApacheのリバースプロキシとDocker-Composeを使ってSSL対応のWordPressを配置した話

Last updated at Posted at 2019-01-27

はじめに

僕がやってる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で存在しないページを指定した場合そのディレクトリが表示されてしまいます。下みたいな感じに表示される機能ですね。

フォルダ.png

これだとセキュリティ的にあまりよろしくないので表示しないようにする設定です。

# vim /etc/apache2/apache2.conf

上記コマンドでapache2.confを開き(ここではvimを使ってますがお好きなテキストエディタを使ってください)、のセクションで

apache2.conf
Options Indexes FollowSymLinks

となっているところを

apache2.conf
Options FollowSymLinks

とします。

/var/www/htmlを表示させない

apacheインストールしてアクセスすると表示されるあのテストページを表示されないようにします。

vim /etc/apache2/sites-enabled/000-default.conf

で000-default.confファイルのDocumentRootの前に#をつけてコメントアウトします。
あと、のセクションを以下のようにします。なかったら追加してください。

000-default.conf
<Location />
   Order deny,allow
   Deny from All
</Location>

バーチャルドメイン・リバースプロキシの設定

さっきホストでインストールしたapacheをリバースプロキシにしてdockerコンテナにつなげるのでそれの設定です。
/etc/apache2/sites-enabledにvirtualdomain.confを作成し、そこにリバースプロキシの設定を書き込みます。

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を書きます。

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と同じ場所に置きます。

.env
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は自分ではこのように書いてます。

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を動かすことができます。自分はこれでいけました。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?