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/