【Oracle Linux】GhostのDockerへの移行

【Oracle Linux】GhostのDockerへの移行

■概要

Ghostをアップデートしたところ、Oracle Linux 8に入っている画像処理のライブラリが、Armベースに対応していないとエラー表示されてしまいました。
そこで、DockerhubにARM対応のGhostイメージがあったので、そちらに移行することにしました。

■環境

Armベースのインスタンス
Oracle Linux 8
nginx
MariaDB

■作業手順

1. 現在のGhostのバックアップ

Ubuntu環境ではないため、ghost backupが正常に終了しないので、手動でバックアップします。

# ($…の部分は自分の環境に合わせてください)
# DBのバックアップ
$ mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_DIR/db-$DATE.sql"

# Ghostのコンテンツフォルダ(/var/www/ghost/content)のバックアップ
$ tar -czf "$BACKUP_DIR/content-$DATE.tar.gz" -C "$CONTENT_DIR" .

2. docker-compose.ymlの作成

ホームディレクトリにプロジェクト用のディレクトリを作成し、その中にdocker-compose.ymlを作成します。

$ mkdir ~/ghost-docker
$ cd ~/ghost-docker
$ vi docker-compose.yml

ghost-dockerディレクトリ内に、DBのデータ(db_data)とGhostのコンテンツファイル(ghost_content)が格納されるように、docker-compose.ymlを作成します。

services:
  mariadb:
    image: mariadb:10.6
    container_name: ghost-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: ghost_b
      MYSQL_USER: ghost_user
      MYSQL_PASSWORD: ghostpass
    volumes:
      - ~/ghost-docker/db_data:/var/lib/mysql

  ghost:
    image: ghost:5-alpine
    container_name: ghost-blog
    restart: always
    ports:
      - 2368:2368
    environment:
      database__client: mysql
      database__connection__host: mariadb
      database__connection__user: ghost_user
      database__connection__password: ghostpass
      database__connection__database: ghost_db
      url: https://www.89wa.jp
    volumes:
      - ~/ghost-docker/ghost_content:/var/lib/ghost/content
    depends_on:
      - mariadb

volumes:
  db_data:
  ghost_content:

3. 起動

docker compose up -d

4. nginxにリバースプロキシの設定

$ vi /etc/nginx/sites-available/www.89wa.jp.conf

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;
        
        add_header X-Content-Type-Options $header_content_type_options;
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
    }

5. nginxの再起動

sudo systemctl reload nginx

これで、https://www.89wa.jpにアクセスすると、Ghostの初期画面が表示されるようになります。

6. Backupからの復元

# DB
docker exec -i ghost-db mysql -u ghost_user -p'ghostpass' ghost_db < /your/backup_path/db-backup_file_name.sql

# コンテンツ
# バックアップしたコンテンツディレクトリの中身(apps data files images等)を~/ghost_content以下のディレクトリにコピーする

7. 再起動

$ docker compose down
$ docker compose up

これで、元通りになりました。

Haji Papa’s Bits & Bytes
An IT leader, business manager, and anime-loving dad of three, documenting my journey in tech, work, and language learning.

バックアップは定期的に実行しておくと、いざというときに助かるので、次回はそのスクリプトの記事でも書こうと思います。