Dockerを使ってwordpressを構築
スピーカ
環境
- APサーバ:Docker on CentOS7(minimal) (10.1.110.1/16)
- DBサーバ:CentOS7(minimal) (10.1.110.2/16)
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+P
⇒ Ctrl+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
以上。