こんにちはっ!
てっきりコンパネ付きと思って借りたVPSがコンソール操作でげげっ!となったライターの内藤です。
今やワンコインでVPSを1か月レンタルできる時代です!
共用サーバの速度に不満だったり、ちょっと高負荷なことをしたいときに、費用を抑えようとしたらやっぱりVPS。
※VPSについて詳しくは、tetsuさんの記事「これでVPS(仮想専用サーバ)マスター!? VPSの基礎講座」をご覧ください。
VPSは大抵コンソールからの操作でサーバを構築するところから始まります。
(※例外的に普通のレンタルサーバのようにコントロールパネルでの操作ができるサーバもあります。)
今回はWordPressを動かせる環境をコンソールから構築する方法を簡単にご紹介いたします。
※CentOS6.2(x86_64)をベースに話を進めます。
※SSHでの接続方法やviの操作方法については解説しません。
※ドメインは既に取得してあり、DNSゾーンレコードは設定済みと仮定しています。
目次
- ログインセキュリティを設定しよう
- Web用アカウントの設定
- apacheのインストールと設定
- yumリポジトリ設定
- PHPのインストールと設定
- MySQLのインストールと設定
- FTPのインストール
- サーバの仕上げ
- phpMyAdmimのインストールなど
- 参考になるサイトやサービス
ログインセキュリティを設定しよう
まず最初に、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リポジトリ
まず最新版を探します。
http://dl.iuscommunity.org/pub/ius/stable/
上記から、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リポジトリ
まず最新版を探します。
http://rpms.famillecollet.com/enterprise/
上記より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をインストールして完了です。
これにて一件落着!
参考になるサイトやサービス
VPSの比較表がまとまっていて見やすいです。
社長ブログを見たところ、超高速です。驚異的です。
さらに、このサーバを詳しく解説してくださっているサイトがありますのでご参考までに。
こんなに違う!WordPressを高速に動かすwpXサーバがおすすめの理由と Xサーバとの違い
終わりに
駆け足で流してしまいましたが、他にもセキュリティ関連やサーバパフォーマンスの観点から、設定した方がよいこともたくさんあるかと思います。
ですが最低限これでWordPressが動かせる環境が構築できます。
非常に長い上にビジュアル的にもそれほど嬉しくない記事にもかかわらず、読んでくださってありがとうございました。
コンソールに少しでも慣れ親しんで頂ければ幸甚この上ございません。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。