Dockerガイド · 3 min read · Feb 04, 2026

Dockerガイド:MySQLとTraefikを使用したGhostブログのデプロイ

Ghostは、nodejsに基づいた強力なオープンソースの出版およびブログプラットフォームです。デザインが優れており、使いやすいです。GhostプラットフォームはJavaScriptで書かれており、node.jsをランタイム環境として使用しています。最初のGhostバージョンは2013年にMITライセンスの下でリリースされました。

Traefikは、マイクロサービス用の最新のHTTPリバースプロキシおよびロードバランサーです。Traefikは、Docker、Swarmモード、Kubernetes、Amazon ECS、Rancher、Etcd、Consulなどの既存のインフラストラクチャコンポーネントと統合され、すべてのマイクロサービスのデプロイを簡単にします。

このチュートリアルでは、GhostをDockerコンテナとしてインストールおよび構成する手順をステップバイステップで示します。最新のDocker CEバージョンの下でGhostをインストールおよび構成し、MySQLをデータベースとして使用し、Traefikをリバースプロキシとして使用します。

前提条件

  • Ubuntu 18.04 LTS
  • ルート権限

何をするか

  1. Ubuntu 18.04 LTSにDocker CEをインストール
  2. 非ルートユーザー用にDockerを設定
  3. Docker Composeをインストール
  4. Ghostスタックを構成 - カスタムネットワークを作成
    • プロジェクトディレクトリを作成
    • MySQLコンテナを作成および構成
    • Traefikリバースプロキシを作成および構成
    • Ghostコンテナを作成および構成
  5. MySQLとTraefikを使用してGhostをデプロイ
  6. テスト

ステップ1 - Ubuntu 18.04 LTSにDocker CEをインストール

このチュートリアルで最初に行うステップは、システムの最新のdocker-ceバージョンをインストールすることです。docker-ceバージョンは、公式のdockerリポジトリからインストールできます。

dockerキーとdocker-ceリポジトリを追加します。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  
sudo add-apt-repository \  
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \  
   $(lsb_release -cs) \  
   stable"

このコマンドは、システム上のすべてのリポジトリを自動的に更新します。

次に、以下のaptコマンドを使用してdockerをインストールします。

sudo apt install docker-ce -y

インストールが完了したら、dockerサービスを開始し、システム起動時に毎回起動するように有効にします。

systemctl start docker  
systemctl enable docker

最新のdocker-ceバージョンがUbuntu 18.04システムにインストールされました。

Docker CEのインストール

ステップ2 - 非ルートユーザー用にDockerを設定

このガイドでは、すべてのコンテナマイクロサービスは通常の非ルートユーザーの下で実行されます。したがって、Dockerコンテナを実行し、ルート権限のためにsudoコマンドを実行できるようにユーザーを構成する必要があります。

‘hakase’という名前の新しいユーザーを作成し、パスワードを作成します。

useradd -m -s /bin/bash hakase  
passwd hakase

次に、’hakase’ユーザーを’sudo’および’docker’グループに割り当てます。

usermod -a -G root hakase  
usermod -a -G docker hakase

そして、dockerサービスを再起動します。

systemctl restart docker

‘hakase’は、dockerコンテナを実行し、ルート権限のためにsudoコマンドを実行できるようになりました。

非ルートユーザー用にDockerを設定

ユーザー’hakase’としてログインし、docker hello-worldコンテナを実行します。

su - hakase  
docker run -it hello-world

結果は以下の通りです。

非ルートユーザーとしてdockerをテスト

ステップ3 - Docker Composeをインストール

このチュートリアルでは、Githubリポジトリからバイナリファイルとしてdocker compose 1.21をインストールします。

docker-composeバイナリを’/usr/local/bin’ディレクトリにダウンロードします。

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

次に、ファイルの権限を変更して’docker-compose’ファイルを実行可能にします。

sudo chmod +x /usr/local/bin/docker-compose

docker composeがインストールされました - 以下のコマンドで確認します。

