VMPlayer上にCentOS 7とnginxでWordPressサーバを構築する

VMPlayer上にCentOS 7とnginxでWordPressサーバを構築する

家の中での温度計測や非公開Webサーバなどを動かしていたScientificLinuxがyum updateしたらkernel panicで起動しなくなりました。一つ古いカーネルに戻せば動きますが、いい機会なので入れなおしてみようかと。

CentOS 7のインストールと設定

さよならCentOSこんにちわScientific Linux 6徒労日記 | 徒労日記でCentOSを見限ったはずが、情勢が変わりました。というわけでCentOS7に戻ります。

インストール

  • CPU:1コア
  • Memory:1GB
  • Disk:20GB SCSI
  • USB2.0:すべてのデバイスを表示する(TEMPerを使う為)
  • ネットワーク:ブリッジ(物理ネットワークに直接接続する)

でVMを作成しました。

ISOをブートするとここまで来ます。なんてフレンドリーな画面。

20130928-01

パッケージベースは「ベーシックWebサーバ」を選択し、個別に

  • PHPサポート
  • パフォーマンスツール
  • Perl-Web実行

のみチェックつけました。今考えれば最小限インストールで良かったか・・・ 20130928-02コピー進行中にrootのパスワード設定、一般ユーザーの作成ができます。無駄が減っていいですね。20130928-03

設定は最低限で良くなった

ネットワークの問題も無く、設定しなければならない部分はかなり減りました。ここでは追加した一般ユーザーをsudoersに追記。あとはntpdの追加と全体アップデートをしておきます。SSHはそのままでも繋がるので、秘密鍵の部分は割愛。

# vi /etc/sudoers
username ALL=(ALL)ALL

# yum install ntp
# vi /etc/ntp.conf
server -4 ntp.nict.jp
server ntp.jst.mfeed.ad.jp
server ntp.asahi-net.or.jp

# yum update
# reboot

未だにntpdでいいの?と思ったけどこの記事を読んで「まぁ、いいか」と思った。ntpdateをcronで回しても個人用途には必要十分かもしれない。

ウィルス対策ClamAV

以前に使ったAviraは提供終了、という事でこの記事を参考にしました。

今のメジャーらしいClamAVに決定。一生懸命に公式サイトから手動で

wget http://pkgs.repoforge.org/clamav/clamav-0.98.4-1.el7.rf.x86_64.rpm
wget http://pkgs.repoforge.org/clamav/clamav-db-0.98.4-1.el7.rf.x86_64.rpm
rpm -ivh clamav-db-0.98.4-1.el7.rf.x86_64.rpm
rpm -ivh clamav-0.98.4-1.el7.rf.x86_64.rpm

