【雑記】無料でWordPressのブログを作ってみた

Blog

はじめに

このサイトを開設するまでにかなり無駄な手間を踏んでしまったので以下の方法は全く人にはおすすめできない。

無料で始めたいならはてなブログnoteを使えWordPressを使ってみたいならさくらインターネットGMOでサーバーをレンタルしろ

というのが結論なのだが、これで終わってしまっては記事が書けないので備忘録として開設に至るまでの流れを残しておきたい。

簡単に無料で使えるWordPressサービス

「WordPressを無料で」というと一番の選択肢になるのがWordPress.comの無料プランだろう。もちろん簡単なブログを始めるならこれでも問題ないのだが、

  • ドメインが〇〇.wordpress.comに限られる
  • テーマが自由に選べない
  • プラグインが使えない

といった欠点があり、カスタマイズ性が低くWordPressの利点を活かしきれていない。

そこで、無料かつ高いカスタマイズ性を備えたウェブサイトを構築するまでの流れを以下に記したい。

仮想マシン取得

企業のサービスに頼らずに無料でブログを開きたいと思ったらまず初めにしなければいけないのがサーバーの確保である。特にWordPressはastrohugoといった静的サイトジェネレーターと違いPHPとデータベースが動く動的サイトのため、メモリ1GB程度のマシンではカツカツになりやすい。

今回利用したのはOracle Cloudが無料で貸し出しているAmpere A1コア1OCPU、6GBメモリの仮想マシンである。最大で4OCPU、24GBまで無料で使えるのだが、その四分の一を利用する形だ。

これさえ手に入れば個人ブログにはまず問題ないといったレベルのスペックなのだが、唯一にして最大の問題として争奪戦が激しすぎてほとんど手に入らない。空いたマシンを求めて新規インスタンス開設のリクエストを送るスクリプトを組んで24時間走らせたとしても厳しいレベルだ。

代替案としてはGoogle Cloudで無料枠の範囲内で使えるVMインスタンス(e2-micro等)を用いるといったものがある。こちらは確保が容易なもののCPU性能はかなりカツカツな気がする。

ドメインの取得

ここで正直に言わなければならないことがある。はじめに「無料で始める」と言ったが、ことドメインに関しては無料で使える実用的なものはほとんどない。そしてそれらはセキュリティリスクがあまりにも高いため利用のおすすめもできない。大人しくドメインを買おう。

国内ではお名前ドットコムさくらのドメインが有名だが、今回はCloudflareで購入した。聞くところによるとCloudflareはドメインに関してはほとんど原価のまま販売しており原理上ここを下回ることはないのだとか。加えて強力なセキュリティサービスの恩恵も受けられるのが決め手だった。

WordPressのデプロイ

ここまで準備ができたら、仮想マシン上でWordPressを実行していく。個人的にはここでかなり躓いた。

事前準備

はじめにCloudflare上でちょっとした準備を行う。

1.ダッシュボードからZero Trustを開く

ネットワーク > コネクタ > トンネルを作成するをクリック

Cloudflaredを選択し、適当に名前を設定する。

コネクタのインストールでDockerを選び、インストールするためのコマンドから--token eY...となっている部分を控えておく。

次へをクリックし、公開されたアプリケーションルートに進む。ここでサブドメイン・ドメインには公開したいドメイン(blog.domain.comなど)を設定する。サービスの部分には

  • タイプ:http
  • URL:wordpress:80

を入力して設定を保存する。

これによって仮想マシン自体をむやみにインターネットに対して公開しなくてもCloudflareがWordPressのサイトまで仲介してくれる。

Dockerのインストール

もう一個の事前準備としてsshで仮想マシンにアクセスし、dockerをインストールしていく。管理を楽にするため、すべてDockerコンテナ上で実行する。

システム更新とDockerインストール

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh

ユーザー権限の付与

sudo usermod -aG docker $USER
exit

ここまでできたらexitでログアウトし、再ログインする。

Docker Composeファイルの作成

ディレクトリの準備

作業用のディレクトリを準備する。

mkdir ~/my-wordpress
cd ~/my-wordpress

環境設定

トークンベタ貼りはよろしくないので一応別のファイルに分けておく。

nano .env

でエディターを開き以下の内容を設定する。

CF_TOKEN=eY...# 先程控えたトークンのみをペーストする
DB_ROOT_PASS=... # データベース用の強力なパスワードを設定しておく
DB_PASS=... # データベース用の強力なパスワードを設定しておく
DB_USER=wp_user # 好きな名前を入れる
DB_NAME=wordpress # 好きな名前を入れる

完了したらCtrL+O > Enter > Ctrl+X で内容を保存する。

docker-compose.yml の作成

続いてComposeファイルも編集していく。

nano docker-compose.yml

でファイルの編集画面を開き、以下の内容をコピー&ペーストする。

services:
  # 1. データベース (MariaDB)
  db:
    image: mariadb:10.6
    container_name: wp-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wp-network

  # 2. WordPress 本体
  wordpress:
    image: wordpress:latest
    container_name: wp-app
    restart: always
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: ${DB_USER}
      WORDPRESS_DB_PASSWORD: ${DB_PASS}
      WORDPRESS_DB_NAME: ${DB_NAME}
      WORDPRESS_CONFIG_EXTRA: |
        if (isset($$_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($$_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
            $$_SERVER['HTTPS'] = 'on';
        }
    volumes:
      - wp_data:/var/www/html
    networks:
      - wp-network

  # 3. Cloudflare Tunnel (Cloudflared)
  tunnel:
    image: cloudflare/cloudflared:latest
    container_name: wp-tunnel
    restart: always
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=${CF_TOKEN}
    networks:
      - wp-network

volumes:
  db_data:
  wp_data:

networks:
  wp-network:
    driver: bridge

完了したらCtrL+O > Enter > Ctrl+X で内容を保存する。

先程作成した.envファイルから自動でパスワードを読み込んでくれる。逆に言うと.envファイルの内容は決して共有してはいけない。

最後に

docker compose up -d

でコンテナを起動する。

動作確認

Cloudflareに設定したドメイン(例:https://blog.domain.com)にアクセスし、無事にWordPressのインストール画面が表示されるか確かめる。

コメント

タイトルとURLをコピーしました