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
- ルート権限
何をするか
- Ubuntu 18.04 LTSにDocker CEをインストール
- 非ルートユーザー用にDockerを設定
- Docker Composeをインストール
- Ghostスタックを構成 - カスタムネットワークを作成
- プロジェクトディレクトリを作成
- MySQLコンテナを作成および構成
- Traefikリバースプロキシを作成および構成
- Ghostコンテナを作成および構成
- MySQLとTraefikを使用してGhostをデプロイ
- テスト
ステップ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システムにインストールされました。

ステップ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コマンドを実行できるようになりました。

ユーザー’hakase’としてログインし、docker hello-worldコンテナを実行します。
su - hakase
docker run -it hello-world結果は以下の通りです。

ステップ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-composedocker composeがインストールされました - 以下のコマンドで確認します。
docker-compose version
docker version
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.ymlMySQLサービスを作成および構成
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保存して終了します。

これで、すべてのディレクトリと構成が以下のように表示されます。
tree
ステップ5 - MySQLとTraefikを使用してGhostをデプロイ
すべてのghostスタックサービスをビルドして実行するには、以下のコマンドを使用できます。
docker-compose up -d
完了したら、すべての実行中のサービスを確認します。
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ダッシュボードです。

Ghostのインストールのために、アドレスバーにghostのURLを入力します。私のURLはhttp://gho.hakase-labs.io/
そして、ghostのホームページが表示されます。

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

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

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

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

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

MySQLデータベースとTraefikリバースプロキシを使用したGhostブログのインストールが成功裏に完了しました。
参考文献
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。