PHP
CentOS
vagrant
designer

非エンジニアでも自力でローカルでWordpress環境を構築したい

More than 1 year has passed since last update.


はじめに

非エンジニア(デザイナー)でもWordpressをローカルで制作したいので常時SSLでPHP7なWordpress環境を構築してみる。単にWordpressを動かすのならVCCWScotch 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のターミナルでも良い。

でもConEmuiTermなんかだともっと捗るかと思う。


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の情報など記入する


Vagrantfile

#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


各種設定ファイルを変更


/etc/httpd/conf/httpd.conf

# ドキュメントルートの設定を変更

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>



/etc/php.ini

# これを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


/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)を変更


/etc/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>

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>

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ってすごく便利ですね。

https://github.com/hanuman6/vagrant-wordpress

ただ、STEP.4以降が結局vagrant sshして手動でやらないと行けないので、もう少しMySQLを勉強して完全に自動化したい。-eオプションでうまく行かず...


課題


  • やはりCentOS7を利用したい

  • WP-CLIとMySQLのをもう少しなんとかしたい。

  • nginx(php-fpm)対応版とかもやってみたい。

  • いろいろきっと無駄が多い...

  • そしてセキュリティ...