などやっておりましたが、下記サイトでスパッと最適解を書かれていたので最初からこれ見ておけば良かった(‘A`)

  1. RPMforgeリポジトリ導入(RPMforge) – CentOSで自宅サーバー構築
  2. アンチウィルスソフト導入(Clam AntiVirus) – CentOSで自宅サーバー構築

このやり方なら次回のyum updateにclamavも含まれるので手間いらず。サンプルのスクリプトは「発見時にrootへメール」なので後で「TwitterでMentionを飛ばす」に変更しておこうと思います。(参考:Twitterで電源をON/OFF。フィジカルコンピューティングを身近にするRaspberry Pi用ドーターカード徒労日記 | 徒労日記

パターンファイルを手動でアップデートをしてみます。root必須。

# freshclam -v
Current working dir is /var/clamav
Max retries == 3
ClamAV update process started at Sat Sep 27 23:56:55 2014
Using IPv6 aware code
Querying current.cvd.clamav.net
TTL: 1166
Software version from DNS: 0.98.4
main.cvd version from DNS: 55
main.cld is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)
daily.cvd version from DNS: 19444
daily.cvd is up to date (version: 19444, sigs: 1163475, f-level: 63, builder: neo)
bytecode.cvd version from DNS: 242
bytecode.cvd is up to date (version: 242, sigs: 46, f-level: 63, builder: dgoddard)

終わったら起動と自動起動登録。7.x系からchkconfigに変わり、sytemctlコマンドでデーモンの実行を管理するそうな。

# systemctl start clamd
# systemctl enable clamd

WordPressサーバの必要モジュールを入れる

先にnginxインストール

LPICの資格勉強をした際にnginxがやたら出てきて苦しめられたので、実際使ってみる事にします。

nginx – Wikipedia


nginx(発音は「えんじんえっくす」[3])は、フリーかつオープンソースWebサーバである。加えて、HTTPSMTPPOP3IMAPリバースプロキシの機能も持つ。処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されている。

参考にしたのは下記サイト。

書いてあるままレポジトリを追加してからnginxをインストールしました。

iptablesじゃなくてfirewalld

httpとBackWpUp用のftpポートを許可する必要があります。
これまでのiptablesも動作はしますが、そのフロントエンドとなるfirewalldというデーモンが7.x系から実装されました。変更や操作は今後このfirewalldに対して行います。以下サイトを参考にやってみます。

# systemctl start firewalld
# systemctl enable firewalld
# firewall-cmd --state
running
#
# firewall-cmd --list-all-zones

中略

public (default, active)
  interfaces: eno16777736
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

中略

#
# firewall-cmd --add-service=ftp
success
# firewall-cmd --add-service=ftp --permanent
success
#
# firewall-cmd --add-service=http
success
# firewall-cmd --add-service=http --permanent
success
#
#  firewall-cmd --list-services
dhcpv6-client ftp http ssh
#
# firewall-cmd --list-all --zone=public
public (default, active)
  interfaces: eno16777736
  sources:
  services: dhcpv6-client ftp http ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

キマシ!

20130928-04これだけだとnginxは自動起動登録されてません。忘れず登録しましょう。

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx
nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
   Active: active (running) since 木 2014-10-02 20:00:13 JST; 4s ago
     Docs: http://nginx.org/en/docs/
  Process: 3658 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
  Process: 3656 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 3660 (nginx)
   CGroup: /system.slice/nginx.service
           tq3660 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           mq3661 nginx: worker process

 

PHP-FPM

nginxでPHPを扱うためのモジュールを追加します。そのPHP-FPMは入れる前に一度remiリポジトリを適用してから最新にしたほうが良い、との事でその通りに実行。

# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# rpm -ivh epel-release-7-2.noarch.rpm
# rpm -ivh remi-release-7.rpm
# yum update
# yum --enablerepo=remi install php php-fpm

設定ファイル/etc/php-fpm.d/www.confのうち、

pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10

の部分だけ数字を変更しました。user:groupはそのままapache:apacheです。
あとは起動と次回の起動登録をして動作を確かめます。

# systemctl start php-fpm
# systemctl enable php-fpm
ln -s '/usr/lib/systemd/system/php-fpm.service' '/etc/systemd/system/multi-user.target.wants/php-fpm.service'

# systemctl status php-fpm
php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled)
Active: active (running) since 日 2014-09-28 13:20:36 JST; 1min 54s ago
Main PID: 3938 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/php-fpm.service
tq3938 php-fpm: master process (/etc/php-fpm.conf)
tq3939 php-fpm: pool www
tq3940 php-fpm: pool www
tq3941 php-fpm: pool www
tq3942 php-fpm: pool www
mq3943 php-fpm: pool www

9月 28 13:20:36 localhost.localdomain systemd[1]: Starting The PHP FastCGI Process M....
9月 28 13:20:36 localhost.localdomain systemd[1]: Started The PHP FastCGI Process Ma....
Hint: Some lines were ellipsized, use -l to show in full.
#

 

MariaDB

yum install mysqlとやったら”じゃあmariadbでいいスか?”みたいに言われて焦る。ここでも時代が変わっていたか。名前が代わってる意外は普通にインストール、起動設定をかけます。

# yum -y install mariadb mariadb-server
# systemctl start mariadb
# systemctl enable mariadb
# systemctl status mariadb
mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)
   Active: active (running) since 日 2014-09-28 13:30:05 JST; 27s ago
 Main PID: 5387 (mysqld_safe)
   CGroup: /system.slice/mariadb.service
           tq5387 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           mq5545 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-...

 9月 28 13:30:03 localhost.localdomain mariadb-prepare-db-dir[5309]: You can find addi...
 9月 28 13:30:03 localhost.localdomain mariadb-prepare-db-dir[5309]: http://dev.mysql.com
 9月 28 13:30:03 localhost.localdomain mariadb-prepare-db-dir[5309]: Support MariaDB d...
 9月 28 13:30:03 localhost.localdomain mariadb-prepare-db-dir[5309]: SkySQL Ab. You ca...
 9月 28 13:30:03 localhost.localdomain mariadb-prepare-db-dir[5309]: Alternatively con...
 9月 28 13:30:03 localhost.localdomain mariadb-prepare-db-dir[5309]: http://mariadb.co...
 9月 28 13:30:03 localhost.localdomain mysqld_safe[5387]: 140928 13:30:03 mysqld_safe....
 9月 28 13:30:03 localhost.localdomain mysqld_safe[5387]: 140928 13:30:03 mysqld_safe...l
 9月 28 13:30:05 localhost.localdomain systemd[1]: Started MariaDB database server.
 9月 28 13:30:22 localhost.localdomain systemd[1]: Started MariaDB database server.
Hint: Some lines were ellipsized, use -l to show in full.

初期セットアップはウィザード形式でセットアップできる”mysql_secure_installation”コマンドを使う模様。あとは/etc/my.cnf.d/server.cnfへ文字コードの追記をしてから、バックアップのdumpファイルを復元します。

# vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8

# systemctl restart mariadb
# mysql -u root -p < xxxxxx.sql

enginxをWordpress用に編集

/etc/nginx/conf.d/default.confを

を参考にを丸ごと書き換えます。

root /var/www/wordpress;
index index.php;

server {
        listen 80 default_server;
        try_files $uri $uri/ /index.php;

        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

記事中では”fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;”として勧めていますが、当方の環境では

# tail -f /var/log/nginx/error.log
2014/09/28 21:10:17 [crit] 13383#0: *23 connect() to unix:/var/run/php-fpm/php-fpm.pid failed
 (13: Permission denied) while connecting to upstream, client: 192.168.1.xx, server: , 
request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.pid:", 
host: "192.168.1.yy"

とエラーを吐いてページが表示がされませんでした。ファイルのアクセス権をnginxの実行ユーザーにしてもダメ。このPIDを読んだ先で何か権限が不足しているような動き。
という訳でfastcgi_passは127.0.0.1:9000です。

最後にお馴染みのトラブル

やっと画面が出た!と思ったらまたもや

お使いのサーバーの PHP では MySQL 拡張を利用できないようです。

が出ました。今回はphp.iniではなく、モジュールが足りなかった様です。

yum install php-mysql php-devel
systemctl restart php-fpm

したら直りました。
どっちが必要だったんだろうか・・・。

なんとか終わった

という訳でなんとかWordpressが無事表示される所まで戻ってこれました。やっぱりそんなにスパッとはいかなかったか。7.xになって刷新された新モジュールに気づかず、後になってやり直すというパターンに時間を取られました。iptablesしかりntpqしかりMariaDBしかり。

それでも新方式を勉強するいい機会にはなりました。あとはこの徒労日記もタイミングが来たら”nginx+WP Super Cache”とかに移行できたらな、というのが展望です。その前にpermalink直さなきゃいけないのが面倒で・・・。

あ、TEMPerやってない<(;´Д`)>

