HetznerでDockerを使ってWordPressを構築する方法

この記事は、ドイツのクラウドプロバイダー、[Hetzner](https://www.hetzner.com/)を契約して使ってみるチュートリアルです。例としてUbuntuサーバー上にDockerを利用したWordPress環境を構築する手順を解説します。Hetznerは競合クラウドプロバイダーと比較して使いやすく、大幅に安価（大手の約1/6）なので、個人プロジェクトや小規模なビジネスに好適です。

![hetzner.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55550/d43a4ec3-b98c-c897-d347-a749e8ead354.jpeg)

## はじめに
なぜHetzner Cloudを選ぶのか

- コストパフォーマンスの高さ
- 隠れたコスト（通信料など）が少ない、シンプルな料金体系
- 優れたネットワークパフォーマンス
- 初期設定の簡便さ
- 欧州のデータセンター（GDPRコンプライアンス）

## 1. HetznerとAWSの比較

以下に、Hetzner CloudとAWS EC2の簡単な比較表を示します：

| 特徴               | Hetzner Cloud (CX21) | AWS EC2 (t3.medium) | 
|--------------------|----------------------|---------------------|
| 月額料金           | $5.78                | $30.37 (US-East)    |
| 無料通信量/月      | 20 TB                | 1 GB                |
| vCPU               | 2                    | 2                   |
| RAM                | 4 GB                 | 4 GB                |
| ディスク容量       | 40 GB NVMe SSD       | 20 GB (EBS gp2)     |
| データセンター     | 欧州、米国、シンガポール | グローバル          |
| 料金体系           | シンプル             | 複雑                |
| コントロールパネル | 直感的               | 機能豊富だが複雑    |
| サポート           | メールとチケット     | 多様な有料プラン    |

注意事項：
- 無料通信量を超えた場合の料金：
  - Hetzner: 1TB当たり約$1.3
  - AWS: 1TB当たり$92.16
- AWSは730時間/月として計算
- 換算レート: 1€ ≈ $1.09

詳細: [コスト効率が高いクラウドの選び方: Hetzner vs AWS vs Digital Ocean](https://qiita.com/seigo/items/0ee2b8269b4b50ae1278)

## 2. Hetzner Cloudアカウントの作成

1. [Hetzner Cloud](https://www.hetzner.com/cloud)にアクセスし、「Sign up」をクリック
2. 必要な情報を入力してアカウントを作成
3. クレジットカードまたはPayPalで支払い方法を設定
4. 身分証明書の提出（日本語の文書でOKでした）

## 2. Hetznerのサーバーロケーション別ネットワーク性能比較
Hetznerのサーバーを使用して、日本からアクセスした場合のネットワーク性能を3つの異なるロケーション（ドイツ、アメリカ西海岸、シンガポール）で比較しました。

### テスト環境

- クライアント：東京
- サーバー：Hetzner（ドイツ、アメリカ西海岸、シンガポール）
- 測定ツール：iperf3、ping、mtr

### 結果概要

1.&nbsp;帯域幅（iperf3による測定）
 - シンガポール：345 Mbits/sec
 - ドイツ：239 Mbits/sec
 - アメリカ西海岸：104 Mbits/sec

2.&nbsp;レイテンシ（pingによる測定）
 - シンガポール：平均 80.499 ms
 - ドイツ：約 165 ms（推定）
 - アメリカ西海岸：約 165 ms（推定）

3.&nbsp;ネットワーク経路（mtrによる測定）
 - シンガポール：17ホップ、安定した経路
 - ドイツ：23ホップ、比較的安定した経路
 - アメリカ西海岸：16ホップ、やや不安定な経路

### 考察

どれも良好です。日本からの物理的な距離に反し、ドイツのサーバーが良好なパフォーマンスを示しました。

## 3. サーバーの作成とSSH接続

1. Hetznerコンソールにログイン
2. 「Create Server」をクリック
3. 以下の設定を選択：
   - Location: お好みのデータセンター（例：Nuremberg）
       - 距離が近いシンガポールは高価
   - Image: Ubuntu 24.04
   - Type: CX22 (2 vCPU, 4 GB RAM)
   - Firewall: 新規作成（SSH, HTTP, HTTPSを許可）
   - SSH key: 新規作成または既存のものを選択（またはパスワードによるログインが可能）
   - Name: 任意の名前（例：WordPress-Docker）
4. 「Create & Buy Now」をクリック
サーバーが立ち上がりました！ :rocket: 

料金は1月当たり€3.29と格安です。ストレージ40GB付き、20TB/月までの通信料金が無料。IPv4アドレスは€0.5。これは同等のAWS EC2 t3a.medium (us-west-2) の1/6程度）:money_mouth: 

![dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55550/23fb9771-bd82-9c47-0804-5a46835e28f3.png)
5. サーバー作成後、表示されるIPアドレスを使ってSSH接続：
```bash
ssh root@5.75.181.201 # (あなたのHetznerサーバーのIPアドレス)
```

## 4. Dockerのインストール

```bash
# システムの更新
apt update && apt upgrade -y

# Dockerのインストール
apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install docker-ce docker-ce-cli containerd.io -y

# Docker Composeのインストール
curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# インストールの確認
docker --version
docker-compose --version
```

## 5. Docker Composeを使用したWordPress環境の構築

1.&nbsp;プロジェクトディレクトリの作成：
```bash
mkdir wordpress-docker && cd wordpress-docker
```
2.&nbsp;`docker-compose.yml`ファイルの作成：
```bash
nano docker-compose.yml
```
3.&nbsp;以下の内容を貼り付け：
```yaml:docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "80:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress

volumes:
  db_data:
```

4.&nbsp;Docker Composeで環境を起動：

```bash
docker-compose up -d
```

## 6. WordPressの初期設定

1. ブラウザで`http://5.75.181.201` (あなたのHetznerサーバーのIPアドレス)にアクセス
2. 表示される指示に従ってWordPressの初期設定を完了
![WordPress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55550/41704071-26ef-49d8-6c23-388fcef01852.png)
3. おめでとうございます！ :tada: 

## （おまけ）サーバーのリビルド方法

何か問題が発生した場合、Hetznerのリビルド機能を使用してサーバーを初期状態に戻せます：

1. Hetznerコンソールにログイン
2. 該当するサーバーを選択
3. 「Rebuild」オプションをクリック
4. `Ubuntu 24.04`イメージを選択
5. 確認して実行

注意: リビルドするとサーバー上のすべてのデータが失われます。重要なデータは事前にバックアップしてください。

## （おまけ）プリインストールのイメージ

サーバーの作成時にDocker, GitLab, Nextcloud, Prometheus Grafana, WireGuard, Wordpress 等がイメージから簡単にインストールできます。

![images.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55550/f3ff5ffb-3865-f31f-3042-be0686c07c45.png)

実はWordPressも一瞬でインストールできます。Let's Encryptの証明書も取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55550/2bd85c59-57e0-06cb-2836-97fdcc2f4cff.png)
```text
root@ubuntu-4gb-nbg1-2:~#
[...]
Welcome to the Hetzner Cloud App.
[...]
 ____________________________________________________________________
|                                                                    |
|   Welcome to the Wordpress One-Click-App configuration.            |
|                                                                    |
|   In this process Wordpress will be set up accordingly.            |
|   You only need to set your desired Domain and a few Wordpress     |
|   details. You can also decide if Let's Encrypt should obtain      |
|   a valid SSL Certificate.                                         |
|   Please make sure your Domain exists first.                       |
|                                                                    |
|   Please enter the Domain in following pattern: your.example.com   |
|____________________________________________________________________|

Please enter your details to set up your new Wordpress Instance.
Your Domain: 5.75.181.201
Your Email Address (for Wordpress Account): mail@example.com
Your Username [Default=admin]:
Password:
Password (again):
Wordpress Title: My Wordpress

Is everything correct? [Y/n] Y


Do you want to create a Let's Encrypt Certificate for Domain 5.75.181.201?
Note that the Domain needs to exist. [Y/n]: n

Skipping Let's Encrypt.


The installation is complete and Wordpress should be running at your Domain.
--- 5.75.181.201 ---

The Admin Panel can be accessed via
--- 5.75.181.201/wp-admin ---
```

## まとめ

以上の手順で、HetznerサーバーにDockerを使用してWordPress環境を構築できます。この方法は、スケーラブルで管理しやすい環境を低コストで実現できる優れた選択肢です。

DockerとDocker Composeを使用することで、環境の再現性が高まり、開発からプロダクションまでの一貫性を保つことができます。さらに、Hetznerの高性能かつコスト効率の良いサーバーを利用することで、パフォーマンスと経済性を両立させることができます。

日本でのクラウド市場は3社の寡占に感じられますが、海外ではHetznerや[DigitalOcean](https://www.digitalocean.com)など競争力のあるプロバイダーも台頭してきています。こういったプロバイダーのサービスを試してみることも良い経験になるのではないでしょうか。

## 参考リンク

- [Hetzner Cloud公式サイト](https://www.hetzner.com/cloud)
- [Docker公式ドキュメント](https://docs.docker.com/)
- [WordPress公式サイト](https://wordpress.org/)
- [コスト効率が高いクラウドの選び方: Hetzner vs AWS vs Digital Ocean - Qiita](https://qiita.com/seigo/items/0ee2b8269b4b50ae1278)