Dockerを使ってwordpressを構築

スピーカ

barson

環境

  • APサーバ:Docker on CentOS7(minimal) (10.1.110.1/16)
  • DBサーバ:CentOS7(minimal) (10.1.110.2/16)

overview.png

APサーバーでの操作

  • カーネルのバージョンを確認 
uname -a
Linux localhost.localdomain 3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@localhost barson]#

カーネルのバージョンが「3.10.0-693.21.1.el7.x86_64」未満だとdockerの起動ができない(overlay2が対応していない)のでアップデートが必要・

sudo yum update reboot

yum updateをかけなかった(・ Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)場合 /etc/sysconfig/docker-storageの内容を編集する

DOCKER_STORAGE_OPTIONS="--storage-driver devicemapper "
  • Dockerのインストール 
sudo yum -y install epel-release sudo yum -y install docker-io
  • Dockerイメージを取得する。
sudo docker pull centos
  • サービスのデプロイ (APサーバ)
sudo systemctl start docker sudo systemctl enable docker
  • Dockerに権限を与えかつ80番ポートを開放する。                                   
sudo docker run -d --privileged -p 80:80 --name wordpress centos /sbin/init sudo docker exec -it wordpress /bin/bash

パッケージのインストール

APサーバ上のDockerコンテナ内での操作

  • Apacheのインストール
yum install -y httpd
  • phpのインストール
yum install -y php php-mbstring php-mysql
  • サービスの開始
systemctl start httpd systemctl enable httpd

DBサーバでの操作

MariaDBのインストール

sudo yum install -y mariadb-server

サービスの開始

sudo systemctl start mariadb sudo systemctl enable mariadb

セキュリティの設定

  • パスワード設定
  • 不要な権限の削除
sudo mysql_secure_installation

以下のように表示される。                                

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!

SQLによるDatabaseに対する権限付与

mysql -u root -p
SHOW DATABASES; CREATE DATABASE [任意のデータベース名]; SHOW DATABASES; GRANT ALL PRIVILEGES ON [任意のデータベース名].* TO "[任意のユーザー名]"@"localhost" IDENTIFIED BY "任意のパスワード"; FLUSH PRIVILEGES; EXIT

MariaDBにrootでアクセス

mysql -u root -p

現在のデータベースの確認

SHOW DATABASES;

「wordpress」というデータベースを作成

CREATE DATABASE wordpress;

ユーザの確認

select user,host from mysql.user;

ユーザの作成&権限付与

GRANT ALL PRIVILEGES ON wordpress.* TO "barson"@"10.1.110.1" IDENTIFIED BY "パスワード";

ユーザの権限確認

show grants for barson;

MariaDBから出る

exit

WordPressの構築 (APサーバ)

wgetパッケージのインストール

yum install -y wget

WordPressのパッケージを取得

wget https://ja.wordpress.org/wordpress-4.9.4-ja.tar.gz

パッケージを展開

tar zxvf wordpress-4.9.4-ja.tar.gz

公開ディレクトリにコピー

sudo cp -R wordpress/* /var/www/html/wordpress
  • Dockerコンテナから抜ける

コンテナ上で、Ctrl+PCtrl+Qと押すとホストOS(ここではAPサーバ)に戻る

ファイアウォールの設定(APサーバ)

設定の確認

sudo firewall-cmd --list-all
\public (active) target: default icmp-block-inversion: no interfaces: ens32 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

公開ディレクトリの所有者.グループをhttpd(Apache)に変更

sudo chown -R apache.apache /var/www/html/wordpress

ファイアウォールの設定(DBサーバ)

MariaDBの通信ポート(TCP3306番)を開放

firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload

設定の確認

firewall-cmd --list-all
public (default, active) interfaces: eno16780032 sources: services: dhcpv6-client ssh ports: 3306/tcp masquerade: no forward-ports: icmp-blocks: rich rules:

Dockerの保存(APサーバ)

docker commit `docker ps -aq` docker.io/wordpress

あとはwebブラウザからAPサーバ(10.1.110.1)にアクセスして設定を行う。

[追記] (2018/04/29)

SELinuxの設定

WEBサービス経由でDBにアクセスできるようにします。

setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect=on

WEBサービスからwp-configに書き込めるようにする。

  • manageを導入
yum provides */semanage
yum install policycoreutils-python
  • 参照権限の付与
semanage fcontext -a -t httpd_sys_content_t "/var/www/html/wordpress/wp(/.*)?"
restorecon -R -v /var/www/html/wprdpress
  • 書き込み権限の付与
restorecon -R -v /var/www/html/wordpress/wp-content
setsebool -P allow_ftpd_full_access 1

以上。

関連記事