SSL+独自ドメインなwordpress環境をdocker-composeで3分で立ち上げる

docker, tech, wordpressNo Comments

You Are Here:, tech, wordpressSSL+独自ドメインなwordpress環境をdocker-composeで3分で立ち上げる

ueebee.comのインフラ構成をメモにして残しておきたいと思います。今回はSSL+独自ドメイン+wordpressの環境が3分くらいで立ち上がりました。

キューピー3分クッキングじゃないけど、調理済みで、すでにある環境に相乗りする形で乗っかったので、非常に手軽でした。

ほんとに便利な世の中になったなぁとしみじみです。


さて本題です。
使っている技術スタックは以下です。

OS: debian9
docker: 18.09.2

SSLなリバースプロキシを作っておく

imageとしては以下です。

internet -> proxy:80/443 ----> appserver1 
                          +--> appserver2
                          +--> appserver3
                          +--> appserver4

こんな感じでフロント部分にlet’s encryptのSSL証明書を配置して、リバースプロキシとして動作してくれます。
これを無料で全自動でやってくれる凄い便利なコンテナが以下です。

https://github.com/jwilder/nginx-proxy

このコンテナが凄いのは appserver が増えたとしても、

  • 同一docker networkにいれば自動で検知
  • let’sencryptの証明書を自動で発行
  • SSL証明書の更新を全自動でやってくれる

ところです。

利用用途としては、

  • 個人のブログサイト
  • とにかくリーンスタートでソフトウェア開発をして試していく
  • 開発時の検証に使いたい

みたいなとき、かなりの工数を削減してくれます。それにdockerだからどこにでも持ち運べるportable性も完備。AWSでもGCPでもサーバーがそこにあれば良いってのは最高です。

ライトに試したいけれど、「このご時世SSLは最低限欲しいよね」って結構あったりするので、事前に環境を持っておくと色々便利。


networkを作る

それでは実際の作業です。

SHELLで以下のコマンドを叩いて、dockerのnetworkを作っておきます。

docker network create ssl_proxy

docker-compose.yml

以下のdocker-compose.ymlを書きます。

version: "2"

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    privileged: true
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./certs:/etc/nginx/certs:ro
      - ./htpasswd:/etc/nginx/htpasswd
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./log:/var/log/nginx
    networks:
      - default
      - ssl_proxy
    restart: always

  letsencrypt-nginx:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-nginx
    privileged: true
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    restart: always
networks:
  ssl_proxy:
    external: true

ディレクトリ構成は以下。

dir
├── certs
├── docker-compose.yml
├── htpasswd
└── log
※docker-compose.yml以外はディレクトリ作っといてください。

あとはお決まり、以下のコマンドでSSLなリバースプロキシが立ち上がります。

docker-compose up -d

wordpressをdockerに載せる

前置きが長くなりましたが、ここからが今回やった作業です。
ueebee.comの起動までは3分くらいでした。

  • docker-compose.ymlを書く 2分
  • DNSの設定変更 1分
  • サーバー側でdocker-compose up 10秒 

docker-compose.yml

version: '3.1'

services:

  ueebee_com:
    container_name: ueebee_com
    image: wordpress:latest
    hostname: ueebee.com
    ports: 
      - "8051:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: ueebee_com_db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress 
      WORDPRESS_DB_PASSWORD: password 
      VIRTUAL_HOST: ueebee.com
      VIRTUAL_PORT: 8051
      LETSENCRYPT_HOST: ueebee.com
      LETSENCRYPT_EMAIL: example@example.com
      LETSENCRYPT_TEST: "false"
    links:
      - ueebee_com_db
    volumes:
      - ./var/www/html:/var/www/html
      - ./var/log:/var/log
    networks:
      - default
      - ssl_proxy

  ueebee_com_db:
    container_name: ueebee_com_db
    image: mariadb:latest
    environment: 
      MYSQL_ROOT_PASSWORD: password 
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: password
    volumes:
      - ./var/vm/db:/var/lib/mysql

networks:
  ssl_proxy:
    external: true

dir

dir
├── var 
└─── docker-compose.yml

あとはいつもどおり

docker-compose up -d 

とすると、https://ueebee.comにアクセスするとwordpressの管理画面が出てきます。

wordpressのサイト側をいじりたいときは、 varの下にコンテナ側の var/www/html をマウントしてるのでそこで作業可能です。

利用用途はwordpressじゃなくても良くて、httpプロトコルなものをhttpsでさばきたい場合には何でも良いのがすぐれものです。

golangのAPIサーバーを裏で動かして、別ドメインで公開したりみたいなことも非常に手軽に出来ます。

nginx-proxyおすすめです。

About the author:

マーケティング屋さんとシステム屋さんの間の領域で活動してるOssanです。東京都在住。 ブラックラグーンとドトールコーヒーと旅とバッカスが好きです。最近興味本位に流されてAI周り、投資周りにも興味があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Top