2013年8月23日金曜日

PHP5.4 + MySQL5.5 + APCをインストール (おもに友人のWordPressサーバのセットアップメモです。)

 (おもに友人のWordPressサーバのセットアップメモです。)

ミドルウェアは、最新のものを使うならば、PHP5.5 + MySQL5.6 + Zend OPcacheなのですが、 『簡単に・素早くセットアップ出来る』 ということを優先して、このバージョンを選んでいます。

環境はCentOS 6です。

MySQL5.5のインストール

既存のmysqlがあった場合アンインストール。
# yum remove mysql-libs mysql-server mysqlclient15 mysql-devel perl-DBD-mysql mysql

OSが64bitの場合です。
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 
# wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh epel-release-6-8.noarch.rpm
# rpm -Uvh remi-release-6.rpm 
# yum --enablerepo=remi install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64
# /etc/init.d/mysqld start

パスワードを設定します。 new-passwordと、hostnameのところは便宜変えてください。
# /usr/bin/mysqladmin -u root password 'new-password'
# /usr/bin/mysqladmin -u root -h hostname password 'new-password'

ログインできることを確認。
# /usr/bin/mysql -uroot -pnew-password

my.cnf調整
innodb_buffer_pool_sizeは使用可能メモリの60%を推奨です。
PHPアプリなどと同居する場合は便宜調整してください。
# cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
# emacs /etc/my.cnf
[client]
default-character-set = utf8

[mysqld]
log-bin=mysql-bin
binlog_format=mixed  
max_connections = 1024
character-set-server = utf8
table_open_cache = 4000
table_definition_cache = 400
key_buffer_size = 16M       
read_buffer_size = 256K     
read_rnd_buffer_size = 512K 
join_buffer_size = 256K
max_binlog_size = 128M
expire_logs_days = 7
server_id = 101 # サーバ毎に違う値を入れる
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/mysqld-slow.log
long_query_time = 5
innodb_buffer_pool_size = 5G # 使用可能メモリの60%を推奨
innodb_additional_mem_pool_size = 16M
innodb_autoextend_increment = 64M
innodb_log_file_size = 128M
innodb_log_buffer_size = 16M
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 8
innodb_commit_concurrency = 10
innodb_lock_wait_timeout = 3600
innodb_file_format = Barracuda
innodb_file_per_table
skip-name-resolve
performance_schema = 0 # サーバのメモリが少ないときにはオフにしておく

MySQL5.5の再起動。
# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# rm ib_logfile0 ib_logfile1
# /etc/init.d/mysqld start

ログを確認。
# cat /var/log/mysqld.log 

ログインして、データベースを作っておきます。
PHP5.4のインストール

iusレポジトリを使います。 一緒にhttpdもインストールします。
# rpm -Uvh  http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-11.ius.centos6.noarch.rpm
# rpm -Uvh  http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/epel-release-6-5.noarch.rpm
# yum install php54-cli php54-pdo php54-mysql php54-common php54 php54-fpm php54-devel php54-mbstring php54-mcrypt php54-pear php54-gd httpd httpd-devel

httpdのログを圧縮・90日間保存するように設定しておく。
compressと、rotate 90を追記。 notifemptyを削除。
# emacs /etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    rotate 90
    compress
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

APCのインストール 

peclコマンドでインストールできます。
# pecl install APC

extensionの設定と、メモリの設定をします。
# emacs /etc/php.ini
extension=apc.so
apc.shm_size=64M

httpdもしくはphp-fpmの再起動で有効になります。
# /etc/init.d/httpd restart 

確認します。
# php -i | grep apc

APCの管理画面 apcのキャッシュを可視化できるようにしておくと良いでしょう。 phpスクリプトができているのでコピーします。 ※便宜アクセス制限をかけてください。
# mkdir -p /var/www/apc
# cp /usr/share/pear/apc.php /var/www/apc

apc.phpの以下の行を調整すると、グラフが見えるようになり、より使えるようになります。
defaults('ADMIN_PASSWORD','password');          // Admin Password - CHANGE THIS TO ENABLE!!!

httpdの設定例
# vi /etc/httpd/conf.d/002_apc.conf

Listen 8080

  ServerName ****************
  DocumentRoot /var/www/apc
  
    Options All
    Options -Indexes
    AllowOverride All
    Order allow,deny
    allow from all

    # BASIC Auth
    AllowOverride AuthConfig
    AuthType Basic
    AuthName Basic
    AuthUserFile /var/www/apc/.htpasswd
    Require valid-user
  


nginxの設定例
server {
  listen 5130;
  server_name xxxxxxxxxxxxxxxxxxxxxxxx;

  auth_basic "basic authentication";
  auth_basic_user_file "/var/www/apc_control_panel/.htpasswd";

  server_name _;
  root /var/www/apc_control_panel;
  index index.php index.html;
  charset utf-8;

  ## access log settings
  access_log  /var/log/nginx/fastcgi_log combined;

  location / {
    index index.php;
  }

  ## location /
  location ~ \.php$ {
      fastcgi_pass unix:/tmp/php.socket;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      fastcgi_pass_header "X-Accel-Redirect";
      fastcgi_pass_header "X-Accel-Expires";
  }
}


iptablesの設定

とりあえず、ssh用の22番ポートと、HTTP用の80番ポートを開放します。 それ以外を遮断します。
# 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 -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22    -j ACCEPT

# HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT

# REJECT others
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
# /etc/init.d/iptables restart


httpd.confの設定

アクセス過多でサーバがハングアップした状態にならないように、プロセスの数が一定なるように調整してあげます。 数値はメモリ量を見つつ、いい感じに変更してください。
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
# vi /etc/httpd/conf/httpd.conf

     
StartServers       8     
MinSpareServers    5     
MaxSpareServers   20     
ServerLimit      256     
MaxClients       256     
MaxRequestsPerChild  4000
      
StartServers      50      
MinSpareServers   50      
MaxSpareServers   50      
ServerLimit       50      
MaxClients        50      
MaxRequestsPerChild  4000 
      
NameVirtualHostを有効にします。 今回は、80番ポートだけです。SSLも使う場合は443も設定しましょう。
# NameVirtualHost *:80  
↓
NameVirtualHost *:80  
WordPress用の設定
# vi /etc/httpd/conf.d/001_wp.conf 


  ServerName ssd1.xxxxxx.jp
  DocumentRoot /var/www/wordpress-ssd1
  
    Options All
    Options -Indexes
    AllowOverride All
    Order allow,deny
    allow from all
  



  ServerName ssd2.xxxxxx.jp
  DocumentRoot /var/www/wordpress-ssd2
  
    Options All
    Options -Indexes
    AllowOverride All
    Order allow,deny
    allow from all
  

ディレクトリを作成して、そこにWordPressを設置します。
mdkir -p /var/www/wordpress-ssd1
mdkir -p /var/www/wordpress-ssd2

↓
WordPress設置

↓
ファイルの権限を変更
# cd /var/www/
# chown -R apache:apache wordpress-ssd1
# chown -R apache:apache wordpress-ssd2
httpdをスタートして、ブラウザでアクセスしてみます。
# /etc/init.d/httpd restart


以上。
簡単ですね!