Docker上でCaddyを使ってWordPressをデプロイしてみる

アフィリエイトブログ
この記事は素人のたわごとです。AWSは設定によって料金がかかることがありますが当ブログも筆者である私も何ら一切責任を負いません。自己責任でお願いします。

これでゴールですね。

AWSでEC2とRDSとCaddyでWordPressをデプロイしてみます。環境設定がめんどくさそうなのでついでにDockerを使います。

Dockerすごい便利ですね。一瞬で環境作れるので大変助かりました。
Caddyも少し躓いた点もありましたがうまくいくと一瞬でHTTPS接続できてかなりいい感じでした。
ApacheやNginxでSSL導入したこと無いんですけどね^^;

ではやっていきます。

参考にしたサイト

先に参考にした記事の紹介からしときます。
この記事の切り貼りでどうにかこうにかデプロイできました。
大変お世話になりました。ありがとうございました。

Dockerの導入

AWS EC2 docker + wordpress インストール - Qiita
AWSにEC2作る AMIの選択 インスタンスタイプの選択 インスタンスの詳細の設定 自動割り当てパブリックIPを「有効」にした以外はデフォルト設定。 ストレージの追加 タグの追加 タグはな...

Caddyの情報まとめ

Caddy | ふうせん🎈 FU-SEN
Web サーバ Caddy について。特徴、インストール、Caddyfile、Q&A。

docker-composeの書き方

How To Start WordPress with Caddy using Docker Compose
HTTP/2 support and automatic TLS encryption

ブラウザからIPアドレスにアクセスしてみる

EC2、RDS、エラスティックIPの設定、SSH接続の設定

EC2とRDSは前回、前々回の記事を参照してください。
エラスティックIPの設定していきます。

エラスティックIPは完全に開放するまでEC2を終了させても変わらないIPアドレスを手に入れることができるみたいです。
1個目はEC2と紐付けしとけば無料みたいなのでとりあえず確保しといてもいいんじゃないですかね?一応下に無料になる条件貼っときます。

エラスティックIPの無料条件

まずコンソールからEC2を開いてその中にあるElasticIPを選択します。

「ElasticIPアドレスの割り当て」をクリックして

「割り当て」をクリックします

これでエラスティックIPを貰えたはずなのでEC2に紐付けしていきます。
「アクション」から「Elastic IP アドレスの関連付け」を選択していきます

「インスタンス」をクリックすると選択肢が出ると思うのでお目当ての番号を選択して「関連つける」を選択します。
今回は一つしかなかったので今動かしているEC2を設定していきます

無事にEC2にElasticIPアドレスを紐付けできました

ではVScodeでsshのconfigを設定していきます。
「HostName」をエラスティックIPにして「IdentityFile」をダウンロードしたファイルの絶対位置に書き換えましょう

ではEC2にSSH接続していきます。

EC2にDockerをインストール

まずyumのアップデートをします

sudo yum update -y

Dockerをインストールします

sudo amazon-linux-extras install docker -y

Dockerを起動させます

sudo systemctl start docker

Dockerの状態を確認します

sudo systemctl status docker

緑色でactive(running)となっているのが確認できると思います。

ec2-userでDockerを実行できるようにします

sudo usermod -a -G docker ec2-user

一度ログアウトします。念の為にec2のインスタンスも再起動させときます。

exit

再度ログインしたらDockerをもう一度起動させます。
これを忘れてるとエラーが出てやる気と時間が無駄になります

sudo systemctl start docker

Docker-Composeのインストール

Install Docker Compose
How to install Docker Compose

こちらから最新のバージョンをダウンロードするURLを調べましょう。
少ししたにスクロールすると「Linux」タブがあると思うのでそちらをクリックしてコマンドをコピーしましょう。

 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Docker-composeの権限を設定します

sudo chmod +x /usr/local/bin/docker-compose

docker-compose.ymlを作る

/home/ec2-user/の下に任意のフォルダーを作ります。
VScodeでエクスプローラーから新規ファイルを作成してもmkdirで作ってもどっちでもいいです。
とりあえず「my-blog」とかでいいんじゃないですかね?

できたら次は新規ファイルを作成して、名前を「docker-compose.yml」として保存しましょう。
中身はこんな感じにします。

version: '3.3'
services:
  #database
  database:
    image: mysql:latest
    container_name: database
    volumes:
      - ./db:/var/lib/mysql
    restart: always
    env_file: 
      - .env
    environment: 
      MYSQL_DATABASE: blog_wp
    cap_add:
      - SYS_NICE  # CAP_SYS_NICE
    command: '--default-authentication-plugin=mysql_native_password'
    networks:
      - blog-network
  
  # wordpress
  wordpress:
    depends_on:
      - database
    image: wordpress:php8.0-fpm-alpine
    container_name: wordpress
    restart: always
    user: "root:root"
    env_file: 
      - .env
    environment:
      - WORDPRESS_DB_HOST=$DB_HOST
      - WORDPRESS_DB_USER=$MYSQL_USER
      - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
      - WORDPRESS_DB_NAME=$DB_NAME
    volumes:
      - ./php.ini:/usr/local/etc/php/conf.d/custom.ini
      - ./wordpress:/var/www/html
    networks:
      - blog-network

  # webserver
  caddy:
    image: caddy:alpine
    container_name: webserver
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./wordpress:/var/www/html
      - ./caddy_data:/data
      - ./caddy_config:/config
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_log:/var/log
    networks:
      - blog-network

