【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.

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