LoginSignup
0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

[Wordpress•Docker•さくらVPS]Wordpressをモダンな技術でデプロイしてみた

Posted at

最初に

このやり方はいかに現代のweb技術を使ってwebで作成•デプロイまで行けるかを考えて作成しました。

Wordpressを使い慣れている方はローカルで作成してFTPで本番にあげてしまうのがめっちゃ簡単、

自分にとって現代webとは

  • Git, Github等のバージョン管理ツール
  • Docker等のコンテナツール
  • VPSを使ってデプロイ
    ...etc

いろいろありますが、最低限この3つは使いたいなぁと思っています。

環境設定

カレントディレクトリに作成

docker-compose.yml

version: "3.7"
services:
   wordpress:
      image: wordpress:latest
      container_name: wordpress
      depends_on:
         - db
      environment:
         WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号
         WORDPRESS_DB_USER: '${DB_USER}' # WordPress用データベース接続ユーザ名(dbの内容に合わせる)
         WORDPRESS_DB_PASSWORD: '${DB_PASSWORD}' # WordPress用データベース接続パスワード(dbの内容に合わせる)
         WORDPRESS_DB_NAME: '${DB_NAME}' # WordPress用データベース名(dbの内容に合わせる)
      volumes:
         - ./html:/var/www/html
      networks:
         - myappnet
 
   db:
      image: mysql:8.0
      container_name: mysql
      environment:
         MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' # rootユーザのパスワード
         MYSQL_DATABASE: '${DB_NAME}' # WordPress用データベース名
         MYSQL_USER: '${DB_USER}' # WordPress用データベース接続ユーザ名
         MYSQL_PASSWORD: '${DB_PASSWORD}' # WordPress用データベース接続パスワード
      volumes: 
         - db_data:/var/lib/mysql
      networks:
         - myappnet

   phpmyadmin:
      image: phpmyadmin/phpmyadmin:latest
      container_name: phpmyadmin_ingrid
      depends_on:
         - db
      volumes:
         - ./phpmyadmin/phpmyadmin-misc.ini:/usr/local/etc/php/conf.d/phpmyadmin-misc.ini
      networks:
         - myappnet

volumes:
   wordpress:
   db_data:

networks:
  myappnet:
    driver: bridge

ビルドコマンド

docker-compose build
docker-compose up -d

htmlのファイルが生成されるので、そのファイル内のhtmlを修正して開発していくイメージです

気をつけること

1.wordpressのdocker imageが癖ありすぎる

dockerhubのimage説明です。

引用

静的イメージ / 再デプロイによる更新
このイメージのデフォルト設定は、自動更新が有効になっている公式の WordPress デフォルトと一致します (したがって、最初のインストールはイメージから行われますが、その後は/var/www/html/データ ボリューム内で自己管理されるようになります)。

となっていいてボリューム内で自己完結してしまいます。
つまり、ボリュームを使って環境を構築しているので、場合によっては過去のボリュームを使ってdbの接続などが失敗してしまいます。

なので以下のコマンドを使います

docker-compose stop
docker-compose build --no-cache

キャッシュを使うと

Error Establishing a Database Connection

このようなエラーが出てしまいます。

テーマやプラグインを使う場合はimageの説明にも書いてある通り追加でDockerflieを読み込ませる必要があったります。

2.wordpress ssl設定するにはリバースプロキシかまさないといけない🥺

docker-imageのwordpressにはApacheがすでに入っていて、それを使ってssl設定を行うことはできないです。
ですのでリバースプロキシでnginxをかましてnginxでSSLを設定する必要があります。

参考サイト
https://wa3.i-3-i.info/word1755.html

version: "3.7"
services:
   proxy:
      image: jwilder/nginx-proxy
      privileged: true
      ports:
         - 80:80
         - 443:443
      volumes:
         - ./data/docker-compose.d/certs:/etc/nginx/certs:ro
         - /etc/nginx/vhost.d
         - /usr/share/nginx/html
         - /var/run/docker.sock:/tmp/docker.sock:ro
      restart: always
      networks:
         - myappnet


   letsencrypt-proxy:
      image: jrcs/letsencrypt-nginx-proxy-companion
      privileged: true
      volumes:
         - ./data/docker-compose.d/certs:/etc/nginx/certs:rw
         - /var/run/docker.sock:/var/run/docker.sock:ro
      volumes_from:
         - proxy

   wordpress:
      restart: always
      environment:
         WORDPRESS_DEBUG: 0 # デバッグモードOFF
         VIRTUAL_HOST: "example.com"
         VIRTUAL_PORT: 80
         LETSENCRYPT_HOST: "example.com"
         LETSENCRYPT_EMAIL: '${OWNER_EMAIL_ADDRESS}'
      networks:
         - myappnet
  1. テーマを使わない

テーマ内の修正はDBで管理しているので、バージョン管理ツールで追えないので。ローカルと本番環境にDBごと移さないと変更が反映されず運用しにくいです。

まとめ

gitやdockerを使ってデプロイ自体はできますが、現状はFTPでデプロイした方が楽です。

また一から作れるのであれば極力テーマは使わない方がいいです。

0
0
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
0
0