勉強したことのメモ

webプログラマが勉強したことのメモ。

VPSで必要最低限の初期設定と高速化&負荷対策まとめ(CentOS5系)

   

久しぶりにVPSで新しくサーバを構築する機会があった。過去記事を見て設定しようと思ったけど、記事を分散して書いてたのでまとめてメモ。メモリ2GB、CPUコア数2で1日10万PVは耐えられる筈。phpMyAdminは導入せずAdminerで対応。あとサーバ側でのキャッシュ対策も。環境としていつもはCentOS6.x系だったけど今回はCentOS5.5だった。

 

 

SSHに接続

IPアドレス、パスはあるはずなのでポートを22で接続。DTIの場合は3843が初期ポートなので注意。

 

rootのパスワード変更

passwd

を入力すると新しいパスワードを2回聞かれるので入力する。

 

接続用ユーザーの作成と設定

接続用ユーザーはユーザー名testuser、パスワードtestpassとする。まずはユーザーの作成。

useradd -d /testuser -G wheel testuser

次にパスワードの設定。
passwd testuser

パスワードの入力が2回求められるので入力する。

 

sudoコマンドの設定

visudo

を入力して「/wheel」で検索すると、
##Allows people in group wheel to run all comma
#wheel ALL=(ALL) ALL

みたいな部分があるので#wheelの#を削除する。削除後は「:wq」で保存。

 

SSHの設定

vi /etc/ssh/sshd_config

で設定ファイルを開き、「#Port 22」を検索。コメントアウトの#を外して、22の数字は適宜変更する。ここでは例として7777に変更する。

次にrootでのログインを拒否したいので「PermitRootLogin」を検索。Yesになっている部分をNoに書き換えて「:wq」で保存。

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

で再起動かけて完了。

 

iptablesの設定

vi /etc/sysconfig/iptables

で設定ファイルを開いて以下を記述。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7777 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

7777のところはSSHで設定したポートの番号を入れる。

以下で再起動。

service iptables restart

 

yumのアップデート(※2015/08/09追記)

yumをアップデートしておく。

yum update

 

Apacheのインストールと設定

yum -y install httpd

でApacheをインストールする。完了すれば、以下で自動起動設定。
/sbin/chkconfig httpd on

次にApacheの設定をしたいので以下で設定ファイルを開く。
vi /etc/httpd/conf/httpd.conf

以下設定に編集していく。
#ServerTokens OS
#↓↓に書き換え
ServerTokens Prod

#KeepAlive Off
#↓↓に書き換え
KeepAlive On

#ServerName www.example.com:80
#↓↓に書き換え
ServerName *:80

#Options Indexes FollowSymLinks
#↓↓に書き換え(複数あるかも)
Options FollowSymLinks

#AllowOverride NONE
#↓↓に書き換え(複数あるかも)
AllowOverride ALL

#ServerSignature On
#↓↓に書き換え
ServerSignature Off

#Timeout 300
#↓↓に書き換え
Timeout 10

#MaxKeepAliveRequests 100
#↓↓に書き換え
MaxKeepAliveRequests 50

#KeepAliveTimeout 15
#↓↓に書き換え
KeepAliveTimeout 8

#<IfModule prefork.c>
#StartServers       8
#MinSpareServers    5
#MaxSpareServers   20
#ServerLimit      256
#MaxClients       256
#MaxRequestsPerChild  4000
#</IfModule>
#↓↓に書き換え
<IfModule prefork.c>
StartServers       5
MinSpareServers    5
MaxSpareServers   10
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  400
</IfModule>

#<IfModule worker.c>
#StartServers         2
#MaxClients         150
#MinSpareThreads     25
#MaxSpareThreads     75
#ThreadsPerChild     25
#MaxRequestsPerChild  0
#</IfModule>
#↓↓に書き換え
<IfModule worker.c>
StartServers         5
MaxClients         300
MinSpareThreads     30
MaxSpareThreads    150
ThreadsPerChild     50
MaxRequestsPerChild  50
</IfModule>

#以下を追記。/var/www/htmlの部分はドキュメントルートを適宜書き換える。
<Directory "/var/www/html">
ExpiresActive On
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/icon "access plus 60 days"
ExpiresByType image/ico "access plus 60 days"

ExpiresByType text/html "access plus 60 minutes"
ExpiresByType text/css "access plus 10 days"
ExpiresByType text/xml "access plus 60 minutes"
ExpiresByType text/javascript "access plus 10 days"
ExpiresByType application/javascript "access plus 10 days"
ExpiresByType application/x-javascript "access plus 10 days"
</Directory>

また、サブドメインを設定したい場合は以下変更も必要。
#↓↓コメントアウト付いている場合は外す
NameVirtualHost *:80

#↓↓下記を追記
<VirtualHost *:80>
    ServerAdmin domain.com
    DocumentRoot /var/www/html/domain.com
    ServerName domain.com
    ErrorLog logs/error_log
    CustomLog logs/access_log common
</VirtualHost>

以下でApacheを再起動させて完了。
service httpd restart

尚、この時点でIPアドレスを参照するとApacheのテストページが表示される。なので、
vi /etc/httpd/conf.d/welcome.conf

の設定ファイルを開いて、
<LocationMatch “^/+$”>
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>

上記の部分を全て#でコメントアウトして保存する。確認したい場合は再度Apacheの再起動が必要。

 

