VPSでWordPressを動かせる環境をコンソールから構築する!

榊原


VPSでWordPressを動かせる環境をコンソールから構築する!

こんにちはっ!
てっきりコンパネ付きと思って借りたVPSがコンソール操作でげげっ!となったライターの内藤です。

 

今やワンコインでVPSを1か月レンタルできる時代です!
共用サーバの速度に不満だったり、ちょっと高負荷なことをしたいときに、費用を抑えようとしたらやっぱりVPS。
※VPSについて詳しくは、tetsuさんの記事「これでVPS(仮想専用サーバ)マスター!? VPSの基礎講座」をご覧ください。

VPSは大抵コンソールからの操作でサーバを構築するところから始まります。
(※例外的に普通のレンタルサーバのようにコントロールパネルでの操作ができるサーバもあります。)
今回はWordPressを動かせる環境をコンソールから構築する方法を簡単にご紹介いたします。

※CentOS6.2(x86_64)をベースに話を進めます。
※SSHでの接続方法やviの操作方法については解説しません。
※ドメインは既に取得してあり、DNSゾーンレコードは設定済みと仮定しています。

目次

  1. ログインセキュリティを設定しよう
  2. Web用アカウントの設定
  3. apacheのインストールと設定
  4. yumリポジトリ設定
  5. PHPのインストールと設定
  6. MySQLのインストールと設定
  7. FTPのインストール
  8. サーバの仕上げ
  9. phpMyAdmimのインストールなど
  10. 参考になるサイトやサービス

ログインセキュリティを設定しよう

まず最初に、root権限でSSHログインができないようにします。

作業用(ログイン用)ユーザーを作成

# /usr/sbin/useradd -d /home/ユーザ名 -s /bin/bash ユーザ名
# passwd ユーザ名
Changing password for user ユーザ名.
New UNIX password: // ここで任意のパスワードを入力
Retype new UNIX password: // 再度同じパスワードを入力

rootでSSHログインできないように設定

/etc/ssh/sshd_configを編集します。

# vi /etc/ssh/sshd_config
#PermitRootLogin yes  // ここのコメント#をはずして
→PermitRootLogin no   // 値をnoに変更

#UseDNS yes  // ここのコメント#をはずして
→UseDNS no   // 値をnoに変更

:wqで保存してください。

そして、sshdを再起動します。

# /etc/rc.d/init.d/sshd restart

もう少し踏み込むならwheel所属を

rootになれるユーザをwheelグループに制限してセキュリティを高めます。

まず作ったユーザをwheelというグループに所属させます。

# usermod -G wheel ユーザ名

/etc/pam.d/suを編集します。

# vi /etc/pam.d/su
#auth    required     pam_wheel.so use_uid
→auth    required     pam_wheel.so use_uid  // コメント#をはずす

下記には更に厳しい制限のかけ方が解説してあります。

Web用アカウントの設定

次に、ウェブコンテンツ用の準備に入ります。

Webコンテンツ用ディレクトリと専用ユーザを作ります

# mkdir /var/www/example.com  // ここでは仮にexample.comにしましたが、任意の名前にしてください。
# mkdir /var/www/example.com/htdocs  // htdocsでなくても任意の名前で大丈夫です
# mkdir /var/www/example.com/logs    // logsでなくても任意の名前で大丈夫です。
# /usr/sbin/useradd -d /var/www/example.com ユーザ名
# passwd ユーザ名
Changing password for user ユーザ名.
New UNIX password: // ここで任意のパスワードを入力
Retype new UNIX password: // 再度同じパスワードを入力

ここで作ったユーザはFTP接続時に使用します。

次に、ディレクトリのパーミッションを変更しておきます。

# chmod 707 /var/www/example.com
# chmod +t /var/www/example.com
# chown -R ユーザ名:グループ名 /var/www/example.com/htdocs

ユーザ名は先ほど作ったユーザ名、グループ名は任意に変更してください。
これでウェブコンテンツ用のディレクトリやユーザ設定は完了です!

apacheのインストールと設定

借りるVPSにもよりますが、apache(webサーバ)が入っていない場合があります。
下記で確認してみます。

# yum list installed | grep httpd

