WordPressテストサイト―ロリポップ、エックスサーバーに近い環境の作り方
技術情報
ロリポップやエックスサーバーで公開しているサイトの環境に近いテストサイト環境の作り方を記載しています。レンタルサーバーなどを契約せずにローカルで無料で構築する方法です。
目次
この記事の目次です。
1. ロリポップ、エックスサーバーに近い環境について
2. VirtualBoxにCentOS7をインストール
3. Apache(Apache 2.4)のインストール
4. PHP(PHP7)のインストール
5. MySQLのインストール
6. SSL対応のためのソフトウェアインストール
7. レンタルサーバ環境と合わせたパス等の設定
8. ドメイン毎の設定
9. WordPressを新規構築する場合
10. WordPressの移行する場合
11. 実メモリの不足を補うスワップの拡張方法
1. ロリポップ、エックスサーバーに近い環境について
WordPressを利用したサイトはレンタルサーバーを契約していることが多いですが、 テストを行う際に、同じレンタルサーバーを契約してもサブドメインになったり、サブディレクトリになったりと、 正確なリリースが求められたり、影響のある修正を行う際にテスト環境として不都合が出てきますね。
ここでは、ローカルに無料でWordPressのテストサイトを構築する方法を紹介いたします。 レンタルサーバーなどを契約せずにレンタルサーバーで構築するよりも実サイトに近い環境でテストが行えると思います。 私の取引経験から、ロリポップとエックスサーバーが多かったので、ロリポップとエックスサーバーを想定したテストサイト環境の作り方を記載しています。
事前調査
2020年7月時点ではロリポップのサーバではOSにLinuxの一つのCentOSを使用していると記載されていました。 また、エックスサーバーは公表はしていませんが、操作した感じからCentOSもしくはCentOSに近い環境を使用していました。
実際には、バージョンを合わせたり、インフラ構成や各ソフトウェアの設定などいろいろ合わせる必要がありますが、 CentOSのテスト環境を構築することで、より実際の環境に近いテストサイトが構築できると思います。
CentOSとは
CentOSとは、CentOSとは、無料で利用できるLinuxです。 商用でメジャーなLinuxであるRedHat Enterprise Linuxと同じソースコードを元にまとめられています。 無料で利用できるだけでなく商用でメジャーなRedHat互換で、自宅サーバや開発用だけではなく、商用環境としても利用されています。
lolipop!(ロリポップ)
lolipop!(ロリポップ)は、利用者が多い共用レンタルサーバーの一つです。 管理画面がやさしく初めての方におすすめです。 lolipop!(ロリポップ)の利用方法をテーマに、無料独自SSL、FTPアクセス制限、SSHの設定などの情報をまとめています。
Xserver(エックスサーバ)
Xserverは利用者が多いレンタルサーバーの一つです。 WordPressのサイトで100万PVが目指せるだけのリソースを割り当ててくれます。
レンタルサーバー
レンタルサーバーは、サーバーをレンタルするサービスです。lolipop、heteml、cpi、xserver、sakuraなど、各種レンタルサーバーの利用方法について利用者の立場で解説しています。
2. VirtualBoxにCentOS7をインストール
この記事では、CentOS7の構築手順を紹介していきます。 CentOSのインストール例として、Oracle VM VirtualBoxにCentOS7をインストールします。
VirtualBoxとは
VirtualBoxとは、Oracle社のクロスプラットフォームな仮想化ソフトウェアです。 VirtualBoxとは何かをテーマに仮想マシン作成からOSのインストールしてホストオンリーでSSL接続する例など簡単な使い方をまとめています。
3. Apache(Apache 2.4)のインストール
CentOS7にApacheをインストールしていきます。
Apacheのインストール
Apacheをインストールします。rootで作業していきます。
# yum -y install httpd
httpd サービスの自動起動設定
CentOS7を再起動しても自動でApacheが起動されるように設定します。
# systemctl enable httpd
httpd サービスを開始
Apacheを起動します。
# systemctl restart httpd
Firewall穴あけ
外からアクセスできるようにhttpとhttpsのポートを解放します。
# firewall-cmd --add-service=http --permanent # firewall-cmd --add-service=https --permanent # firewall-cmd --reload
4. PHP(PHP7)のインストール
CentOS7にPHPをインストールしていきます。
EPELリポジトリのインストール
# yum -y install epel-release
Remiリポジトリのインストール
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
PHP7.xのインストール
PHP7のマイナーバージョン別のインストール手順です。
PHP7.0をインストールする場合
# yum remove php* -y # yum --enablerepo=remi,remi-php70 install php php-devel pcre-devel php-posix php-ssh2 php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y --skip-broken
PHP7.2をインストールする場合
PHP7.2をインストールする場合の例は以下です。
# yum remove php* -y # yum --enablerepo=remi,remi-php72 install php php-devel pcre-devel php-posix php-ssh2 php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y --skip-broken
PHP7.3をインストールする場合
PHP7.3をインストールする場合の例は以下です。libargon2を先にインストールしておきます。
# yum install --disablerepo=* --enablerepo=epel libargon2 # yum remove php* -y # yum --enablerepo=remi,remi-php73 install php php-devel pcre-devel php-posix php-ssh2 php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y --skip-broken
確認
PHP7がインストールされているか確認します。
# php -v
php-fpmの自動起動設定
php-fpmの自動起動の設定を行います。
# systemctl enable php-fpm
php-fpmの再起動
php-fpmの再起動を行います。
# systemctl restart php-fpm
php-fpmプロセスの確認
# ps -aef | grep php-fpm
5. MySQLのインストール
CentOS7にMySQLをインストールしていきます。
MariaDBの削除
MariaDBの削除します。
# yum remove mariadb-libs # rm -rf /var/lib/mysql/
yumリポジトリ追加
mysql公式のリポジトリを追加します。
MySQLのYumリポジトリを使用するための方法
Yumを使用してLinuxにMySQLをインストールするにはMySQLのYumリポジトリを使用します。MySQLのYumリポジトリを使用するための方法をまとめています。
MySQLインストール
MySQLをインストールします。
# yum -y install mysql-community-server
自動起動設定
自動起動設定を行います。
# systemctl enable mysqld.service
MySQL起動
MySQLを起動します。
# systemctl start mysqld.service
初期のrootパスワード確認
初期のrootパスワードは/var/log/mysqld.logに出力されます。
[Note] A temporary password is generated for root@localhost: <初期のrootパスワードの出力>
基本的なセキュリティ設定
mysql_secure_installationを使用して基本的なセキュリティ設定を行います。
# mysql_secure_installation
6. SSL対応のためのソフトウェアインストール
SSL対応のためのソフトウェアインストールします。 インターネットに公開されないテストサイトのため、ブラウザにエラーが表示されますが、httpsのURLに対応できるようにしていきます。
# yum -y install mod_ssl
7. レンタルサーバ環境と合わせたパス等の設定
エックスサーバーやロリポップなどレンタルサーバーに合わせたディレクトリパスでテストサイトが表示できるようにしていきます。
OSのユーザ/グループ作成
OSアカウントを作成します。
# useradd -g apache -m <追加OSアカウント名> -d <ホームディレクトリのパス> # passwd <追加OSアカウント名> # chmod 750 <ホームディレクトリのパス>
PHP用のディレクトリ作成
PHP用のディレクトリを作成します。
su <OSアカウント名> mkdir -p <ホームディレクトリのパス>/log/php-fpm mkdir -p <ホームディレクトリのパス>/lib/php/session mkdir -p <ホームディレクトリのパス>/tmp
Apacheの設定
/etc/httpd/conf/httpd.confの最下部あたりに以下を追記します。
IncludeOptional conf.site/*.conf
上記で個別サイトの設定を別ファイルで定義できるようにします。
PHP-FPMの設定
次にサイト用のPHPの設定を行います。 デフォルトの/etc/php-fpm.d/www.confをコピーして/etc/php-fpm.d/<追加OSアカウント名>.confを作成し、ポート番号9001、OSアカウント名(<追加OSアカウント名>)でPHPを実行する例です。
[example] : user = <追加OSアカウント名> : group = apache : listen = 127.0.0.1:9001 : php_admin_value[error_log] = <ホームディレクトリのパス>/log/php-fpm/www-error.log : php_value[session.save_path] = <ホームディレクトリのパス>/lib/php/session :
8. ドメイン毎の設定
レンタルサーバーのようにアカウントにぶら下がるイメージでドメインの設定を行っていきます。
ホームページ公開領域の設定
サイトのWeb公開領域を作成します。 ホームディレクトリからアクセスしやすいようにシンボリックリンクも作っておきます。 以下ではエックスサーバーのパス構成を例に設定していきます。
su <追加OSアカウント名> mkdir -p <ホームディレクトリのパス>/<ドメイン名> mkdir -p <ホームディレクトリのパス>/<ドメイン名>/public_html
自己証明のSSLサーバ証明書の設定
httpsで表示できるように自己証明のSSLサーバ証明書を作成していきます。
秘密鍵の作成
秘密鍵を作成します。
# mkdir /etc/httpd/conf.site # mkdir /etc/httpd/conf.site/ssl # openssl genrsa 2024 > /etc/httpd/conf.site/ssl/<ドメイン名>.key
CSR作成
CSRを作成します。ドメイン名を合わせることだけ意識すれば後は適当で大丈夫です。
# openssl req -new -key /etc/httpd/conf.site/ssl/<ドメイン名>.key > /etc/httpd/conf.site/ssl/<ドメイン名>.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Chuo-Ku Organization Name (eg, company) [Default Company Ltd]:test Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:<ドメイン名> Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
サーバ証明書の作成
サーバ証明書を作成します。
openssl x509 -req -days 3650 -signkey /etc/httpd/conf.site/ssl/<ドメイン名>.key < /etc/httpd/conf.site/ssl/<ドメイン名>.csr > /etc/httpd/conf.site/ssl/<ドメイン名>.crt
Apacheの設定
個別ファイルの例は以下です。 常時https化やレスポンスヘッダの設定は.htaccessでも設定できるようになっています。
ここでは、/etc/httpd/conf.site/<ドメイン名>.confファイルを作成しています。 PHPをポート番号デフォルトとは異なる9001で連携する設定になっているところがポイントになります。
<VirtualHost *:80> ServerName <ドメイン名> DocumentRoot <ホームディレクトリのパス>/<ドメイン名>/public_html/ CustomLog /var/log/httpd/<ドメイン名>_access_log common ErrorLog /var/log/httpd/<ドメイン名>_error_log RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] <Directory <ホームディレクトリのパス>/<ドメイン名>/public_html/> Options FollowSymLinks AllowOverride All Require all granted <FilesMatch "\.php$"> SetHandler application/x-httpd-php SetHandler "proxy:fcgi://127.0.0.1:9001" </FilesMatch> </Directory> </VirtualHost> <VirtualHost *:443> ServerName <ドメイン名> DocumentRoot <ホームディレクトリのパス>/<ドメイン名>/public_html/ CustomLog /var/log/httpd/<ドメイン名>_ssl_access_log common ErrorLog /var/log/httpd/<ドメイン名>_ssl_error_log SSLEngine on SSLProtocol -all +TLSv1.2 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS:!3DES SSLHonorCipherOrder On SSLCertificateFile /etc/httpd/conf.site/ssl/<ドメイン名>.crt SSLCertificateKeyFile /etc/httpd/conf.site/ssl/<ドメイン名>.key RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] <Directory <ホームディレクトリのパス>/<ドメイン名>/public_html/> Options FollowSymLinks AllowOverride All Require all granted <FilesMatch "\.php$"> SetHandler application/x-httpd-php SetHandler "proxy:fcgi://127.0.0.1:9001" </FilesMatch> </Directory> </VirtualHost>
PHPとApacheの再起動
PHPとApacheを再起動して設定反映します。
systemctl restart php-fpm systemctl restart httpd
※SELINUXを利用している場合は別途設定が必要です。SELINUXを設定しない場合は/etc/selinux/configで「SELINUX=disabled」にしてゲストOSを再起動する必要があります。
ApacheとPHPの動作確認
ApacheとPHPの動作確認を行っていいきます。
ホストOSのhostsファイルの編集
本来はインターネット上のDNSサーバでドメインとサーバを紐づけていますが、ホストOS内で完結した検証環境になりますので、hostsファイルにて、ドメイン名と検証環境の紐づけを行います。 hostsファイル利用時は検証環境でのみドメインが利用できるようになりますので、本番環境を表示する場合はhostsファイルをもとに戻す必要があります。
Windowsの場合はhostsファイルは「C:\Windows\System32\drivers\etc\hosts」にあります。 あらかじめプロパティで編集権限を設定する必要があります。 本手順を進めた場合、ゲストOSのIPは「192.168.56.101」になりますので、設定例は以下になります。
192.168.56.101 <ドメイン名>
ドメインのpublic_htmlにテストコンテンツ配置
たとえば、以下のコードを記述したtest.phpを配置して、表示確認していきます。
<?php echo "ドメイン名" ?>
ブラウザでhttpsにアクセスした場合のエラー解除方法
自己証明書を使用しているためhttpsでアクセスした場合、証明書エラーが発生します。 詳細を開いて危険を承知して表示するを選択する操作を行ってエラーを解除します。 以下はFirefoxの解除の例です。
詳細を開いて「危険性を承知で続行」をクリックします。
9. WordPressを新規構築する場合
WordPressの新規構築方法について見ていきます。
WordPressの新規構築の概要
WordPressの新規構築の概要は以下です。
- WordPress パッケージをダウンロードして、解凍
- サーバー上に、WordPress 用のデータベースと、そのデータベースへの全アクセス権・編集権を持つ MySQL ユーザーを作成
- wp-config-sample.php ファイルの名前を wp-config.php に変更
- テキストエディタでwp-config.phpを開き、wp-config.phpファイルの編集記事の説明に従いデータベース情報と秘密鍵の値を記入
- サーバー上の希望の場所に、WordPress ファイルを設置
- ドメインルート (http://example.com/ など) に WordPress を置きたいときは、解凍した wordpress ディレクトリの中身 (wordpress ディレクトリ自体を除く全ファイル) をサーバーのルートディレクトリへアップロード
- ウェブサイト上の WordPress 用サブディレクトリ (http://example.com/blog/ など) に WordPress を設置したいときは、解凍した wordpress フォルダを好きなサブディレクトリ名に変更し、丸ごとサーバーのルートにアップロード
- ブラウザで wp-admin/install.php へアクセスし、インストールスクリプトを実行
- ルートディレクトリに設置したなら: http://example.com/wp-admin/install.php
- blog というサブディレクトリに設置したなら: http://example.com/blog/wp-admin/install.php
参考URL)http://wpdocs.osdn.jp/WordPress_のインストール
インストール方法の詳細は以下の記事にまとめています。
WordPressのインストール方法
WordPressのインストール方法についてまとめています。
10. WordPressの移行する場合
WordPressの移行方法についてです。 SSHに対応したサーバで、mysqldumpを使用してWordPressのデータベースをバックアップする例です。
mysqldumpとは
mysqldumpは、MySQL(もしくはMariaDB)のデータベースをバックアップするコマンドです。 MySQL内に保存されたデータベース定義やデータをSQL文の形式で出力してくれます。
WordPressのデータベースをバックアップする例
WordPressは、MySQLのデータベースに投稿などのデータを保管します。
以下はSSHに対応したサーバで、mysqldumpを使用してWordPressのデータベースをバックアップする例です。
SSHでWordPressが動作するサーバーへ接続
まずはTeratermなどのSSHクライアントを使用して、WordPressが動作するサーバーへSSHで接続します。
WordPressが使用するデータベースの確認
以下のようにしてWordPressが使用するデータベースの接続先が確認できます。
cat <wp-config.phpの配置パス> | grep DB
mysqldumpでバックアップを出力しファイルに保存
以下のようにしてmysqldumpでバックアップを出力しファイルに保存できます。
mysqldump -h <DB_HOST> -u <DB_USER> -p <DB_NAME> > <保存ファイルのパス(例 xxx.dump)>
- <DB_HOST>は、wp-config.phpのDB_HOSTに記述されたホスト名
- <DB_USER>は、wp-config.phpのDB_USERに記述されたデータベースユーザー名
- <DB_NAME>は、wp-config.phpのDB_NAMEに記述されたデータベース名
WordPressのデータベースを移行(リストア)する例
今度はWordPressのデータベースを移行(リストア)する例です。 mysqldumpで出力されたダンプはMySQLのデータベースを操作するSQL文で出力されますので、mysqlコマンドでSQL文を実行することで移行(リストア)が行えます。
リダイレクトを使用してインポートする例
コマンドライン(シェル)のリダイレクト(<)を使用してインポートが行えます。
mysql -h <DB_HOST> -u <DB_USER> -p <DB_NAME> < <保存ファイルのパス(例 xxx.dump)>
sourceを使用してインポートする例
mysqlコマンドでmysqlに接続してsourceを使用してインポートが行えます。
mysql -h <DB_HOST> -u <DB_USER> -p <DB_NAME> MySQL> source <保存ファイルのパス(例 xxx.dump)>
URLやパスが異なる場合
テストサイトと本番サイトでURLやパスが異なる場合はデータベースの変更が必要です。 Search-Replace-DB-masterというツールでデータベースの変更が行えます。
Search-Replace-DB-master
Search-Replace-DB-masterは、WordPressのデータベースのURLやパスの文字列を別のものに置き換えてくれるツールです。
11. 実メモリの不足を補うスワップの拡張方法
実メモリの不足を補うスワップの拡張方法について紹介いたします。
スワップ領域
作業PC内のテスト環境など少ないリソース環境でメモリが不足する場合があります。 その際の対処方法の1つにスワップの拡張があげられます。 スワップ領域とは何か、centos7のswap拡張方法(mkswap、swaponコマンド)について解説しています。
更新履歴
更新履歴になります。
- 2021/2/6 lolipop!(ロリポップ)について追記しました。
- 2021/1/26 実メモリの不足を補うスワップの拡張方法について追記しました。
- 2020/7/31 記事をアップしました。