WordPressでブログ・ホームページを作る (Docker)
WordPress(ワードプレス)は、コーディングなしでブログやホームページを作れるプログラムです。Docker ComposeでWordPressとDBを一度に立ち上げ、ドメインとHTTPSまで接続する方法です。
準備するもの
- メモリ2GB以上のサーバー(Ubuntu)
- ドメイン(サーバーのIPに接続しておく — Webサイトを立ち上げるの「ドメインを接続する」)
- Docker(Dockerのインストールと使い方)
1. 設定ファイルを作る
mkdir ~/wordpress && cd ~/wordpress
nano compose.yaml
次の内容を貼り付け、2つのパスワードをそれぞれ長く複雑な値に変更します。(db-passwordは2か所に同じ値)
services:
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_DATABASE: wordpress
MARIADB_USER: wordpress
MARIADB_PASSWORD: db-password
MARIADB_ROOT_PASSWORD: root-password
volumes:
- db:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: unless-stopped
depends_on:
- db
ports:
- "127.0.0.1:8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: db-password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp:/var/www/html
volumes:
db:
wp:
DBはポートをまったく開けておらず、WordPressは
127.0.0.1にだけ接続しています。外部からは、下のNginxを通してのみアクセスできます。
docker compose up -d
2. Nginxでドメインを接続
Nginxがない場合はインストールします。(sudo apt install -y nginx)
sudo nano /etc/nginx/sites-available/example.com
example.comを自分のドメインに置き換えて入力します。
server {
listen 80;
server_name example.com www.example.com;
client_max_body_size 64M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
3. HTTPSの適用
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
ファイアウォール(ufw)を使っている場合は、80・443を開けておきます。(ファイアウォールのポートを開ける)
4. WordPressのインストール画面
ブラウザーでhttps://my-domainにアクセスすると、言語の選択画面が表示されます。韓国語を選び、サイトのタイトル、管理者のID・パスワードを決めれば完了です。管理画面はhttps://my-domain/wp-adminです。
インストール画面は、最初にアクセスした人が進められます。ステップ3まで終えたら、すぐにインストールを完了してください。
管理のヒント
- アップデート: WordPress本体・テーマ・プラグインは、管理画面からアップデートします。古いプラグインはハッキングの最も多い原因なので、使っていないプラグインは削除してください。
- バックアップ: 投稿と設定はDBに、アップロードした画像とテーマは
wpボリュームにあります。バックアッププラグインを使うか、次のようにDBをエクスポートしておきます。
cd ~/wordpress
docker compose exec db mariadb-dump -u root -p wordpress > wp-db-$(date +%F).sql
(rootのパスワードを聞かれます)ダウンロードの方法は、サーバーのデータをバックアップするを参考にしてください。
うまくいかないとき
- 502 Bad Gateway —
docker compose psで、コンテナが実行中か確認してください。 - 「Error establishing a database connection」 —
compose.yamlの2つのdb-passwordが同じか確認してください。初回の実行後にパスワードを変更した場合、DBには以前の値が残っています。 - HTTPSの適用後に画面が崩れたり、アクセスが繰り返されたりします — Nginxの設定に
X-Forwarded-Protoの行があるか確認してください。