docker-compose version  
docker version

Docker Composeのインストール

Docker-compose 1.21とDocker-ce 1.18がインストールされました。

ステップ4 - Ghostスタックを構成

このステップでは、dockerを構成し、ghostインストール用の新しいdocker-composeファイルを作成します。

新しいdockerカスタムネットワークを作成し、MySQLデータベース、Traefikリバースプロキシ、およびGhostブログ自体を含む3つの主要サービスを含む新しいdocker-compose ymlファイルを作成します。

カスタムネットワークを作成

以下のdocker networkコマンドを使用して、利用可能なdockerネットワークを表示します。

docker network ls

‘traefiknet’という名前のtraefikリバースプロキシ用の新しいカスタムdockerネットワークを作成します。

docker network create traefiknet

次に、dockerシステム上の利用可能なネットワークを再度確認します。

docker network ls

カスタムネットワークを作成

‘Treafik’用のカスタムネットワーク’traefiknet’が作成されました。

プロジェクトディレクトリを作成

dockerカスタムネットワークを作成した後、’ghost’という名前の新しいプロジェクトディレクトリを作成し、新しいdocker-compose.ymlファイルを作成します。

‘hakase’ユーザーにログインします。

su - hakase

新しい’ghost’ディレクトリを作成し、作業ディレクトリをそこに変更します。

mkdir ghost/  
cd ghost/

新しいdocker-composeファイルを作成します。

touch docker-compose.yml

MySQLサービスを作成および構成

MySQLは、作成したい最初のサービスであり、以下の構成でMySQLコンテナを作成したいと考えています。

  • MySQL 5.7のdockerイメージを使用します。
  • MySQLデータディレクトリをローカルdockerホストディレクトリにマウントします。
  • ローカル内部ネットワークでMySQLサービスを実行します。
  • MySQLユーザーとパスワードを構成します。 - MySQLルートパスワード:mypassword
  • ‘ghost’というユーザーとパスワード’ghostdbpass’を持つ’ghost’という名前のデータベース。
  • MySQLコンテナは’mysql’という名前になります。

‘ghost’ディレクトリ内に新しい’data’という名前のディレクトリを作成し、’docker-compose.yml’ファイルを編集します。

mkdir -p data/  
vim docker-compose.yml

以下の構成を貼り付けます。

version: '3.3'

services:

  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    labels:
      - "traefik.enable=false"
    networks:
      - internal
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    container_name: mysql

保存して終了します。

Traefikリバースプロキシを作成および構成

MySQLサービスを作成した後、traefikリバースプロキシコンテナを作成および構成します。

‘docker-compose.yml’スクリプトを編集する前に、’traefik.toml’という名前の新しいtraefik構成を作成する必要があります。

vim traefik.toml

以下のtraefikルール構成を貼り付けます。

#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]

#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Enable Traefik Dashboard on port 8080
#with basic authentication method
#hakase and password
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
    users = [
        "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
    ]

[api]
entrypoint="dash"
dashboard = true

#Enable retry sending a request if the network error
[retry]

#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false

#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

保存して終了します。

次に、SSL Letsencrypt構成用の新しいファイル’acme.json’を作成します。これは、すべてのletsencrypt生成ログを保存するために使用されます。

空の’acme.json’ファイルを作成し、権限を600に変更します。

touch acme.json  
chmod 600 acme.json

次に、’docker-compose.yml’スクリプトを編集し、traefikサービス構成を追加します。

  • 最新のtraefik dockerイメージを使用します。
  • コンテナは’traefik’という名前になります。
  • カスタムネットワーク’traefiknet’を使用し、HTTPおよびHTTPSポートを公開します。
  • docker sockファイルとtraefik構成’traefik.toml’および’acme.json’をマウントします。
  • dockerラベルを通じてtraefikダッシュボードURLとバックエンドを定義しました。

‘docker-compose.yml’を編集します。

vim docker-compose.yml

