はじめに
非エンジニア(デザイナー)でもWordpressをローカルで制作したいので常時SSLでPHP7なWordpress環境を構築してみる。単にWordpressを動かすのならVCCWやScotch Boxみたいな素晴らしいものもあるけど、今回は勉強も兼ねて出来るだけ自作してみようと思う。
自分の環境
Windows10
VirtualBox バージョン 5.1.28 r117968 (Qt5.6.2)
$ vagrant -v
Vagrant 2.0.0
必要なもの
これは必須なので各自PCにインストール
- Vagrant
- VirtualBox
Vagrantについて
今回はサーバーのセットアップについて詳しくまとめたいので、Vagrantについては下記を参考に
https://qiita.com/kidach1/items/e63c1607705178aa257c
コマンドライン/ターミナル
WindowsのPowershellでもいいし、Macのターミナルでも良い。
でもConEmuやiTermなんかだともっと捗るかと思う。
STEP.1 Vagrantの準備と立ち上げまで
まずは作業用フォルダを作成して移動
mkdir sample
cd sample
boxを追加
boxは公式のVagrant CloudからCentOS6.4を選択。
本当はCentOS7xを利用したかったが、どうも公式のboxはGuest Additionsがなかったり、Private keyのエラーが出たりと、中々安定しなかったので、枯れたCentOS6を選択。この辺りは今後の課題としたい。
ちなみにboxのダウンロードはそこそこ時間がかかるのでコーヒーでも飲んで待とう。
$ vagrant box add puppetlabs/centos-6.6-64-puppet
Vagrantfileの作成
デフォルトのVagrantfileを作成
$ vagrant init
Vagrantfileの編集
Vagrantfileに先程DLしたboxの情報など記入する
#15行目にboxを記入
config.vm.box = "puppetlabs/centos-6.6-64-puppet"
#35行目のコメントアウトを外す。192.168.33.10でアクセス出来るようにする。
config.vm.network "private_network", ip: "192.168.33.10"
#46行目にサーバーのドキュメントルートと同期するフォルダやオプションを記入
config.vm.synced_folder "public", "/var/www/", create: true, owner: 'vagrant', group: 'vagrant', mount_options: ['dmode=777,fmode=666']
#52-58のコメントアウトを外し有効メモリを1Gに設定。vb.gui = trueはデバッグ用にVMが自動で立ち上がるので今回はfalseに。
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = false
# Customize the amount of memory on the VM:
vb.memory = "1024"
end
CentOS6.4の起動
$ vagrant up
ここまでで一旦vagrantが立ち上がり、CentOS6.4が起動するところまで出来た
STEP.2 サーバーのインストールと設定
ここからApacheやPHPをインストールをしていく
ルートフォルダを作る
Vagrantfileで設定したドキュメントルートと同期するフォルダを作る。
ここが最終的にhttps://192.168.33.10のルートになる。
$ mkdir public
ここからSSHで設定していく
$ vagrant ssh
[vagrant@localhost ~]$
# rootでログイン
[root@localhost vagrant]$ sudo su
# selinuxを無効化する
[root@localhost vagrant]$ sed -i -e "s/SELINUXTYPE=targeted/SELINUXTYPE=disabled/" /etc/selinux/config
[root@localhost vagrant]$ setenforce 0
# iptablesを無効にする
[root@localhost vagrant]$ /sbin/service iptables stop
[root@localhost vagrant]$ /sbin/chkconfig iptables off
#Apacheをインストールして開始
[root@localhost vagrant]$ yum -y install httpd
[root@localhost vagrant]$ /etc/init.d/httpd start
この時点でhttp://192.168.33.10にアクセスするとApacheのテストページが見れるはず。
どんどんセットアップしていきましょう。
# 後のPHPのインストールのためにEPELとRemiリポジトリを追加
[root@localhost vagrant]$ yum -y install epel-release
[root@localhost vagrant]$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# php 7.1をインストール
[root@localhost vagrant]$ yum -y remove php-*
[root@localhost vagrant]$ yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-mcrypt php-gd php-xml php-intl php-pear php-mysql
# ちゃんとインストール出来たか、phpのバージョンを確認
[root@localhost vagrant]$ php -v
PHP 7.1.10 (cli) (built: Sep 27 2017 08:42:15) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
# mod_sslのインストール
[root@localhost vagrant]$ yum -y install mod_ssl
ここからはviコマンドで設定ファイルを変更します。
vi [触るファイル]
この機会によく使うコマンドは覚えましょう。
# 検索
/[検索する文字列]
# インサートモード
i
# インサートモードの終了
Esc
# 保存しないで終了
:q!
# 保存して終了
:wq
各種設定ファイルを変更
# ドキュメントルートの設定を変更
DocumentRoot "/var/www"
<Directory "/var/www">
# CSSが反映しない場合があるのでOFFに
EnableSendfile off
#httpからhttpsへリダイレクトするように。一番下部に追記。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
# これをOnにしとかないとphpinfo()が真っ白になっちゃったよ...
short_open_tag = On
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
Apacheの再起動と自動起動を設定
ついでにApacheのインストールで出来た不要なフォルダを消しておきましょう
[root@localhost vagrant]$ /etc/init.d/httpd restart
[root@localhost vagrant]$ /sbin/chkconfig httpd on
# 不要ファイル削除
[root@localhost vagrant] rm -rf /var/www/cgi-bin
[root@localhost vagrant] rm -rf /var/www/html
[root@localhost vagrant] rm -rf /var/www/error
[root@localhost vagrant] rm -rf /var/www/icons
ここで一度phpinfo();を出力してPHPが問題なく動作しているかとhttpsでアクセス出来るか、リダイレクトが動作しているかを確認してみる。
[root@localhost vagrant]$ vi /var/www/info.php
<? phpinfo(); ?>
ここでhttp://192.168.33.10/info.phpにアクセスするとPHP Version 7.1.10と表示されhttpsにリダイレクトされればOKです。
STEP.3 WordpressとMySQLのインストール
WordpressはWP-CLIを利用する
# WP-CLIのインストール。公式のとおりに。
[root@localhost vagrant]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
[root@localhost vagrant]$ chmod +x wp-cli.phar
[root@localhost vagrant]$ mv wp-cli.phar /usr/local/bin/wp
# ルートユーザーでWordpressをインストール(パスを通すかrootから抜けて実行でも可能)
[root@localhost vagrant]$ sudo -u vagrant -i -- wp core download --locale=ja --path=/var/www/
# MySQLのインストール
[root@localhost vagrant]$ rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
[root@localhost vagrant]$ yum -y install mysql-community-server
MySQLのパスワードを変更する
MySQLの設定(my.cnf)を変更
[mysqld]
default_password_lifetime = 0
character-set-server=utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
[mysql]
default-character-set=utf8
MySQLの立ち上げ(--skip-grant-tablesオプションあり)
# 設定ファイルの所有権を変更
[root@localhost vagrant]$ chmod 644 /etc/my.cnf
# パスワードを回避してMySQLを開始
[root@localhost vagrant]$ service mysqld start --skip-grant-tables
[root@localhost vagrant]$ mysql
仮パスワードに変更する
mysql> use mysql;
mysql> UPDATE user SET authentication_string=password('root') WHERE user='root';
mysql> CREATE DATABASE wordpress;
mysql> flush privileges;
mysql> quit
MySQLを再起動と自動起動を設定
[root@localhost vagrant]$ service mysqld restart
[root@localhost vagrant]$ chkconfig mysqld on
STEP.4 Wordpressの設定と構築完了まで
先程設定した仮パスワードで再度ログイン
# パスワードを聞かれるので「root」でログインする
[root@localhost vagrant]$ mysql -u root -p
パスワードのルールが厳しいので緩くする
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
mysql> set password for root@localhost=password('root');
mysql> flush privileges;
mysql> quit
MySQLのパスワード変更がややこしいが、これはデフォルトパスワードがlogに記載されているのを回避するためと、パスワードのvalidate_password_policyが高いのでlowに変更する手順を踏んでいるため。この辺りも今後の課題としたい。
WP-CILを利用してDBの設定とwp-configを設定
#wp-config.phpの生成
sudo -u vagrant -i -- wp core config --dbname='wordpress' --dbuser='root' --dbpass='root' --dbhost='localhost' --path='/var/www/'
#dbの作成
sudo -u vagrant -i -- wp core install --url='https://192.168.33.10' --title='Sample Wordpress' --admin_user='root' --admin_password='root' --admin_email='admin@email.jp' --path=/var/www/
これで下記で管理画面に入ることが出来る
ログイン | https://192.168.33.10/wp-login.php |
---|---|
ユーザー名 | root |
パスワード | root |
データベース | MySQL |
---|---|
サーバー | localhost |
ユーザー名 | root |
パスワード | root |
データベース | wordpress |
自動化
これまでのコマンドをまとめてシェルスクリプトにして、vagrant up
の時に実行されるようにまとめてみた。
provisonってすごく便利ですね。
ただ、STEP.4以降が結局vagrant ssh
して手動でやらないと行けないので、もう少しMySQLを勉強して完全に自動化したい。-eオプションでうまく行かず...
課題
- やはりCentOS7を利用したい
- WP-CLIとMySQLのをもう少しなんとかしたい。
- nginx(php-fpm)対応版とかもやってみたい。
- いろいろきっと無駄が多い...
- そしてセキュリティ...