10
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWSのEC2にDocker ComposeでWordPress環境を構築する手順

Last updated at Posted at 2018-12-23

#はじめに
タイトルの通り、Docker ComposeでWordPress環境を構築する手順です。
WordPressの環境構築ってレンタルサーバ借りる系の記事が多いですけど、クラウドサーバに自分で構築しちゃうのも全然アリだと思います。
EC2もGCEも無料枠あるのでお得だし。
ネックは手順の複雑さだったけどそれもDocker使えばこんなに簡単に出来ちゃうし。

EC2 インスタンスの作成

AMIは「Ubuntu Server 18.04 LTS」を選択。
インスタンスは無料枠ありなら t2.micro、ないなら t3.micro がおすすめです。
注意点としてはEC2 の nano のメモリ 0.5GB だとメモリ不足になります、、
なので最低でも 1GB は必要なので micro にすること。
あとセキュリティグループの編集>ルールの追加httpとhttpsを追加しよう(ポートの開放)。

DBを操作したい場合はMySQLも。
ソースは「マイIP」などを選択してください。
※絶対に「0.0.0.0/0」にはしないでください!
誰でもアクセス可能になります!
僕は「0.0.0.0/0」にしていたら数日後にハッキングされて全データ消されました!w

インスタンスにssh ログイン

111.222.333.444は自分のIPアドレスに書き換えましょう
IPアドレスはインスタンスのページの中の「IPv4 パブリック IP」の部分です
ec2_wordpress.pemも自分のpemファイルの名前に書き換えましょう

chmod 600 ~/.ssh/ec2_wordpress.pem
ssh ubuntu@111.222.333.444 -i ~/.ssh/ec2_wordpress.pem

最初だけAre you sure you want to continue connecting (yes/no)?と聞かれるのでyesと入力してEnter

初期設定用シェルスクリプト

参考:公式のクイックスタート(https://docs.docker.com/compose/wordpress/

以下の内容を vi init_setting.sh で作成して
sh ./init_setting.sh 2>&1 | tee init_setting.log で実行する
※別にシェルにせずに1行1行打ち込んでも出来ます。手間なのでシェル化してるだけです。
公式のバージョン(https://github.com/docker/compose/releases
※2.xはインストール方法が異なるので注意

init_setting.sh
#!/bin/bash

# Docker install
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) \
 stable"
sudo apt-get install -y docker-ce
sudo docker version

## Docker Compose install
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
sudo chmod +x /usr/local/bin/docker-compose
sudo docker-compose --version

## Docker sudo 不要にする
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo systemctl restart docker

2分くらいで終わります
有効化するために1度ログアウトして再ログインしてください(exit
再ログイン後はdockerコマンドにsudoが不要になります。
→そのはずでしたが、今改めて確認するとそんなことないっぽいです。
 以下、全てsudo su -でrootユーザになった状態で実行してください。(2022/3/9追記)

スワップ領域を増やす

そのままでも一応起動はできるのですが、t2.microインスタンスだとMySQLの容量がギリギリなのでたまにメモリ不足で落ちてしまうことがありました。
スワップ領域を増やすことで対応します。

free
dd if=/dev/zero of=/swapfile1 bs=1M count=512
chmod 600 /swapfile1
mkswap /swapfile1
swapon /swapfile1
free

参考:WordPressのサーバがメモリ不足で落ちたので、SWAP領域を追加して応急処置

Wordpress 作成

mkdir my_wordpress
cd my_wordpress/

uploads.ini作成

以下の内容をvi uploads.iniで保存する
デフォルトだとテーマの新規登録のzipアップロードで2MB以上はエラーになるのでそれを回避するためです。

file_uploads = On
memory_limit = 64M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 600

参考:https://github.com/docker-library/wordpress/issues/10

docker-compose.yml作成

以下の内容をvi docker-compose.ymlで保存する
これは公式のクイックスタート(https://docs.docker.com/compose/wordpress) から以下3点を変更したものです。

  1. restart: alwaysの行を削除
  2. ポートを8000から80に修正
  3. volumes追加
    このままでも実行できますがパスワードなどは変えておきましょう
docker-compose.yml
version: '3.3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    ports:
      - "3306:3306"

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    ports:
      - "80:80"
      - '443:443'
    volumes:
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
volumes:
    db_data: {}

公式だと以下のコマンドはないですが、これがないとエラーになるので実行しましょう
sudo rm -rf ~/dev/dbs-data/mysql/*
(参考:https://github.com/docker-library/mysql/issues/275)

最後にdocker-composeを実行します。

docker-compose up -d
docker ps -a

あとは1分くらい待った後ブラウザからhttp://111.222.333.444にアクセスすればWordPressのトップページが開けるはずです。
※111.222.333.444は適時自分のIPアドレスに変えてください

もし何かエラー出たらコメントか編集リクエストください〜

ちなみにこの後固定IPアドレス取得とドメイン紐付けは以下の記事が分かりやすかったです。
ご参考まで
Elastic IP アドレスの設定とRoute 53から独自ドメインの割り当て方法

ではでは。

2020/11/20 追記

1年くらいしたらディスク容量がいっぱいになってしまいました
以下の記事の通りに対応したら解決しました

# 容量確認
sudo du -h -d 1 /usr/src/
# 不要ファイル削除
sudo apt autoremove -f

参考:Ubuntuの古いカーネルがディスクを圧迫するときの対処法

10
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?