2014/10/02 追記

疲れてやってなかった部分も設定しました。

CentOS7でTEMPer

忘れてたのでインストール。
SL6の時のバイナリがそのままでは動かず、結局makeしなおしです。

# yum install git gcc libusb-devel
# sudo git clone git://github.com/bitplane/temper.git
# cd temper
# make
# ./temper
02-Oct-2014 08:03,23.581625

相変わらずusb.hが入っているlibusb-develが必要ですが、SL6の時と名前が変わっていて最初見つけられませんでした。libusb-develと指定したら”libusb-devel.x86_64 1:0.1.4-3.el7″が無事導入されて動き出しました。

vsftpdでFTPサーバ

あまり使いたくはないんですが、CentOS7でも使える様にしました。WordpressをBackWpUpでバックアップする際の無料保存先が今のところFTPサーバしか無いので。Dropboxの認証バグ?が早く直ってくれないかなと。

メモとして/etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
local_root=FTPRoot
use_localtime=YES

pasv_addr_resolve=YES
pasv_address=xxxxxxxxx.xxxxx.com
pasv_min_port=60000
pasv_max_port=60030

log_ftp_protocol=YES
dual_log_enable=YES

ftpusersはデフォルト、chroot_list及びuser_listにはBackWpUpに設定するFTP用ユーザー名だけを記載してあります。chroot_listは動作上空でいいとは思うのですが、そうすると500 OOPSなるエラーでログインできなくなります。

あとは/etc/hosts.allowへ許可接続元アドレスを追記、/etc/hosts.denyへ全不許可を入れます。

# vi /etc/hosts.allow
vsftpd:xxx.xxx.xxx.xxx

# vi /etc/hosts.deny
vsftpd:ALL

まだ終わりませんでした。SELINUXが残っていたため、ファイルのアップロードができずエラー。こちらのサイトで解決しました。

ぱそくま パソコンなんでも辞典 | linux > vsftpd > vsftpdサーバーに接続できない場合の対処

# setsebool allow_ftpd_full_access on
# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off

FTPRoot自体は許可しなくても大丈夫でした。

cifsアクセス

Windowsの共有フォルダをマウントするにはcifsのモジュールが必要。

yum install cifs-utils

mountで接続する際は-oでusername,passwordの記載が必要になります。

コメントを残す