networks:
  blog-network:
    driver: bridge

.envを作ってデータベースの情報を埋める

またまた新規ファイルを作成して、名前を「.env」にして中身を作っていきます。

DB_HOST=「rdsのエンドポイント」
MYSQL_USER=「rds作成時のユーザー名」
MYSQL_PASSWORD=「rds作成時のパスワード」
DB_NAME=「rds作成時のDBネーム」

上手く行かないときはパスワードを疑ってください。私はパスワードが間違っていて1週間無駄にしました

php.iniでアップロードサイズを変更する

写真などをアップロードするためにサイズを大きくしときます。新規ファイル作成して名前は「php.ini」です。中身は

memory_limit = 128M
upload_max_filesize = 128M
post_max_size = 128M

Caddyfileでルールを作る

次に「Caddyfile」を作成します。これでアクセスできないページやリダイレクト先などルールを決めていきます。とりあえずHTTP接続を試したいので

:80 {
        php_fastcgi wordpress:9000
        file_server
        encode gzip

        @disallowed {
        path /xmlrpc.php
        path *.sql
        path /wp-content/uploads/*.php
        }

        rewrite @disallowed '/index.php'

    log {
	    output file /var/log/access.log {
		roll_size 1gb
		roll_keep 5
		roll_keep_for 720h
	    }
    }

とします。

ブラウザでアクセスしてみる

Docker-composeを動かしてブラウザでエラスティックIPにアクセスしてみます

まずdocker-compose.ymlのあるフォルダに移動します。
フォルダー名は自分のつけた名前で打ち込んでください

cd ./my-blog

docker-composeを裏で起動させます

docker-compose up --build -d

これでブラウザからIPにアクセスしてみます。

無事にアクセス出来たと思います。

Route53でドメイン設定

ドメイン購入

ドメインチェック

コンソールから「ドメインを登録する」か「Route53」を選びRoute53へ進み、お目当てのドメインが使用可能かどうかチェックします

利用可能であれば「カートに入れる」をクリックして「続行」を選択します

お名前ドットコムのほうが安いかも

ちなみにAWSでドメイン登録すると12ドルなので大体1400円くらいですが、お名前ドットコムで調べてみるとイベント中なのか年間で1円でした。
今回はAWSですべて完結させるために12ドル払いましたがキャンペーン中であればお名前ドットコム使ったほうがいいかもしれません。

個人情報入力

次に個人情報を入力して「続行」をクリックします

確認と購入

「確認と購入」ページに移動したら規約を読んでチェックボックスにチェックをします。
その後、登録したメールアドレス宛に確認メールが届いていると思います。

届いたメールに添付されているアドレスにアクセスしてメールアドレスの検証を終わらせましょう。

メールアドレスの認証が終われば「注文を完了」をクリックします。

ドメイン購入

これで注文が無事に通ったはずなのでドメインに移動してみましょう。

これでドメイン購入が完了しました。
次はドメイン設定していきます。

ドメイン設定

「Route 53」から「ホストゾーン」へ移動します。

ホストゾーンへと移動したらドメイン名をクリックします。

「レコードを作成」を選択し

「レコード名」「値」をそれぞれ入力し「レコードを作成」をクリックします。
TTLも変えたほうがいいかもしれませんがよくわからなかったのでそのままやってます。

これでRoute53の設定は終わりました。

SSL通信してみる

Caddyfile変更

ではHTTPSでアクセスできるようにしていきます。
といってもCaddyfileを一部書き換えるだけです。

今回の設定の場合は、ドメインの頭に「www.」をつけないとアクセス出来ませんでした。
気をつけてくださいね。

www.自分のドメイン {
        tls 自分のメールアドレス
        root * /var/www/html

        php_fastcgi wordpress:9000
        file_server
        encode gzip

        @disallowed {
        path /xmlrpc.php
        path *.sql
        path /wp-content/uploads/*.php
        }

        rewrite @disallowed '/index.php'

    log {
	    output file /var/log/access.log {
		roll_size 1gb
		roll_keep 5
		roll_keep_for 720h
	    }
    }

:80を登録したドメイン名に変更し、tls メールアドレス、root * /var/www/htmlと付け加えて保存します。
そして変更を有効にするために再度docker-composeを起動させます

docker-compose up --build -d

ブラウザからURLにアクセスしてみる

では、登録したドメインにブラウザからアクセスしてみます。

SSL通信になっていて証明書も有効になっていますね。
これで無事にブログが作れそうです。

終わり

以上で「AWSでdockerを使ってCaddyとWordpressを動かす」を終わりたいと思います。
私は全くわからない1から始めたのですでに無料期間を終えようとしていますが、もし新しく始めようとする人の力になればいいな―と思います。

ではまたお会いしましょう。ばいばーい

シリーズ

1回目 アフィブログの構成を考える

2回目 EC2でHelloWorld

3回目 EC2とRDSでWordPressをデプロイ

コメント

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