Ghostは、nodejsに基づく強力なオープンソースのパブリッシングおよびブログプラットフォームです。それはうまく設計されており、使いやすいです。ゴーストプラットフォームはJavaScriptで記述されており、ランタイム環境としてnode.jsを使用します。 2013年にMITライセンスの下でリリースされた最初のGhostバージョン。
Traefikは、マイクロサービス用の最新のHTTPリバースプロキシおよびロードバランサーです。 Traefikを使用すると、すべてのマイクロサービスのデプロイが簡単になり、Docker、Swarm Mode、Kubernetes、Amazon ECS、Rancher、Etcd、Consulなどの既存のインフラストラクチャコンポーネントと統合されます。
このチュートリアルでは、GhostをDockerコンテナーとしてインストールおよび構成する方法を段階的に示します。最新のDockerCEバージョンでGhostをインストールして構成し、MySQLをデータベースとして使用し、Traefikをリバースプロキシとして使用します。
- Ubuntu 18.04 LTS
 - root権限
 
- Ubuntu18.04LTSにDockerCEをインストールする
 - root以外のユーザー用にDockerをセットアップする
 - DockerComposeをインストールする
 - ゴーストスタックの構成
 - カスタムネットワークを作成する
 - プロジェクトディレクトリを作成する
 - MySQLコンテナの作成と構成
 - Traefikリバースプロキシの作成と構成
 - ゴーストコンテナの作成と構成
 - MySQLとTraefikを使用してGhostをデプロイする
 - テスト
 
このチュートリアルで行う最初のステップは、システムの最新のdocker-ceバージョンをインストールすることです。 docker-ceバージョンは、公式のdockerリポジトリからインストールできます。
dockerkeyと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バージョンがUbuntu18.04システムにインストールされています。
 
 
このガイドでは、すべてのコンテナマイクロサービスが通常/非rootユーザーで実行されます。そのため、Dockerコンテナを実行し、root権限に対して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コンテナーを実行し、root権限に対してsudoコマンドを実行できるようになりました。
 
 
ユーザー「hakase」としてログインし、dockerhello-worldコンテナーを実行します。
su - hakase
docker run -it hello-world
結果は次のとおりです。
 
 
このチュートリアルでは、Githubリポジトリのバイナリファイルからdockercompose1.21をインストールします。
docker-composebinaryを「/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
dockercomposeがインストールされています。以下のコマンドを使用して確認してください。
docker-compose version
docker version
 
 
Docker-compose1.21とDocker-ce1.18がインストールされています。
このステップでは、Dockerを構成し、ゴーストインストール用の新しいdocker-composeファイルを作成します。
新しいdockerカスタムネットワークを作成し、MySQLデータベース、Traefikリバースプロキシ、Ghostブログ自体を含む3つの主要なサービスを含む新しいdocker-composeymlファイルを作成します。
以下のdockernetworkコマンドを使用して、使用可能なdockernetworkを表示します。
docker network ls
'traefiknet'という名前のtraefikリバースプロキシ用の新しいカスタムDockerネットワークを作成します。
docker network create traefiknet
次に、Dockerシステムで利用可能なネットワークをもう一度確認します。
docker network ls
 
 
'traefiknet'という名前のTreafikのカスタムネットワークが作成されました。
dockerカスタムネットワークを作成した後、「ghost」という名前の新しいプロジェクトディレクトリを作成し、新しいdocker-compose.ymlファイルを作成します。
'hakase'ユーザーにログインします。
su - hakase
新しい「ghost」ディレクトリを作成し、作業ディレクトリをそのディレクトリに変更します。
mkdir ghost/
cd ghost/
そして、新しいdocker-composeファイルを作成します。
touch docker-compose.yml
MySQLサービスの作成と構成
MySQLは私たちが作成したい最初のサービスであり、以下の構成でMySQLコンテナを作成したいと思います。
- MySQL5.7ドッカーイメージを使用します。
 - MySQLデータディレクトリをローカルのDockerホストディレクトリにマウントします。
 - ローカル内部ネットワークでMySQLサービスを実行します。
 - MySQLユーザーとパスワードを構成します。
 - MySQLルートパスワード:mypassword
 - ユーザーが「ghost」でパスワードが「ghostdbpass」の「ghostdb」という名前のゴーストのデータベース
 - 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" 保存して終了します。
次に、SSLLetsencrypt構成'acme.json'の新しいファイルを作成する必要があります。これは、すべてのletsencryptがログを生成するために使用されます。
空白の「acme.json」ファイルを作成し、権限を600に変更します。
touch acme.json
chmod 600 acme.json
次に、「docker-compose.yml」スクリプトを編集して、traefikサービス構成を追加します。
- 最新のtraefikdockerイメージを使用します。
 - コンテナには「traefik」という名前が付けられます
 - カスタムネットワーク「traefiknet」を使用し、HTTPポートとHTTPSポートを公開します。
 - dockersockファイルと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 保存して終了します。
traefikリバースプロキシを構成した後、メインのゴーストサービス構成を作成します。
作成する構成の詳細。
- ゴーストv1と小さなDockerアルパインバージョンを使用します。
 - ゴーストコンテンツディレクトリを「blog」という名前のローカルディレクトリにマウントします。
 - ゴーストサービスは、ドメイン名「gho.hakase-labs.io」のデフォルトのポートで実行されます。これは、Dockerラベルによる構成です。
 - ゴーストサービスは、内部とtraefiknetの2つのDockerネットワークを使用します。
 - mysqlコンテナ構成からMySQLデータベースの詳細を構成しています。
 - そして、traefikとMySQLコンテナが稼働しているときにゴーストが開始されます。
 
'blog'という名前の新しいディレクトリを作成し、'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
 
 
すべてのゴーストスタックサービスをビルドして実行するには、以下のコマンドを使用できます。
docker-compose up -d
 
 
完了したら、実行中のすべてのサービスを確認します。
docker-compose ps
そして、以下が結果です。
 
 
エラーが発生した場合は、以下のコマンドを使用してコンテナログを確認してください。
docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost
 
 
MySQLとTraefikリバースプロキシを使用したゴーストスタックが稼働しています。
そのURLでTraefikダッシュボードを開きます。私のものはhttp://traef.hakase-labs.io/
'traefik.toml'ファイルにユーザーとパスワードを使用してログインします。
 
 
そして、以下はTraefikダッシュボードです。
 
 
Ghostをインストールする場合は、アドレスバーにゴーストURLを入力します。私のものは http://gho.hakase-labs.io/
そして、ゴーストのホームページが表示されます。
 
 
次に、管理ページにアクセスして、新しい管理ユーザーを設定および構成します。私のURLは次のとおりです:http://gho.hakase-labs.io/admin/
緑色のボタンをクリックして、新しい管理者ユーザーを作成します。
 
 
詳細ユーザー、パスワード、メールアドレスを入力し、緑色のボタンをもう一度クリックします。
 
 
新しいメンバーまたはユーザーを招待するには、[後でこれを行います。]リンクをクリックします。
 
 
これで、Ghostダッシュボードが表示されます。
 
 
サンプル投稿を作成すると、次のようになります。
 
 
Docker環境でのMySQLデータベースとTraefikリバースプロキシを使用したGhostブログのインストールが正常に完了しました。
- https://hub.docker.com/_/ghost/
 - https://docs.traefik.io/