deezus blog

.Net Core、Typescriptを中心に技術的ノウハウを公開しています

dockerでwordpressを構築する

概要

dockerでwordpressを構築し、ホストのnginxをリバースプロキシとして使用します

docker-compose

使用するコンテナはwordpressmysqlです
docker-compose.ymlは下記のようにしました
wp-contentはボリュームとしてマウントしています

version: "2"
services:
  wordpress:
    image: wordpress
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./wp-content:/var/www/html/wp-content
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - mysql
  mysql:
    image: mysql
    restart: always
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 1
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    ports:
      - "3306:3306"
    volumes:
      - ./mysql:/var/lib/mysql

nginx設定

Let’s Encryptを使用したhttpsの例です
httpでのリクエストをhttpsへリダイレクトしています

server {
  listen 80;
  server_name hostname;
  rewrite ^ https://$host$request_uri permanent;
}

server {
    listen       443 ssl http2;
    server_name  hostname;

    ssl_certificate /etc/letsencrypt/live/hostname/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hostname/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS;
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location / {
      proxy_pass http://localhost:8080/;
      proxy_redirect default;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}