Help us understand the problem. What is going on with this article?

DockerでWordPressサーバのイメージを作る

More than 3 years have passed since last update.

やること

CentOS7+php7+nginx+php-fpmからなるWordPressサーバのイメージを作る。

作り方は色々あるが、centOSのイメージから構築していく。

開発環境

  • Docker(1.13.1)
  • CentOS7

1. 事前準備

とりあえず自分の環境がDocker Hubにあるので持ってくる

$ sudo docker pull shinch13/env-centos7

pullできてるか確認する

$ sudo docker images
  REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
  shinch13/env-centos7               latest              82582712e551        9 days ago          545 MB

特権モードで実行する。(これをしないと、systemctlコマンドが使えなかった)
また、ホスト側のポートの8080番をコンテナ側の80番にリダイレクトされるようにする。

$ sudo docker run --privileged -d -p 8080:80 shinch13/env-centos7 /sbin/init
825
$ sudo docker ps
  CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS                  NAMES
  f7a17614fadd        shinch13/env-centos7          "/sbin/init 280"    48 minutes ago      Up 48 minutes       0.0.0.0:8080->80/tcp   keen_snyder

execでコンテナ内へ

$ sudo docker exec -it f7a /bin/zsh

epelリポジトリの追加

$ yum -y install epel-release
$ vim /etc/yum.repos.d/epel.repo
  [epel]部分の「enabled=1」を「enabled=0」に変更する

remiリポジトリの追加

$ rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
$ rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

epelはエンタープライズ向けで信頼性が高く、remiは最新バージョンのパッケージが豊富らしい。。。

2. nginx,WordPressの設定

epelリポジトリを使用して、nginxをインストールする

$ yum install --enablerepo=epel nginx

wordpressをインストールするディレクトリを作成

$ mkdir -p /usr/share/nginx/wordpress

nginxの権限でこのファイルにアクセスできるように所有者を設定

chown (ユーザ):(グループ)

$ chown nginx:nginx /usr/share/nginx/wordpress

WordPressをダウンロードする

$ cd /usr/share/nginx/wordpress
$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ tar xzfv latest-ja.tar.gz

解凍したファイルの所有者を同様に変更

$ chown -R nginx:nginx wordpress

バーチャルホストとしてwordpressを動作させるために、nginxの設定ファイルを編集

$ cd /etc/nginx/conf.d
$ vim wordpress.conf
wordpress.conf
server {
  listen 80;
  root /usr/share/nginx/wordpress;
  index index.php;

  charset utf-8;

  # wordpress パーマリンク設定
  try_files $uri $uri/ /index.php?q=$uri&$args;

  # wp-config.phpへのアクセス拒否設定
  location ~* /wp-config.php {
    deny all;
  }

  # php-fpm用設定
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
  }
}

設定ファイルが正しい構文かをチェックする

$ nginx -t

nginxを起動する

$ systemctl start nginx

nginxをデーモン化(常駐起動)する

$ systemctl enable nginx

3. php7,php-fpmの設定

php7はCentOSの公式リポジトリにないので、remiリポジトリを使用してインストール

ついでに、php-fpmなどもインストール

$ yum install --enablerepo=epel,remi-php70 php php-mbstring php-pear php-fpm php-mcrypt php-mysql

php7の確認

$ php -v
  PHP 7.0.2 ----

php-fpmの実行ユーザは初期設定ではapacheになっているので、nginxに設定する

$ cd /etc/php-fpm.d/
$ cp -p www.conf www.conf_yyyymmdd    ← バックアップ
$ vim www.conf
www.conf
---省略---
user = nginx
group = nginx

php-fpmを起動する

$ systemctl start php-fpm

php-fpmをデーモン化(常駐起動)する

$ systemctl enable php-fpm

4.MariaDBの設定

MariaDBインストール

$ yum install mariadb mariadb-server

MariaDBを起動する

$ systemctl start mariadb

mariaDBをデーモン化(常駐起動)する

$ systemctl enable mariadb

WordPressで使用するためのデータベース設定

$ mysql -uroot

