【自作ブログ】Google Cloud Platform(GCP)の無料枠インスタンスにGhostブログを作成しよう

Google Cloud Platform(GCP)には無料枠のVM インスタンスを作成することができます。

そのインスタンスにDockerを入れて、Docker上でGhost、mysql、caddyで自作ブログを立てていきます。

無料枠の条件

2025/05現在の条件では画像のようになっています。

参考:https://cloud.google.com/free/docs/free-cloud-features#compute
GCP無料枠の説明画像

e2-microとなりスペックが2 vCPU, 1GB RAMなので大量にアクセスされるサイトには向いてないですね。

個人ブログではいいかもしれないです。

注意点として(欧米から全地域への毎月1GBの送信データ転送)があるためなるべくブログ記事内の画像を圧縮させたりして1GBを超えても課金額が少なくなるように調整した方が良いです。


ドメイン

ドメイン名などはお好きに取得してください。自分はお金をかけたくなかったのでMyDNSで取得しました。(将来的にはお名前ドットコムでしっかりしたドメイン名を取りたいです...)

インスタンス作成

GCPの無料インスタンスを作成する方法はたくさん記事がありますので割愛します。

「GCP 無料インスタンス 作成方法」などで検索してみてください。

OSは「Ubuntu 25.04 minimal」で作成しています。

sshをしてターミナルに入ります。

とりあえずパッケージリスト更新をしてから

sudo apt update

Dockerインストール

参考

Docker Engine インストール(Ubuntu 向け)
Ubuntu 上に Docker Engine をインストールする手順を説明。

リポジトリを利用したインストール

sudo apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
     | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker Engine のインストール

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

これでインストールできているはずです。バージョン確認のコマンドを打ち込んで表示されるか確認してみてください。

docker -v

Docker一般ユーザーで実行権限付与