httpd.x86_64が表示されたら入っています。

入っていない場合はapacheをインストールします

# yum -y install httpd

なんという簡単さ!!手軽さ!!yumさま命!!
気になる方は、ダウンロードしたパッケージを削除してください。

#yum clean packages

apacheの設定

/etc/httpd/conf/httpd.confを編集します。

# vi /etc/httpd/conf/httpd.conf

#AddHandler cgi-script .cgi
→AddHandler cgi-script .cgi  // コメント#をはずす

ServerTokens OS
→ServerTokens Prod  // OSをProdに変更

ServerSignature On
→ServerSignature Off  // OnをOffに変更

Alias /icons/ "/var/www/icons/"
→#Alias /icons/ "/var/www/icons/"  // コメントアウト

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
→#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"  // コメントアウト

Alias /error/ "/var/www/error/"
→#Alias /error/ "/var/www/error/"  // コメントアウト

#NameVirtualHost *:80
→NameVirtualHost *:80  // コメント#をはずす

// ここからバーチャルホスト設定を追加
<VirtualHost *:80>
  DocumentRoot /var/www/example.com/htdocs  // 2で作ったディレクトリ
  ServerName www.example.com
  ServerAlias example.com
  ErrorLog /var/www/example.com/logs/error_log
  CustomLog /var/www/example.com/logs/access_log combined
  SuexecUserGroup ユーザ名 グループ名  // 2で作ったユーザ名とグループ名
  <Directory "/var/www/example.com/htdocs">
    Order allow,deny
    Allow from all
    Options -Indexes FollowSymLinks Includes MultiViews ExecCGI
    AllowOverride All
  </Directory>
</VirtualHost>

 

更に今度はデフォルト状態でアクセスしたときにウェルカム画面を表示するための設定ファイルwelcome.confの中身を全てコメントアウトします。

# vi /etc/httpd/conf.d/welcome.conf

これで.htaccessでの設定などに影響が出なくなります。

サーバが起動したときに自動で起動するように設定します。

# /sbin/chkconfig --add httpd
# /sbin/chkconfig httpd on

iptablesの設定

VPSの落とし穴として、ポートの設定があります。
自分は、DNSのポート(UDP/TCPの53番)が開かれていないことが原因でドメイン接続ができませんで大分悩みました。
使いたいサービスのポートが開かれているかどうか確認してみてください。

# vi /etc/sysconfig/iptables

こんな感じに設定します。