PHPのインストールと設定

先にepelとremiレポジトリを入れる。

rpm -ivh  http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

PHPと必要そうなモジュールを入れる。
yum -y install --enablerepo=remi --enablerepo=remi-php55 php php-devel php-mbstring php-mcrypt php-mysql php-gd

PHPの設定を変更する。以下で設定ファイルを開く。
vi /etc/php.ini

以下変更を行う。
#memory_limit = 128M
#↓↓に書き換え
memory_limit = 32M

尚、もし大きいファイルのアップロードやダウンロードがしたい場合は以下変更も必要。
#upload_max_filesize = 2M
#↓↓に書き換え。memory_limit以下且つpost_max_size以下の数値で好きな設定にする。
upload_max_filesize = 8M

#post_max_size = 8M
#↓↓に書き換え。memory_limit以下の数値で好きな設定にする。
post_max_size = 16M

「memory_limit > post_max_size > upload_max_filesize」にならないといけないので注意。

あとキャッシュ対策としてopcacheを以下で導入。

yum -y install php-opcache --enablerepo=remi-php55,remi

opcacheの状況を視覚的に確認しやすいよう、ocp.phpを導入すると良い。

https://gist.github.com/ck-on/4959032

FTP関連の設定が終わった後、上記ページのソースを適当な名前をつけて保存して、適当なディレクトリにアップする。

 

MySQLのインストールと設定

yum -y install mysql-server

でMySQLをインストール。
/sbin/chkconfig mysqld on
service mysqld restart

自動起動設定と再起動。
mysql_secure_installation

で初期設定。rootのパスワードだけ入れて、後はYesの選択肢でOK。
mysql -u root -p

でMySQLに接続して、
GRANT ALL PRIVILEGES ON *.* TO testuser IDENTIFIED BY 'testpass';
GRANT ALL PRIVILEGES ON *.* TO testuser@localhost IDENTIFIED BY 'testpass';

でMySQL用のユーザーを作成する。下がlocalhostで上がワイルドカード指定。testuserとtestpassは適宜書き換える。
vi /etc/my.cnf

でMySQL用の設定ファイルを開いて全部削除し、以下を記述。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server=utf8
skip-character-set-client-handshake
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1
key_buffer = 16M
sort_buffer_size = 1M
read_buffer_size = 256K


# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

以下でMySQLを再起動して完了。
service mysqld restart

 

FTPサーバのインストールと設定

yum -y install vsftpd

でFTPサーバをインストールして、
vi /etc/vsftpd/vsftpd.conf

で設定ファイルを開く。
#anonymous_enable=YES
#↓↓に書き換え
anonymous_enable=NO

#ascii_upload_enable=NO
#↓↓に書き換え
ascii_upload_enable=YES

#ascii_download_enable=NO
#↓↓に書き換え
ascii_download_enable=YES

#ls_recurse_enable=NO
#↓↓に書き換え
ls_recurse_enable=YES

#以下を追記
use_localtime=YES
local_root=/var/www/html
force_dot_files=YES

追記のlocal_rootはドキュメントルートを適宜書き換える。

以下で自動起動と再起動。

/sbin/chkconfig vsftpd on
service vsftpd restart

尚、所有権の問題でファイルをアップロードできない場合は、
chown testuser:testuser /var/www/html

で所有権を変更する。

 

サーバ自体の再起動と確認

reboot

でサーバの再起動をかける。

確認項目としては、

  • FTPでファイルのアップロード、ダウンロードが出来るか?
  • rootでSSH接続不可になっているか?
  • SSH接続時に指定したポート以外ではログイン不可になっているか?
  • Adminer.php入れてPHPとMySQL動いているか?
  • ocp.phpでopcacheが動いているか?
  • Apacheのテストページが表示されていないか?

辺りを見ておく。

 - VPS

  関連記事

DTIのServersMan@VPSでデータが全て消えた

2015/09/03の17時頃からDTIのServersMan@VPSで障害が発 ...

ServerQueenのVPSプランが非常に安いみたい

今のところ、スペックとかはあまりこだわらずに、値段だけでVPSを選ぶ際はDTIの ...

VPSをもう1台導入した際のメモ

DTIのVPSを導入した。 目的としてはMySQLのレプリケーションとか、 複数 ...

VPSにメールサーバを導入する方法

VPSにメールサーバを導入したかった。具体的にはThunderbirdでメールの ...

VPSで決めた時間に自動でreboot(再起動)させる方法

VPSを常時起動させてると、どうもapache(httpd)がメモリを離してくれ ...

GMOのVPSでメモリ1GBのプランが出てた

GMOのVPSで今まで最小構成がメモリ2GBだったのが、新しく1GBのコースが出 ...

VPSでWebARENAのIndigoが安い

サーバの勉強や開発環境の為にVPSをレンタルすることが多い。当ブログのように常時 ...

VPSのCentOSにプロキシサーバーを立てる方法

借りているVPSにプロキシサーバーを立てたかった。環境と設置方法等を以下にメモ。 ...

久しぶりにVPSでサーバー構築して詰まった点

DTIのVPSで久しぶりに初期化→再構築する機会があった。その際に詰まった部分の ...

CentOS6系から7系に(KAGOYAからIndigoに)移行した際のメモ

CentOS6系から7系に、さらにKAGOYAのVPSからWebARENA In ...