Dockerを一般ユーザで実行できるようにするには(管理者権限sudoで操作する場合はやらなくてもいい

dockerグループの確認(出力結果ではまだ誰もグループにいないことが分かります。)

getent group | grep docker
docker:x:999:

一般ユーザーを追加(ユーザー名の箇所は自身のユーザー名)

sudo usermod -aG docker ユーザー名

再度dockerグループの確認(出力結果に追加した自身のユーザー名が表示されていれば成功です。)

getent group | grep docker
docker:x:999:ユーザー名

その後、一度sshを切って再度ログインしなおしてください。


docker-compose.yml 作成

・Caddyは自動でSSL化(Let's Encryptの証明書発行)してくれるのでこの時点でGCPのインスタンスの外部IPアドレスとドメイン名と紐づけしておくといい

Dockerの作業フォルダを作成して移動します。

mkdir docker-ghost
cd docker-ghost

docker-compose.ymlを作成

docker-compose.yml

  services:

  ghost:
    image: ghost:latest
    container_name: ghost
    restart: always
    environment:
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: ghostpassword
      database__connection__database: ghost
      url: "https://あなたのドメイン名"
    volumes:
      - ./ghost:/var/lib/ghost/content
      - ./config.production.json:/var/lib/ghost/config.production.json
    expose:
      - "2368"

  db:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ghostpassword
    volumes:
      - ./db:/var/lib/mysql

  caddy:
    image: caddy:alpine
    container_name: caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config

Caddyファイル作成

そしたら次にCaddyfileを作成します。

テキストでそのままの名前「Caddyfile」で作成して中身は以下のようにしてください。

Caddyfile

あなたのドメイン名 {

    reverse_proxy ghost:2368 {

        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote_host}
        header_up X-Forwarded-Proto {scheme}
        header_up Cookie {http.request.header.Cookie}

    }
}

ここまで来たらOK

Docker起動

起動してみてください。

docker compose up -d

起動したら「https://あなたのドメイン名/ghost」にアクセスしてみてください。


サーバーの動作が重いとき

スワップを作成してみてください。

参考

swapfileの追加
目次: 対象の標準OS, swapfileの追加- スワップが存在しない事を確認, スワップファイルを作成, スワップファイルの有効化.. 「さくらのVPS」の標準OSで swapfile を利…

余談「Ghostのメール設定について」

docker-ghostのフォルダ内に「config.production.json」というファイルがあると思います。

Ghostにメール認証機能があり、メール設定が必要になりますので下記記事を参考にしてみてください。

【Ghost】別端末からログインしようとした時に詰まった話
セルフホストでGhostでブログを運用していて別端末からログインしようとしたらずっとグルグルして入れない現象になってしまってました。 最初に初期設定した端末ではCookieを持っているためログイン画面を飛ばしてログインが可能だったのでその端末でしか入れませんでした。 原因は2段階認証があったこと、、 メールアドレスとパスワードを入力後にそのメールアドレス宛に6桁の数字が送られてくる、それを画面遷移後のページに入力が必要になるが、セルフホストしていてメール設定をしていないとグルグルして進まなくなってしまう、、 自分はGhostのメール設定に自身のGmailを利用してメールを飛ばすようにしている。 先ずは、Gmailのアプリパスワードを発行します。 Account settings: Your browser is not supported. その後にGhostの以外ファイルのmailの箇所を編集 「config.production.json」 { “mail”: { “transport”: “SMTP”, “options”: {

Read more

【資産運用】PayPay ポイント運用を約1年と数カ月続けた結果を公開

物価高の昨今ですが、皆さんは投資していますでしょうか。 投資といっても様々あり リスクが高くリターンが高い投資やリスクが低くリターンも低い投資があります。 銀行に自身のお金を預けていても、銀行側も預かっているお金で融資をしたりしているので資産運用しているとも言えます。 ですが銀行に預けていても金利が低くなかなかお金が増えません。 そこでリスクは低く、リターンもそこそこあるPayPay ポイント運用を約1年間続けた結果を公開します。 なぜリスクが低いか PayPayポイント運用とは、日常の買い物などで貯まるPayPayから付与されたポイントを利用して投資が可能となります。 そのため買い物の中で還元されたポイントのみが運用で上下するため元手となる資金は必要ないような運用となります。 いつでも引き出しが可能です。利用したくなることがあればすぐにポイントを引き出せます。 参考 【FP監修】PayPayポイント運用をやってみよう!初心者が意識したい5つのコツも紹介 - PayPay本記事では、PayPayポイント運用とは何か、初心者が意識したい5つのコツなどを紹

By 管理者

「AdGuard Home」で広告ブロックのフィルターを設定する方法(LINEの広告のブロック方法も紹介)

前回の記事でUGREEN NASのDocker上でAdGuard Homeを構築するまでを紹介しました。 まだ見ていない方はこちら↓ UGREEN NASのDockerで「AdGuard Home」を稼働させて広告ブロックする方法本記事を見に来た方にAdGuard Homeの説明は不要かと思いますので省きます。 とにかくネットワークレベルで広告をブロックしたいと思っていて、自宅にNASサーバーを24時間稼働させている方が見に来られているかと思います。 Raspberry Pi(ラズパイ)でも同じことが実現可能です。 自宅のその辺に転がっているラズパイでも試してみてください。 本記事ではUGREEN NAS(DXP2800)のDockerで構築して動作させています。 利用するDockerイメージ https://hub.docker.com/r/adguard/adguardhome Dockerイメージダウンロード UGREEN NASのDockerの「イメージ」>「イメージリポジトリ」の検索欄からadguardhomeと検索して、 上記のDockerイメージと同じ物(検索して一番

By 管理者

UGREEN NASのDockerで「AdGuard Home」を稼働させて広告ブロックする方法

本記事を見に来た方にAdGuard Homeの説明は不要かと思いますので省きます。 とにかくネットワークレベルで広告をブロックしたいと思っていて、自宅にNASサーバーを24時間稼働させている方が見に来られているかと思います。 Raspberry Pi(ラズパイ)でも同じことが実現可能です。 自宅のその辺に転がっているラズパイでも試してみてください。 本記事ではUGREEN NAS(DXP2800)のDockerで構築して動作させています。 利用するDockerイメージ https://hub.docker.com/r/adguard/adguardhome Dockerイメージダウンロード UGREEN NASのDockerの「イメージ」>「イメージリポジトリ」の検索欄からadguardhomeと検索して、 上記のDockerイメージと同じ物(検索して一番上にあるもの)をダウンロードします。 コンテナ作成 次に「コンテナ」>「作成」からイメージを選択で先程ダウンロードしたイメージを選択してください。 コンテナの編集 コンテナ名は自由に分か

By 管理者

【PowerShell】ローカルアカウントのコマンドのみでドメインアカウントのコマンドプロンプトと管理者権限付きのPowerShellを開く方法

Windowsのローカルアカウントからドメインアカウントでコマンド操作をしたい場合は、 基本的にはローカルアカウントを一度サインアウトをしてから ログイン画面で「他のユーザー」からドメインアカウントへ切り替えが必要となります。 そのログイン切り替えが面倒くさいため、 ローカルアカウントからサインアウトせずにコマンドのみでドメインアカウントのコマンド操作できるPowerShell実行方法を掲載します。 ドメインアカウントに管理者権限を付与 ローカルアカウトでコマンドプロンプトを管理者権限で開きます。(PowerShellも可) 以下コマンドでドメインアカウントを管理者グループに追加しておきます。 ※「アカウントID」箇所を自身の使うアカウントに書き換えしてください。 net localgroup administrators アカウントID /add ドメインアカウントのコマンドプロンプトを開く ※「ドメイン名」と「アカウントID」箇所を自身の使うドメインとアカウントに書き換えしてください。 パスワードが求められたらドメインアカウントのパスワードを入

By 管理者