*filter
:INPUT    DROP    [0:0]
:FORWARD  DROP    [0:0]
:OUTPUT   ACCEPT  [0:0]
:SERVICES -       [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4  -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -j SERVICES
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A SERVICES -p tcp --dport 22 -j ACCEPT
-A SERVICES -p tcp --dport 80 -j ACCEPT
-A SERVICES -p tcp --dport 443 -j ACCEPT
COMMIT

ファイル編集が終わったら、iptablesを再起動します。

# /sbin/service iptables restart

iptablesでは、ファイアウォールの設定ができます。
詳しくは下記に詳しく書かれていますのでご参照ください。

そしていざ、apache起動!

# /sbin/service httpd start

おまけ

apacheを起動しようとしてこんなエラーが発生したら。

httpd を起動中: (13)Permission denied: httpd: could not open error log file /etc/httpd/logs/error_log.
Unable to open logs

error_logとaccess_logを削除して再起動してみてください。
うまくいくような気がします。

yumリポジトリの設定

標準のyumでインストールできるパッケージは、最新のものとは限りません。
PHPやMySQLは、最新のものをインストールしたいので、外部リポジトリを取得してみます。

EPELリポジトリ

まず最新版を探します。

上記から、OSの種類(ここではCentOS)、OSのバージョン(ここでは6)、そしてbit数(ここではx86_64)とディレクトリをたどり、epel-release-6-5.noarch.rpmを確認します。
※ファイル名の中で「6-5」の部分はバージョンなので、その時によって違う可能性があります。

# wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/epel-release-6-5.noarch.rpm

REMIリポジトリ

まず最新版を探します。

上記よりremi-release-6.rpmを確認します。
※ファイル名の中で「6」の部分はOSのバージョンなので、OSのバージョンが5.xでしたらremi-release-5.rpmを利用します。

# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

全てのキャッシュを削除

追加したら、一旦yumに関するキャッシュやデータベースをクリアします。

# yum clean all

PHPのインストールと設定

各リポジトリでインストールできるバージョンを確認します。

# yum list | grep php // 標準
# yum --enablerepo=epel info php  // EPELリポジトリ
# yum --enablerepo=remi info php  // REMIリポジトリ

表示された中で最もバージョンの高いリポジトリを利用します。
※ここでは仮にREMIだったとします。※

# yum --enablerepo=remi install php

下記のパッケージも一緒にインストールしてみます。

# yum --enablerepo=remi install php-mbstring php-mysql php-pdo

バージョン確認で正しくインストールできたか確認します。

# php -v

PHPの設定

タイムゾーンを変更します。

#vi /etc/php.ini

;date.timezone =   // コメント;をはずして
→date.timezone = Asia/Tokyo // Asia/Tokyoを入力

apacheの設定をします。

# vi /etc/httpd/conf/httpd.conf

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

AddType application/x-httpd-php .php  // この行を追加する

もし、html内でphpを動かしたい場合は以下のようにします。

AddType application/x-httpd-php .php .html // .htmlを追加する

そしてapacheを再起動します。

# sbin/service httpd restart

MySQLのインストールと設定

MySQLのインストール

PHPの時と同様、最新版を探します。

# yum info mysql.x86_64
# yum --enablerepo=epel info mysql.x86_64
# yum --enablerepo=remi info mysql.x86_64

※.x86_64は64bit版です。32bit版の場合は、.i386をつけてください。

サーバOSが32bitか64bitかを調べるには下記を利用します。

# arch

そしてyumでインストールします。
※ここでは仮にREMIリポジトリを利用します。

# yum --enablerepo=remi install mysql.x86_64 mysql-server.x86_64

MySQLを起動してみます。

# /etc/rc.d/init.d/mysqld start

正常に起動したら、OS起動時に自動起動する設定を行います。

# chkconfig --list mysqld

MySQLの設定

文字コード変更

文字コードを変更します。

# vi /etc/my.cnf

character-set-server = utf8  // この行を追加する

MySQLを再起動します。

# /etc/rc.d/init.d/mysqld restart

初期設定

rootパスワードの設定をします。

# mysql_secure_installation

(省略)
Enter current password for root (enter for none): // ここで空Enter
(省略)
Set root password? [Y/n]  // ここで空Enter
New password:  // 任意のrootパスワードを入力
Re-enter new password:  // 再度同じパスワードを入力
(省略)
Remove anonymous users? [Y/n]  // ここで空Enter(匿名ユーザを削除します)
(省略)
Disallow root login remotely? [Y/n]  // ここで空Enter(リモートからのrootログインを禁止)
(省略)
Remove test database and access to it? [Y/n]  // ここで空Enter(testデータベース削除)
(省略)
Reload privilege tables now? [Y/n]  // ここで空Enter(リロード)

次に、管理用ユーザを作ります。

# mysql -u root -p
Enter password:  // 先に設定したrootパスワードを入力
(省略)
mysql> GRANT ALL ON *.* TO ユーザ名@'%' IDENTIFIED BY '任意のパスワード' WITH GRANT OPTION;
mysql> exit

お疲れ様でした。あと一息です。

FTPのインストール

準備

SSLでの接続をしたいので、SSLの準備をしておきます。

秘密鍵を置くディレクトリに移動します。

# cd /etc/pki/tls/certs

次に、秘密鍵を作成します。

# openssl genrsa -des3 -out server.key 2048

Enter pass phrase for server.key:  // パスワード入力
Verifying - Enter pass phrase for server.key:  // パスワード再入力

※server.keyは任意の***.keyで可能です。
次に、再起動時のパスワード入力を解除します。

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:  // 上記で設定したパスワードを入力

パーミッションを変更します。

# chmod 400 server.key

次に、上記で作成した秘密鍵を使用して自己署名証明書を作成します。

# openssl req -newkey rsa:2048 -nodes -x509 -out vsftpd.crt -keyout server.key -days 365
(省略)
Country Name (2 letter code) [GB]:JP // 国名
State or Province Name (full name) [Berkshire]: Tokyo // 都道府県名
Locality Name (eg, city) [Newbury]: Taito // 市区町村
Organization Name (eg, company) [My Company Ltd]: example.com // 会社名(省略可)
Organizational Unit Name (eg, section) []: // 部署名(省略可)
Common Name (eg, your name or your server's hostname) []: ftp.example.com // ホスト名(省略可)
Email Address []:example@example.com  // 管理者メールアドレス

※vsftpd.crtは、任意の名前xxx.crtでかまいません。
上記は1年有効の証明書です。
コマンドの最後のオプション値を365から大きくすれば、複数年の証明書ができます。

秘密鍵と証明書を合わせたファイルを作ります。

# cat server.key ftp.crt > vsftpd.pem

パーミッションを変更します。

# chmod 400 vsftpd.*

FTPインストール

vsftpdをインストール

yumで普通にインストールします。

# yum -y install vsftpd

vsftpdの設定

設定諸々です。

# vi /etc/vsftpd/vsftpd.conf

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO  // anonymous接続を禁止

# Activate logging of uploads/downloads.
xferlog_enable=YES  // ログを記録する

# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log  // ログファイルパスを指定

# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES

(省略)
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES // アスキーモードでのアップロードを許可
ascii_download_enable=YES  // アスキーモードでのダウンロードを許可

# You may fully customise the login banner string:
ftpd_banner=Welcome to blah FTP service.  // FTPログイン時にソフト名とバージョンが表示されないようにする

(省略)
# the presence of the "-R" option, so there is a strong case for enabling it.
ls_recurse_enable=YES  // ディレクトリごと削除できるようにする

(省略)

// ファイルの最後に以下を追加
user_localtime=YES  // タイムスタンプ時間を日本時間にする
ssl_enable=YES  // SSLの有効化
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem  // 先ほど作ったファイルを指定
ssl_ciphers=HIGH // 念のため

vsftpd起動!

# /etc/rc.d/init.d/vsftpd start

vsftpdの自動起動設定をします。

# chkconfig vsftpd on

サーバの仕上げ

最後に、固定IPからの接続の場合はiptablesでIP制限をかけます。

# vi /etc/hosts.allow

shhd:xxx.xxx.xxx.xxx  // 行を追加
vsftpd:xxx.xxx.xxx.xxx  // 行を追加

phpMyAdminのインストールなど

コンソールからyumを使ってもいいのですが、長くなるのでここではFTP経由でファイルをアップロードしてインストールしたとして、セキュリティについて簡単にできることを書き添えます。

.htaccessをディレクトリ直下に置く

IP制限+BASIC認証をかけます。

deny from all  // 全拒否
allow from xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy  // ここにアクセスできるIPアドレスをスペースで区切って書きます

AuthUserFile /var/www/example.com/htdocs/phpMyAdmin/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic
require valid-user

phpMyAdminでのログインについて

MySQLのインストールと設定でrootでのログインを制限したので、その時に作った管理ユーザでログインします。
あとはWordPress用のDBを作って、WordPressをインストールして完了です。

これにて一件落着!

参考になるサイトやサービス

借りたサーバによっては、そのサーバに特化して詳しく解説しているサイトがあります。

iptablesの設定についてはこちらがお勧めです。

VPSの比較表がまとまっていて見やすいです。

WordPressのみの利用を考えるなら、WordPressのパフォーマンスを最大限に優先したサーバが月額1,050円~借りられます。

社長ブログを見たところ、超高速です。驚異的です。

さらに、このサーバを詳しく解説してくださっているサイトがありますのでご参考までに。

終わりに

駆け足で流してしまいましたが、他にもセキュリティ関連やサーバパフォーマンスの観点から、設定した方がよいこともたくさんあるかと思います。
ですが最低限これでWordPressが動かせる環境が構築できます。

非常に長い上にビジュアル的にもそれほど嬉しくない記事にもかかわらず、読んでくださってありがとうございました。
コンソールに少しでも慣れ親しんで頂ければ幸甚この上ございません。

榊原
この記事を書いた人
榊原

外部ライター 鎌倉

関連記事