やること
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
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
---省略---
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
にアクセスする
これが表示されれば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/#起動設定