Undefined Database Configuration B地区ex|お勉強:MySQLというかLAMP環境構築?


exB - extreme B-AREA -

多くの常連が無駄死にで無かったことの証の為に・・・ 再び一陣の先頭を守る為に! 正門よ!私は帰ってきた!!

サーバ管理 - MySQLというかLAMP環境構築?

DTI:ServersMan@VPSで環境構築しようとしてる人には、多少役に立つかもしれない。ちなみにServerManではない、ServersManだから、な!鯖はCentOS5。

初稿:2007-10-12最終更新:2010-08-31

何をしようとしてるのか

鯖移転である。あらかじめ旧鯖(ファーストサーバ:プロビジネス20、現在は新規募集終了)のデータや設定を残しておく。旧鯖ではApacheとPHPとMySQLを利用したサイトを運用していた。所謂LAMP環境である。

初稿の時点では自宅鯖からファーストサーバへの移行メモとして書き始めたのだが、さらに移転することになった。だって高いんだもん(機能面では同時コネクション数制限を除いて一切不満はなかったのだが…)。やることに変わりはないので無問題かな、と。

ウェブコンテンツのバックアップ

主にドキュメントルート以下のファイルのことな。

  • ファイルをFTPで直接ダウンロード(ローカルにバックアップがあれば条件付き上書きとかで
  • tar+gzipで固めた後にダウンロード

比較的コンテンツが少ない、CGIなんかを使ってない場合は前者でよいだろう。ファイル数が多かったりパーミッションの設定も引き継ぎたい場合は後者。うちの場合、パーミッションが重要なものがアクセス解析くらいしかないので前者のことが多い。それと以前何も考えずに/var/www以下(俺はバーチャルホストのホームディレクトリをここに設定することが多いんで)をアーカイブしたら10GB以上になっちゃって扱いに困ったり。なので固めるにしてもせいぜい1GB程度までに留めたほうがよいと思われ。

データベースのバックアップ

俺はMySQLしかほとんど使わないので、phpMyAdmin経由でDB/テーブルをダンプ&ダウンロード。日本語は文字化けしてないか注意。不安なら何パターンか残しておくとよい。本来必要なDBだけでよいが、念のため全体のダンプも取っておく。

その他設定のバックアップ

LAMPで重要なのはだいたい次の通り。

  • /etc/httpd/conf、/etc/httpd/conf.d以下
  • /etc/php.conf、/etc/php.d/以下
  • /etc/my.cnf

あとはユーザ情報くらいかしら。OS登録ユーザが多いなら/etc/passwdもコピっておくとか。俺は追加したユーザはせいぜい10人とかなので手作業。yumでリポリトジ追加とかしてたら/etc/yum.d/以下も残すとか。cronでいろいろ回してるならそのへんも。

メール関連

すまんのう、最近独自ドメインのメールはほぼgoogle Apps任せで自鯖にメール環境構築してないのだ。自前でSMTP機能が必要になったときにはpostfixなり入れるけど、MTAとして動かすだけでメールボックスを自分で持つことはしないのよね。SPAM/踏み台対策とかメールボックス管理とかウェブメール対応とか携帯対応とか、そういうの自分でやるのがもう面倒で。実際google Appsはよいよ、SPAMフィルタはずいぶん賢くなったしPOPもIMAPも対応してるし。

最初の作業

新鯖入荷(DTI:ServersMan@VPS)。この値段(Standard 980円/月)でroot権限使えてストレージ30GBで転送量も原則無制限とかあり得ないだろ。旧鯖とはOSのメジャーバージョンに変化なしなので移行は楽な部類のはず。

ServerMan@VPSに限らず専用の管理画面が用意されてるサービスは多いが、とりあえず作業はコンソールで行うのが基本であろう(故にシェルアクセスが許可されていないサービスはどんなにコストパフォーマンスがよかろうが論外である)。管理画面を使わざるを得ないのはsshのインストールや、シェルアクセス用のユーザ追加くらいか。このへんの作業が必要かどうかはサービス依存なので、sshが開通しログイン可能なユーザも追加された前提で勧める。

ぶっちゃけ、webmin(うちと同じStyleShoutさんのWebTemplateなのだ)より使いやすい管理ツール見たことないんだけど。

sshの設定

多くの場合、初期状態ではパスワード認証になっていると思われる。ほんとはssh鍵による認証に変えるのがよいのだが、俺様には鍵を持ち歩く習慣がないので、とりあえず最低限のセキュリティとしてssh可能なユーザを制限しておく。

# vi /etc/ssh/sshd_config
AllowUsers user1 user2 user3 ...

間違ってもrootとか含めないこと(PermitRootLogin noのほうが優先されるにしても)。なお、ありがちなアカウントを狙ったアクセスがどれくらいあるかは

# grep invalid /var/log/秒ure* | tail -20

なんて打ってやると、どんだけアタック喰らってるかわかる。この中に使用しているユーザ名が含まれるようなら(それが自分がアクセスした際のパスワードミスとかでなければ)、もっと推測されにくいユーザ名に変更するなりssh鍵認証に変えるなりの対策が必要だろう。ポート変更はあまりお勧めしない。いざちゅーとき自分でいくつにしたか忘れる可能性大だし、ポートスキャンされたら意味ないし、knockd併用するほうがずっとよい。まあbruteforceと呼べるほどのアタックであれば(SSH以外も含め)根本的に対策を見直すべきで、それはここで語るには大きすぎる話。

MySQLのインストール

作業の前に言語の確認。

$ echo $LANG
ja_JP.eucJP

とかだったり。好みに応じて/etc/sysconfig/i18nを編集。日本語UTF-8なら

LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
LINGUAS="ja en"

英語なら

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LINGUAS=en

UTF-8ではなくutf8、という指摘もあるみたいなので動くほうで。

パッケージか、ソースか

好みのバージョンが選べない(選びにくい)、それがパッケージ管理のデメリット。まあ最新である必要はないと思うんだ。

オレが思うに、両者混在みたいなのがいくない。以前はなかなか欲しいものがパッケージにないので徹底的にソースからビルドしていたのだけど、今は最新でこそないもののたいていのアプリはパッケージ化されてるし、以前ほど情熱がないのですっかりパッケージ派になりましたとさ。

というわけで、思う存分yumを使わせてもらう。

# yum grouplist
Installed Groups:
   System Tools
   Text-based Internet
   DNS Name Server
   Dialup Networking Support
   FTP Server
   Network Servers
   Legacy Software Development
   Java
   Java Development
   Legacy Software Support
   Mail Server
   Server Configuration Tools
   Administration Tools
Available Groups:
   Office/Productivity
   Engineering and Scientific
   Development Libraries
   Editors
   GNOME Software Development
   MySQL Database
   X Software Development
   Virtualization
   Legacy Network Server
   GNOME Desktop Environment
   Authoring and Publishing
   Games and Entertainment
   XFCE-4.4
   Emacs
   X Window System
   Graphics
   Ruby
   Windows File Server
   Printing Support
   KDE Software Development
   KDE (K Desktop Environment)
   Horde
   Sound and Video
   PostgreSQL Database
   News Server
   Web Server
   Development Tools
   Yum Utilities
   FreeNX and NX
   Graphical Internet
Done

おりゃ、Apacheすら入ってないや(ファーストサーバ:プロビジネス20の話、ServersMan@VPSでは入ってる)。先にApacheを入れておかないと面倒なことになるんで入れておく(解説略)。強調は入れておいたほうが何かとよいものな。んで、MySQLへ。

# yum -y groupinstall "MySQL Database"
=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 MySQL-python            i386       1.2.1-1          base               82 k
 libdbi-dbd-mysql        i386       0.8.1a-1.2.2     base               17 k
 mysql                   i386       5.0.22-2.1.0.1   updates           3.0 M
 mysql-connector-odbc    i386       3.51.12-2.2      base              142 k
 mysql-server            i386       5.0.22-2.1.0.1   updates            10 M
 perl-DBD-MySQL          i386       3.0007-1.fc6     base              147 k

Transaction Summary
=============================================================================
Install      6 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
(略)
Complete!

初期設定はコマンドでやってもいいのだけど、phpMyAdmin(以下PMA)を利用することにして、とっとと起動。

# chkconfig --level 2345 mysqld on
# service mysqld start
(初回起動時はいろいろメッセージが出てくるが気にしない)
Starting MySQL:            [  OK  ]
# service mysqld status
mysqld (pid 21994) is running...

phpMyAdminの設置

さて続いてはPMAの設置。へぇ、もう2.11までリリースされてるんだ。

臨時にユーザ「apache」に対してシェルを与える。邪道だよな。

# vi /etc/passwd
apache:x:48:48:Apache:/var/www:/bin/bash
# chown -R apache:apache /var/www/html
# su - apache
$ cd /var/www/html ←設置したいドキュメントルートな
$ wget http://prdownloads.sourceforge.net/phpmyadmin/
 phpMyAdmin-2.11.1-all-languages.tar.gz?download
$ gunzip -c phpMyAdmin-2.11.1-all-languages.tar.gz | tar xvf -
$ mv phpMyAdmin-2.11.1-all-languages myadmin

http://IPアドレス/myadminに設置。でもこれだけだとまだ何か足りなかったような。

apacheに対してシェルを与えたのは、設置先であるapacheデフォルトのドキュメントルート、/var/www/htmlのオーナーがapacheだったからで深い意味はなく、別にrootのまま作業して後から所有者変更でも構わないし、バーチャルホストに設置するならそのオーナーユーザーで作業すりゃいい。

groupinstallでは含まれないものがたくさんある

devel系はほとんどそうだ。おいおい必要になるだろうからDevelopment ToolsやDevelopment Librariesグループもインストールしとくとよい。

php-mysqlほかいろいろインストール

# yum list php*
Installed Packages
php.i386                                 5.1.6-15.el5           installed
php-cli.i386                             5.1.6-15.el5           installed
php-common.i386                          5.1.6-15.el5           installed
php-ldap.i386                            5.1.6-15.el5           installed
php-pdo.i386                             5.1.6-15.el5           installed
Available Packages
php-bcmath.i386                          5.1.6-15.el5           updates
php-dba.i386                             5.1.6-15.el5           updates
php-dbase.i386                           5.1.6-12.el5.centos    extras
php-devel.i386                           5.1.6-15.el5           updates
php-gd.i386                              5.1.6-15.el5           updates
php-imap.i386                            5.1.6-15.el5           updates
php-mbstring.i386                        5.1.6-15.el5           updates
php-mcrypt.i386                          5.1.6-12.el5.centos    extras
php-mhash.i386                           5.1.6-12.el5.centos    extras
php-mysql.i386                           5.1.6-15.el5           updates
php-ncurses.i386                         5.1.6-15.el5           updates
php-odbc.i386                            5.1.6-15.el5           updates
php-pear.noarch                          1:1.4.9-4              base
php-pear-Auth-SASL.noarch                1.0.2-4.el5.centos     extras
php-pear-DB.noarch                       1.7.6-7.el5.centos     extras
php-pear-Date.noarch                     1.4.7-2.el5.centos     extras
php-pear-File.noarch                     1.2.2-1.el5.centos     extras
php-pear-HTTP-Request.noarch             1.4.1-1.el5.centos     extras
php-pear-Log.noarch                      1.9.11-1.el5.centos    extras
php-pear-MDB2.noarch                     2.4.1-1.el5.centos     extras
php-pear-MDB2-Driver-mysql.noarch        1.4.1-1.el5.centos     extras
php-pear-Mail.noarch                     1.1.14-1.el5.centos    extras
php-pear-Mail-Mime.noarch                1.4.0-1.el5.centos     extras
php-pear-Net-SMTP.noarch                 1.2.10-1.el5.centos    extras
php-pear-Net-Sieve.noarch                1.1.5-2.el5.centos     extras
php-pear-Net-Socket.noarch               1.0.8-1.el5.centos     extras
php-pear-Net-URL.noarch                  1.0.15-1.el5.centos    extras
php-pecl-Fileinfo.i386                   1.0.4-3.el5.centos     extras
php-pecl-memcache.i386                   2.1.2-1.el5.centos     extras
php-pgsql.i386                           5.1.6-15.el5           updates
php-readline.i386                        5.1.6-12.el5.centos    extras
php-snmp.i386                            5.1.6-15.el5           updates
php-soap.i386                            5.1.6-15.el5           updates
php-tidy.i386                            5.1.6-12.el5.centos    extras
php-xml.i386                             5.1.6-15.el5           updates
php-xmlrpc.i386                          5.1.6-15.el5           update

そうだよね、groupinstallの状態だといろいろ足りないんだった。必要なのは強調してあるやつだけなんだが、面倒なので全部入れとく。

# yum -y install php*
(略)
Complete!

Apacheもapxsとか入ってないはずなので追加インストールしとく。

# yum install httpd-devel
(略)
Complete!

ではApacheを起動してみる。

# chkconfig --level 2345 httpd on
# service httpd start

ではブラウザでhttp://ip.address/myadmin/にアクセスしてみよう。きっと怒られるから。

!お使いの設定ファイルに MySQL のデフォルト特権アカウントに相当する設定 (root ユーザでパスワードなし) が含まれています。お使いの MySQL サーバはこのデフォルト設定で動作しているため不正アクセス可能な状態になっています。このセキュリティーホールはかならず閉ざしてください

だから今から設定するんぢゃねーか…(ちなみにこのエラーメッセージでググると何故か今ご覧のページがトップでヒットする、他にいくらでもよさそうなページがありそうなものだが…)。と、その前に肝心なことを忘れてた。うちの場合、UTF8のままだとデータが化けるのよね。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
default-character-set = ujis
skip-character-set-client-handshake

[mysql.server]
user=mysql
basedir=/var/lib

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

この後は旧鯖からexportしたtableを新鯖でimportすればたぶんおk。便利な時代になったもんよ。

おっとapacheのログインシェルはちゃんと戻しておかないと。MYSQLのrootのパスワードもちゃんと設定しないと。それとPMA上でrootパスワードを設定した場合リロードするとアクセスできなくなるので(あたりまえ)、config.inc.phpにパスワードを書いておくこと。

それと剥き身のままでは怖いので、PMAの認証方法を変えるか直接ベーシック認証でもかけておくように。

SQLインポートでの注意

PMA経由でダンプしたDB情報をインポートする場合、PHPがデフォルト設定のままだとアップロード可能なファイルサイズ制限に引っ掛かることがある。たぶん2MBになってるはずだ。DBによってはダンプサイズも何十、何百MBとかになるだろうから、そんなときはphp.iniの設定を一時的に変更してやる。

# vi /etc/php.ini
upload_max_filesize = 16M

いくつにするかはファイルサイズ次第で。作業が終わったら元に戻しておいたほうが何かとよいかと。あぷろだ設置とかで制限突破するなら個別に.htaccessで

php_value upload_max_filesize 1000M

なり書いてやればよい話。ま、たいていは設置するあぷろだ側でそのへんは対策済みと思うが。

なお値を設定する際、memory_limit>post_max_size>upload_max_filesizeという関係があるようなので注意。

vsftpdの設定

標準で入ってるFTP Serverグループに含まれてるのはvsftpd、特に問題はないが起動しておくのを忘れずに。

# chkconfig --level 2345 vsftpd on
# service vsftpd start

昔ならいざ知らず、ラッパー経由にする必要ってあるのかな。あるんだろうな。

ASCII転送を有効にする

proftpdばっかり使ってたおかげで罠に引っ掛かった夏の日の悪夢を忘れるところだった。

# vi /etc/vsftpd/vsftpd.conf
ascii_upload_enable=YES
ascii_download_enable=YES

この部分がデフォルトでコメントアウトされてるおかげでFTPでファイルを転送した際に改行コードが狂いまくる→CGIが動かにゃないわけよ。エラーログにPremature end of script headersが出まくって先頭行(perlのパス指定)の末尾にハイフン(-)追記したら動いた、なんてケースであればこれを疑ってっみるとよい。

ついでにTimeOutが120(秒)では短すぎるので1800(秒=30分)にしとく。

idle_session_timeout=1800
data_connection_timeout=1800

chrootとかユーザアクセス関連の設定

バーチャルホスト貸しとかするなら必須の設定であるホームディレクトリ以外へのアクセス禁止、いわゆるchrootを設定するにはchroot_list_enableとchroot_list_fileを有効にしておく必要がある。

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list …ファイル名は任意な

これで/etc/vsftpd.chroot_listに記述したユーザはFTP上のルートがホームディレクトリになるわけだが、ホーム以外へのアクセスを許可しないユーザのほうが多い場合デフォルトはアクセスを禁止し、特権ユーザのみ登録するほうが運用上楽である(apacheでいうところのallow,denyなのかdeny,allowなのか)。そんな場合はchroot_local_userを有効にする。

chroot_local_user=YES

これで先ほどとは逆にchroot_list_fileに記述されたユーザだけがホーム以外にもアクセスできるようになる。どちらにするかは好みだが、普通はこちらにしておくほうが楽じゃないだろか(allow,denyだと追加漏れのリスクがあるからね!

あとアクセス制御関連ではuserlist_enableをYESにしておくと、/etc/vsftpd.user_listに記述したユーザ以外のアクセスが拒否される。これを有効にするか否かは管理ユーザの数やFTPを開放するかどうかのポリシー次第だろう。俺は無効のまま。

anonymousもポリシー次第だろうけど、俺は開放する気ないので閉じておく。

anonymous_enable=NO

時刻設定

ntpdは標準で入ってるけど起動してない。

# service ntpd start
# chkconfig ntpd on

dateで同期取れてるか確認。とりあえずこれだけでもよいが、もう少し調整したい人は別途NTPの説明を読んでくれ。

参考:ntpdateとntpdについて

参照先のNTPサーバは、鯖設置先≒データセンターが海外ならデフォルトのcentos.pool.ntp.orgで構わないだろうが、国内ならnictやmfeedとかに変えるべき。

# vi /etc/ntp.conf

server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
server ntp.nict.jp

…本来これで何の問題もないはずなのだが、ステータスを確認するとおかしなことになってる。

# service ntpd status
ntpd dead but pid file exists

確かに/var/lock/subsysと/var/runにお化けが残ってる。ログを見てみた。

# tail -20 /var/log/messages | grep ntp
ntpd[40585]: ntpd 4.2.2p1@1.1570-o Sat Dec 19 00:58:16 UTC 2009 (1)
ntpd[40586]: precision = 1.000 usec
ntpd[40586]: Listening on interface wildcard, 0.0.0.0#123 Disabled
ntpd[40586]: Listening on interface wildcard, ::#123 Disabled
ntpd[40586]: Listening on interface lo, ::1#123 Enabled
ntpd[40586]: Listening on interface venet0, 2001:2e8:618:0:2:1:0:5d#123 Enabled
ntpd[40586]: Listening on interface lo, 127.0.0.1#123 Enabled
ntpd[40586]: Listening on interface venet0, 127.0.0.1#123 Enabled
ntpd[40586]: Listening on interface venet0:0, 182.163.94.93#123 Enabled
ntpd[40586]: kernel time sync status 0040
ntpd[40586]: getaddrinfo: "127.0.0.1" invalid host address, ignored
ntpd[40586]: getaddrinfo: "::1" invalid host address, ignored
ntpd[40586]: getaddrinfo: "127.127.1.0" invalid host address, ignored
ntpd[40586]: Cannot find user `ntp'
ntpd_initres[40591]: parent died before we finished, exiting

ローカルのホストアドレス云々についてはともかく、Cannot find user `ntp'というのがわからない。試しにお化けを消してから直接起動してみると

# /usr/sbin/ntpd
# service ntpd status
ntpd (pid 50361) is running...

ちゃんと生きてるようだ。問題があるとすれば起動スクリプトか?さらにntpdateに至ってはOperation not permittedと怒られる始末。なんでやねん。とりあえずローカルPCと比較してみた感じ時刻そのものは正確のようなので、この件はしばらく放置。

namedを起動

rep2動かす場合、鯖自身で名前解決できないとスレ取得とかに失敗するようだ。手っ取り早いのはnamedを起動しておくことかなあ。たぶんDNS Name Serverグループに最初から入ってると思う。

# chkconfig --level 2345 named on
# service named start

これだけで動く(名前解決できる)かどうかは、鯖の初期設定にもよるかもしれない。resolv.confとか。もともとwgetでファイル拾ってこれるなら大丈夫なはずなんだ。

PHPをバージョンアップ [2010-08-28]

入れたての状態ではPHPのバージョンは5.1.6。最近のPMA(Ver3以降かな)はPHP5.2以降が動作条件。執筆時点だとデフォルトのyumのリポリトジには含まれてないので、適当に探してくる。Utter Ramblingsがよいらしい。www.jasonlitka.comにあるようだがRPM-GPG-KEYがないとダメっぽいのでまずこれを取得。

# rpm –import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

続いてリポジトリの設定を追加しる。

# vi /etc/yum.repos.d/CentOS-Base.repo
↓これを追記。
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

yumでPHPをアップデート。

# yum -y update php

無事5.2系にアップされたら、不用意に他のパッケージがupdateされないようutterramblingsの設定は削除するなり無効にするなりしておくこと。

実はこのおかげで鯖標準の管理画面に入れなくなったりPMAで新規DBが作れなくなったりと実に困った事態になった。管理画面に入れないのは単に/usr/lib/php/buildに対するシンボリックリンク/etc/buildが削除されただけだったのだが、それに気付くまでは初期化依頼までしてしまったほどパニくってた。

ちなみに最近のPMAはアクセスするといきなりエラー画面みたいなのが出てセットアップスクリプトを実行しる、とか言われる。要するにこれはconfig.inc.php作成スクリプトで、これで作成したファイルを所定のディレクトリにうpするって話なのだが、最初それがわからずえらく悩んだ。もちろん手作業でconfig.inc.phpを作ってうpしてもよい。

ServersMan@VPS関連?

今回の移行で遭遇したトラブルというか。

php.iniの内容が反映されない

テスト環境にPHPファイルいくつかうpしてみたところ、open_basedir restriction in effectみたいなエラーが続出。php.iniを直接編集しても効果なしで、どうも鯖標準の管理画面のセキュリティにおける設定のが優先されるっぽい。サーバの管理→セキュリティ→PHP Settingに以下の設定項目がある。

  • Register Globals
  • Safe Mode
  • Safe Mode GID
  • Safe Mode include directory
  • Safe Mode exec directory
  • Safe Mode allowed evelope variables
  • Safe Mode protected envelope variables
  • Open basedir
  • Disable functions
  • Disable classes
  • Allow URL fopen
  • Allow URL include
  • Upload max filesize
  • Post max size
  • Max execution time
  • Max input time
  • Memory limit

ファイルサイズとかは大雑把な値しか設定できないので使いづらい。とりあえずOpen basedirの値を削除。でも気が付いたら直接編集した設定がちゃんと反映されるようになった。なんなんだ。

PHPを入れ直した

5.2にしたらいろいろ不具合が出たのでPHP5.1を入れ直したわけだが…。

# yum -y remove php*

とちょっと強引に削除。リポリトジを元に戻して

# yum -y install php*

としたのだが、これだとmod_suphpが追加されず(あたりまえ)、それが原因でPMA(2.11系)あたりで不具合が生じた。そんなわけでmod_suphp追加したわけだが、設定見ると

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

suPHP_Engine off

になってるんだよなあ…。とりあえずonにして再起動してみたけど特に影響はなかった。

鯖標準の管理画面、VPSサーバ管理ツール

ServersManじゃない、http://IPアドレス:444/login.phpでアクセスするやつ。psで確認するとプロセス名はhttpd.admservで、起動スクリプトもちゃんと登録されてるので

# service admserv start | stop | restart

で管理できる。

ServersManの削除

そもそもServersManて何だ?と思ってたんだが、モバイル環境まで含めたオンラインストレージのトンネルサービスみたいなものか。正直必要ないよなあ…。思い切って削除しとくか。

# yum erase smadmin serversman
# service httpd restart

どうしても使いたくなったらまたインストールすればいいし、インストールできなかったら480円のentryでも追加契約すりゃいいことで。

さらにリソース節約

chkconfigで稼働サービスを見ると

# chkconfig --list | grep "3:on"
admserv         0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
avahi-daemon    0:off   1:off   2:off   3:on    4:on    5:on    6:off
cced.init       0:off   1:off   2:on    3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
dovecot         0:off   1:off   2:on    3:on    4:on    5:on    6:off
haldaemon       0:off   1:off   2:off   3:on    4:on    5:on    6:off
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
mdmonitor       0:off   1:off   2:on    3:on    4:on    5:on    6:off
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
named           0:off   1:off   2:on    3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
pam_abl         0:off   1:off   2:on    3:on    4:on    5:on    6:off
pcscd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
saslauthd       0:off   1:off   2:on    3:on    4:on    5:on    6:off
sendmail        0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
xinetd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

sendmailはアラートに使うとしても、dovecot(メールボックス)とxinetdはいらんだろ。SMTPを積極利用しないならsaslauthdも要らんかもしれない。みんな止める。自動起動もoffに。

# chkconfig dovecot off
# chkconfig saslauthd off
# chkconfig xinetd off

この状態でメモリ使用状況を確かめると

# free -m
             total       used       free     shared    buffers     cached
Mem:           512        236        275          0          0          0
-/+ buffers/cache:        236        275
Swap:            0          0          0

けっこう多くね?topコマンドで見るとhttpdが多いのは仕方ないとして、admservがけっこう使ってることに気付く。管理画面起動時以外は使わないわけだから、思い切ってこいつも停止しておく(さすがに削除はせん。httpdを再起動してまたチェック。

# free -m
             total       used       free     shared    buffers     cached
Mem:           512        166        345          0          0          0
-/+ buffers/cache:        166        345
Swap:            0          0          0

三分の二以上空きなら上等だろう。参考までに、コンテンツ削除済みの旧鯖はこんな感じ。

# chkconfig --list | grep "3:on"
avahi-daemon    0:off   1:off   2:off   3:on    4:on    5:on    6:off
courier-imap    0:off   1:off   2:off   3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
haldaemon       0:off   1:off   2:off   3:on    4:on    5:on    6:off
httpd           0:off   1:off   2:off   3:on    4:off   5:off   6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
mysqld          0:off   1:off   2:off   3:on    4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
pcscd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
psa-firewall    0:off   1:off   2:off   3:on    4:on    5:on    6:off
saslauthd       0:off   1:off   2:off   3:on    4:off   5:off   6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
webmin          0:off   1:off   2:on    3:on    4:off   5:on    6:off
xfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
xinetd          0:off   1:off   2:off   3:on    4:on    5:on    6:off

# free -m
             total       used       free     shared    buffers     cached
Mem:           512         14        497          0          0          0
-/+ buffers/cache:         14        497
Swap:            0          0          0

旧鯖はhttpd動いてるってももはやバーチャルホスト運用してないからねぇ…。まあそれを差し引いても、動いてるプロセスは実は旧鯖のが多い。にもかかわらずこのメモリ使用量の少なさは驚異だ。それとも新鯖の使用量が多すぎるのか。

そんなわけで、初期設定はこんなところかな。postfixは必要になったときに追記しよう。あとは各々の環境依存になるだろうから割愛。

参考:mod_uploaderのインストール wordpressのインストール

おまけ:ブラウザベースの管理ツールを変更する

標準で用意されてる「VPSサーバ管理ツール」なるものがあまりに使いにくいので、緊急時を除きWebminを使うことにした。ま、webmin自体sshdがトラブったときの緊急用みたいなものだが。

…以前やっちゃったのよ、sshdを再起動するつもりで間違ってstopとか(そして僕は途方に暮れる)。そんときは鯖の中の人と親しかったので直接sshd起動してもらった。ま、webminに限らず管理権限のあるサービスをHTTPアクセス可能な状態にしておくのはリスクがあるわけだから、利便性と比べてどうするかは各自の判断だね。

webminのインストール

なんだかんだでこれが一番使いやすい。公式サイトのメニューてっぺんからパッケージをwget&rpmするだけのカンタンなお仕事。

最近のは“Perl Net::SSLeay”必須なので、なかったら先そっちを入れとく(これはyumでおk。

# yum -y install perl-Net-SSLeay

他に躓くようなことはないはず。

# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.760-1.noarch.rpm
# rpm -ivh webmin-1.760-1.noarch.rpm

念のためデフォルトのListen Portである10000を適当に変更したほうがよいかも。設定は“/etc/webmin/miniserv.conf”で。

# vi /etc/webmin/miniserv.conf
port=4453 ←自分が覚えやすければ何でもいい
listen=4453

んで再起動。

# service webmin restart

http://ホストアドレス:設定したポート番号/でアクセスしてみる。ログイン後、テーマをOS X Tiger風のstressfreeに変えるといい感じ。webminの使い方自体は他の解説ページでも見れ。

yumでインストール

webminはデフォルトのyumのrepositoryに含まれてないけど、公式サイトのUsing the Webmin YUM repositoryに追加方法が載ってるから、そっちのほうがいいかもね。

webminで日本語表示

全体の表示言語変更は“Webmin Configuration”の“Language”で行うが、個別の変更もログイン後の“Change Language and Theme”から“Webmin UI language”の“Personal choice”で設定してやればよい。

なおここで日本語を選択しても表示が反映されない場合はたぶんブラウザのデフォルト言語に依存する設定になっているので、“Webmin Configuration”の“Language”にある“Use language specified by browser?”で“No”を選択する。

以下、日本語表示前提で。

SSL暗号化

HTTPのプレーンテキストで管理ツールいぢるとか自殺行為に近いので暗号化しとく。“Webmin 設定”の“SSL 暗号化”を選択。

“可能であればSSLを使用可能にしますか?”と“非SSLリクエストをSSLモードにリダイレクトしますか?”を“はい”にすればおk。自己証明書なので怒られるけど気にしない。気にする人はStartSSLなりで証明書を発行してもらおう。