# rootユーザのパスワード(password)を設定する
> set password for root@localhost=password('password');
Query OK, 0 rows affected (0.00 sec) 

# wordpress用のDB(wordpress)を作成する
> create database wordpress character set utf8;
Query OK, 1 row affected (0.00 sec)

# 作成したDBに接続するユーザ(ユーザ名:wpuser,パスワード:wppassword)を作成する
> grant all privileges on wordpress.* to wpuser@localhost identified by 'wppassword';
Query OK, 0 rows affected (0.00 sec)

# 設定を反映させる
> flush privileges;
Query OK, 0 rows affected (0.00 sec)

# 終了
> quit
Bye

WordPressとMariaDBの接続設定

データベースの情報とをwp-configに記述する

また、https://api.wordpress.org/secret-key/1.1/salt/から秘密鍵を自動生成できるので、それを記述して認証用のユニークキーを設定する

$ cd /usr/share/nginx/wordpress/
$ cp wp-config-sample.php wp-config.php  
$ vim wp-config.php  #設定を変更する
---省略---
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'wpuser');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'wppassword');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

---省略---
define('AUTH_KEY',         'L xv>t<S$6|a+OHwxq5`C8S.!2;z|P^T:&u^blaa|*uY5 a}x:Y>pWJVN!M$_wZ@');
define('SECURE_AUTH_KEY',  '4B!l[$Aiz zEGu(|=h6dYIDJR;eNeUgCaGoIy4i(.N@YO6A=P;^EIh|T!sCS9x1X');
define('LOGGED_IN_KEY',    ' z/1j8<l wE1eBZ(@+0`yr(BK0&&zPp8$3pyJn.-{W^qoj)Z+GG-0 r%^C65m8iY');
define('NONCE_KEY',        '*4-:5wjE9VL4JK=3GG/Dw:/VEl-vdnmHn[kJe{@X3AujV}rqXYjoIrVs-},|;_z|');
define('AUTH_SALT',        'Gh_YZrAIa<, +2P7jTVEisx4(@2#5pIw~X5+FiO^/q8=<4^%*wLkYBT#%l0b/y{g');
define('SECURE_AUTH_SALT', 'm$V1,lNWo<z] lAAm1mj6k*^P`;q^WVc76<I{E`WXlGgD8>Edo%d#qK9%8DxTzp[');
define('LOGGED_IN_SALT',   '-JS@,8_u0Qt}}+PZ1-v4]% [7(9|(2Mpw*{6)>BlQ+]|GOf8PwRxTJ)/P~R3u?Ve');
define('NONCE_SALT',       '+%*z+YyLHVQd!)Hg?^QL90|B?5c|Yx_dD~OwxZH!cg0OF[-NA4~rm) XPn+!{y^Y');

5.動作確認

192.168.33.17:8080/wp-admin

にアクセスする

スクリーンショット 2017-03-02 1.34.13.png

これが表示されればOK!!

必要情報を設定すると、wordpressのログイン画面が表示されます。

6.コンテナをcommit,イメージをpushする

コンテナから抜ける

$ exit

プロセスを切る

$ sudo docker ps
  CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS                  NAMES
  f7a17614fadd        shinch13/nginx-wordpress-centos7   "/sbin/init 280"    About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp   keen_snyder

$ sudo docker kill f7a

コンテナをcommitする

$ sudo docker ps -a -n 1
  CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS                       PORTS               NAMES
  f7a17614fadd        shinch13/nginx-wordpress-centos7   "/sbin/init 280"         About an hour ago   Exited (137) 8 seconds ago                       keen_snyder

$ sudo docker commit f7a shinch13/nginx-wordpress-centos7

Docker hubにpushする

$ sudo docker images
  REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
  shinch13/nginx-wordpress-centos7   latest              2e5ced91e74d        7 seconds ago       955 MB

$ sudo docker push shinch13/nginx-wordpress-centos7

7.まとめ

これで必要な時に

$ sudo docker pull shinch13/nginx-wordpress-centos7

をすればwordpressサーバを立てられる!!

参考サイト

http://www.server-memo.net/memo/wordpress/nginx-install.html
http://blog.higty.xyz/archives/231/#起動設定

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした