3分でdocker使ってWordPressを立ち上げる with NGINX

先の記事では、1分でWordpressを立ち上げると題して、WordpressとMysqlコンテナの立ち上げとデータの永続化を実施しました。

今回はwebサーバーのNGINXコンテナも入れたいと思います。

前記事より作業ステップが多くなるので、3分で立ち上げる、としています。

ステップが多くなると言いましても、
1. docker-compose.ymlを作成
2. NGINXの設定ファイル(nginx.conf, conf.d/default.conf)を作成

設定はこれだけで、あとはdocker-compose up -dで起動です。

超簡単ですので、ご安心を

1. docker-compose.ymlを作成

まずは、homeディレクトリの下などお好きな所に、今回立ち上げるwordpressに付けたい名前でディレクトリを作ってください。
そして、そのディレクトリの直下にdocker-compose.ymlを作ってください。
私の場合だと以下のコマンドでディレクトリとdocker-compose.ymlファイルを作りました。

$ cd /home/royozaki
$ mkdir royozakiapp
$ cd royozakiapp
$ touch docker-compose.yml

次はdocker-compose.ymlを編集します。
まず、viでdocker-compose.ymlを開いて、

$ vi docker-compose.yml

以下の内容をコピペします。

version: '3.3'


services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: お好きなパスワード
       MYSQL_DATABASE: wordpress
       MYSQL_USER: お好きなユーザー
       MYSQL_PASSWORD: お好きなパスワード

   wordpress:
     depends_on:
       - db
     image: wordpress:5.2.4-fpm-alpine
     restart: always
     volumes:
       - ./wordpress:/var/www/html
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: お好きなユーザー
       WORDPRESS_DB_PASSWORD: お好きなパスワード
       WORDPRESS_DB_NAME: wordpress
    
   nginx:
     image: nginx:1.16.1-alpine
     ports:
       - '3000:80'
     volumes:
       - ./nginx/nginx.conf:/etc/nginx/nginx.conf
       - ./nginx/conf.d:/etc/nginx/conf.d
       - ./nginx/log:/var/log/nginx
       - ./wordpress:/var/www/html
     depends_on:
       - wordpress
     links:
       - wordpress
     restart: always
       
volumes:
    db_data: {}

以上で、ステップ1は完了

2. NGINXの設定ファイル(nginx.conf, conf.d/default.conf)を作成

次に、NGINX用の設定ファイルを作成します。

$ pwd
/home/royozakiapp
$ mkdir nginx
$ cd nginx
$ touch nginx.conf
$ mkdir conf.d
$ cd cond.d
$ touch default.conf

NGINXの設定ファイルの作成は完了しましたので、編集していきます。

まずは、以下の内容をnginx.confをviで開いて、以下をコピペしてください。

 user nginx;
 worker_processes auto;
 

 error_log /var/log/nginx/error.log warn;
 pid /var/run/nginx.pid;
 

 events {
   worker_connections  1024;
 }
 

 http {
   include /etc/nginx/mime.types;
   default_type  application/octet-stream;
 

   include /etc/nginx/conf.d/*.conf;
 }

次に、conf.d/default.confを編集します。

 server {
   listen 80;
   server_name 127.0.0.1;
 

   root /var/www/html;
   index index.php;
 

   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log;
 

   location / {
     try_files $uri $uri/ /index.php?$args;
   }
 

   location ~ \.php$ {
     try_files $uri =404;
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     fastcgi_pass wordpress:9000;
     fastcgi_index index.php;
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     fastcgi_param PATH_INFO $fastcgi_path_info;
   }
 } 

以上で、設定は完了です。
それではアプリケーションディレクトリに戻って、起動しましょう。

$ cd /home/royozakiapp
$ docker-compose up -d 

起動したか、ステータスをみてみましょう。

 $ docker-compose ps
           Name                        Command              State          Ports        
 ---------------------------------------------------------------------------------------
 royozakiapp_db_1          docker-entrypoint.sh mysqld    Up      3306/tcp, 33060/tcp 
 royozakiapp_nginx_1       nginx -g daemon off;           Up      0.0.0.0:3000->80/tcp
 royozakiapp_wordpress_1   docker-entrypoint.sh php-fpm   Up      9000/tcp      

コンテナが3つともStatus Upとなっていますね。
以上で立ち上げ完了です。
お疲れ様でした。

なお、今回使っているwordpressのイメージがlatestでなく、そしてNGINXのイメージがstableでないことに気づいた方はいらっしゃいましたか?

以下は参考情報です。不要な方は見なくていいです。

wordpress:latest, nginx:stableだと、コンテナはうまく立ち上がるのですが、ブラウザアクセスすると502 Bad Gatewayでうまくいきませんでした。

もちろん、ログもみますよね

$ tail -f /home/royozakiapp/nginx/log/error.log

そしたら、以下の記述が

  2019/11/20 00:27:56 [error] 9#9: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: 127.0.0.1, request: "GET / HTTP/1.1", upstream: "fastcgi://172.20.0.3:9000", host: "localhost:3000"
 2019/11/20 00:27:57 [error] 9#9: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: 127.0.0.1, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://172.20.0.3:9000", host: "localhost:3000", referrer: "http://localhost:3000/" 

色々調べたらfastcgiらへんが原因だそうでした。

ですので、今回は以下のバージョンを使っています。

wordpress image: wordpress:5.1.1-fpm-alpine
nginx image: nginx:1.15.12-alpine

Please share this page:

コメントを残す