Installing Ghost by helm

ヘッドレスCMSとしても使えるGhostDigitalOceanのManaged k8s cluster(DOKS)にhelmでインストールしてみる。

ヘッドレスCMSのstrapiも試してみたかったが、2022/3月時点で公式やbitnamiのHelm Chartがないので断念。

Setup MySQL Database for Ghost

k8s clusterにインストール済みのMySQL(ns:mysql/svc:mysql)にGhost用Databaseを作成。

create database ghost;
create user hogehoge identified by 'hogehoge';
GRANT ALL PRIVILEGES ON ghost.* TO hogehoge@'%';
FLUSH PRIVILEGES;

Installing Ghost by Helm

下記をインストール。

helm search repo ghost
NAME            CHART VERSION   APP VERSION     DESCRIPTION
bitnami/ghost   16.2.0          4.37.0          Ghost is an open source publishing platform des...

chartファイル作成

ghostUsername: hogehoge
ghostPassword: "Password"
ghostEmail: hogehoge@example.net
ghostBlogTitle: DOK8S-CMS
ghostHost: "cms.dok8s.net"
ghostPath: /
ghostEnableHttps: false

replicaCount: 1

service:
  type: ClusterIP

ingress:
  enabled: false

persistence:
  enabled: true
  storageClass: ""
  annotations: {}
  accessModes:
    - ReadWriteOnce
  size: 2Gi
  existingClaim: ""

mariadb:
  enabled: false
externalDatabase:
  host: mysql.mysql
  port: 3306
  user: hogehoge
  password: "Password"
  database: ghost
  existingSecret: ""
  ssl: false
  sslCaFile: ""

Ghostインストール

helm install ghost bitnami/ghost --namespace ghost --create-namespace -f ghost-values.yaml

deploy確認

helm ls -n ghost
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
ghost   ghost           2               2022-03-14 18:26:28.211397 +0900 JST    deployed        ghost-16.2.0    4.37.0

k8sステータス確認

kubectl -n ghost get all,pvc
NAME                         READY   STATUS    RESTARTS   AGE
pod/ghost-5654bcbcbc-2s4lf   1/1     Running   0          60m

NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/ghost   ClusterIP   10.245.156.179   <none>        80/TCP    2d1h

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ghost   1/1     1            1           2d1h

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/ghost-5654bcbcbc   1         1         1       60m
replicaset.apps/ghost-7dc6cf45d    0         0         0       2d1h

NAME                          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
persistentvolumeclaim/ghost   Bound    pvc-f0761f3b-4ac9-4e0d-86be-d6978c6ee6ce   2Gi        RWO            do-block-storage   2d1h

Add Ambassador host/mapping resources

Hostリソース追加

---
apiVersion: getambassador.io/v2
kind: Host
metadata:
  name: dok8s-ghost
  namespace: ambassador
spec:
  hostname: cms.dok8s.net
  acmeProvider:
    email: hogehoge@example.net
  tlsSecret:
    name: dok8s-cms-tls2-cert
---
apiVersion: getambassador.io/v2
kind:  TLSContext
metadata:
  name:  tls-cms
  namespace: ambassador
spec:
  secret: dok8s-cms-tls2-cert
  hosts:
    - cms.dok8s.net
  alpn_protocols: h2

manifest適用

kubectl apply -f dok8s-wp-host.yaml

Mappingリソース追加

---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
  name: dok8s-cms
  namespace: ambassador
spec:
  prefix: /
  host: cms.dok8s.net
  service: http://ghost.ghost/

manifest適用

kubectl apply -f dok8s-wp-map.yaml

ステータス確認

kubectl -n ambassador get host dok8s-ghost
NAME          HOSTNAME        STATE   PHASE COMPLETED   PHASE PENDING   AGE
dok8s-ghost   cms.dok8s.net   Ready                                     2d6h

kubectl -n ambassador get mapping dok8s-cms
NAME        SOURCE HOST     SOURCE PREFIX   DEST SERVICE          STATE   REASON
dok8s-cms   cms.dok8s.net   /               http://ghost.ghost/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です