以下のtraefikサービス構成を貼り付けます。

  traefik:
    image: traefik:latest
    command: --docker
    ports:
      - 80:80
      - 443:443
    labels:
      - "traefik.enable=true"
      - "traefik.backend=dashboard"
      - "traefik.frontend.rule=Host:traef.hakase-labs.io"
      - "traefik.port=8080"
    networks:
      - traefiknet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    container_name: traefik
    restart: always

保存して終了します。

Ghostサービスを作成および構成

Traefikリバースプロキシを構成した後、主要なghostサービス構成を作成します。

作成したい構成の詳細。

  • ghost v1と小型docker alpineバージョンを使用します。
  • ghostコンテンツディレクトリを’blog’という名前のローカルディレクトリにマウントします。
  • ghostサービスはデフォルトポートで実行され、ドメイン名’gho.hakase-labs.io’を使用し、dockerラベルを通じて構成します。
  • ghostサービスは、内部とtraefiknetの2つのdockerネットワークを使用します。
  • mysqlコンテナ構成からMySQLデータベースの詳細を構成しています。
  • traefikとMySQLコンテナが起動しているときにghostが開始されます。

新しい’dblog’という名前のディレクトリを作成し、’docker-compose.yml’ファイルを編集します。

mkdir -p blog/  
vim docker-compose.yml

以下の構成を貼り付けます。

  ghost:
    image: ghost:1-alpine
    restart: always
    ports:
      - 2368
    volumes:
      - ./blog:/var/lib/ghost/content
    labels:
      - "traefik.enabled=true"
      - "traefik.backend=ghost"
      - "traefik.frontend.rule=Host:gho.hakase-labs.io"
      - "traefik.docker.network=traefiknet"
      - "traefik.port=2368"
    networks:
      - internal
      - traefiknet
    environment:
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
    container_name: ghost
    depends_on:
      - mysql
      - traefik  

networks:
  traefiknet:
    external: true
  internal:
    external: false

保存して終了します。

Ghostサービスの作成と構成

これで、すべてのディレクトリと構成が以下のように表示されます。

tree

構成ファイル

ステップ5 - MySQLとTraefikを使用してGhostをデプロイ

すべてのghostスタックサービスをビルドして実行するには、以下のコマンドを使用できます。

docker-compose up -d

MySQLとTraefikを使用してGhostをデプロイ

完了したら、すべての実行中のサービスを確認します。

docker-compose ps

結果は以下の通りです。

エラーがある場合は、以下のコマンドを使用してコンテナログを確認します。

docker-compose logs mysql  
docker-compose logs traefik  
docker-compose logs ghost

コンテナログを確認

MySQLとTraefikリバースプロキシを使用したghostスタックが起動して実行中です。

ステップ6 - テスト

TraefikダッシュボードをそのURLで開きます。私のURLはhttp://traef.hakase-labs.io/

‘traefik.toml’ファイルのユーザー名とパスワードでログインします。

以下がTraefikダッシュボードです。

Traefikダッシュボード

Ghostのインストールのために、アドレスバーにghostのURLを入力します。私のURLはhttp://gho.hakase-labs.io/

そして、ghostのホームページが表示されます。

Docker上で実行中のGhostブログ

今、管理ページにアクセスして新しい管理ユーザーを設定および構成します。私のURLは:http://gho.hakase-labs.io/admin/

緑のボタンをクリックして新しい管理ユーザーを作成します。

Ghostインストーラー

ユーザーの詳細、パスワード、メールを入力し、再度緑のボタンをクリックします。

管理ログインの作成

新しいメンバーやユーザーを招待するには、’後で行います..’リンクをクリックします。

ユーザーを招待

これでGhostダッシュボードが表示されます。

Ghostダッシュボード

サンプル投稿を作成した後、結果は以下の通りです。

Dockerコンテナで実行中のGhostブログ

MySQLデータベースとTraefikリバースプロキシを使用したGhostブログのインストールが成功裏に完了しました。

参考文献

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。