WEB server
初代
ファイルサーバー
|
初代サーバー (Fedora Core 8)設定初代の自宅サーバー (Fedora Core 8) の設定メモです.初代サーバーの引退したので,このページの更新は完了しています. 目次初代サーバー (2008.07.21—2012.06.10)ネットオークションで落札した下の写真のPCを使っていました.当時でも,この程度のPCは見つけるのが大変なくらい古いものですが,サーバーには十分です.Fedora Core 8を入れて運用してました.
2011年3月11日の東北地方太平洋沖地震の時は本棚から落ちたのですが,壊れることもなく,その後 1年以上も稼働しました.しかし,少しずつ挙動がおかしくなってきたので,引退させることを決意しました.最終稼働日は,2012年6月10日です.約4年間,ほとんど止まることなくWEBサーバーとしての役割を果たしました. 全文検索システム NamazuWEBページがある程度大きくなると,検索システムを導入したくなります.私は,フリーの日本語全文検索システム Namazu を使っています.ここでは,その設定と運営に関するテクニックを紹介します.とはいえ,このページの多くの情報は「改訂 Namazuシステムの構築と活用」から得ています.また,私が最初に Namazu を設定したときには,「Fedoraで自宅サーバー構築」の「サイト内検索システム構築(Namazu)」を全面的にまねました. NamazuとはNamazuは,日本語全文検索システムです.フリーで ,Linux や Windows に対応しています.Webの全文検索システムにもってこいです.私のWebページの検索も,Namazuを使わせてもらっています. Namazuのみでは,WEB内全文検索システムができるわけではありません.下の表に示すプログラムも使います.kakashiは,漢字仮名交じり文章を平仮名やローマ字綴りの文に変換するプログラムですが,ここでは分かち書き機能を使います.分かち書きとは,文を単語毎に区切る文章です.
インストールと設定インストールと設定は,結構面倒です.私の場合,以下に示す作業を行いました.
私の mknmzrc は,次の通りです.元ものあったコメント (#以降)はすべて取り除いています. 001 $ADDRESS = 'ymm10m34@khaki.plala.or.jp'; 002 $HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}|php"; 003 $ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text 004 "|.*\\.gz|.*\\.Z|.*\\.bz2" . # Compressed files 005 "|.*\\.pdf|.*\\.ps" . # PDF, PostScript 006 "|.*\\.tex|.*\\.dvi" . # TeX, DVI 007 "|.*\\.rpm|.*\\.deb" . # RPM, DEB 008 "|.*\\.doc|.*\\.xls|.*\\.pp[st]" . # Word, Excel, PowerPoint 009 "|.*\\.docx|.*\\.xlsx|.*\\.pp[st]x" . # MS-OfficeOpenXML Word, Excel, PowerPoint 010 "|.*\\.vs[dst]|.*\\.v[dst]x" . # Visio 011 "|.*\\.j[sabf]w|.*\\.jtd" . # Ichitaro 4, 5, 6, 7, 8 012 "|.*\\.sx[widc]" . # OpenOffice Writer,Calc,Impress,Draw 013 "|.*\\.od[tspg]" . # OpenOffice2.0 014 "|.*\\.rtf" . # Rich Text Format 015 "|.*\\.hdml|.*\\.mht" . # HDML MHTML 016 "|.*\\.mp3" . # MP3 017 "|.*\\.gnumeric" . # Gnumeric 018 "|.*\\.kwd|.*\\.ksp" . # KWord, KSpread 019 "|.*\\.kpr|.*\\.flw" . # KPresenter, Kivio 020 "|.*\\.eml|\\d+|[-\\w]+\\.[1-9n]"; # Mail/News, man 021 $DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*"; 022 ;$DENY_DDN = "con|aux|nul|prn|lpt[1-9]|com[1-9][0-9]?|clock\$|xmsxxxx0"; 023 $EXCLUDE_PATH = undef; 024 $DIRECTORY_INDEX = "index.html|index.php"; 025 $REMAIN_HEADER = "From|Date|Message-ID"; 026 $SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size"; 027 $META_TAGS = "keywords|description"; 028 %FIELD_ALIASES = ('title' => 'subject', 'author' => 'from'); 029 #$NON_SEPARATION_ELEMENTS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'. 030 'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO'; 031 $HTML_ATTRIBUTES = 'ALT|SUMMARY|TITLE'; 032 $ON_MEMORY_MAX = 10000000; 033 $FILE_SIZE_MAX = 20000000; 034 $TEXT_SIZE_MAX = 6000000; 035 $WORD_LENG_MAX = 128; 036 %Weight = 037 ( 038 'html' => { 039 'title ' => 16, 040 'h1' => 8, 041 'h2' => 7, 042 'h3' => 6, 043 'h4' => 5, 044 'h5' => 4, 045 'h6' => 3, 046 'a' => 4, 047 'strong' => 2, 048 'em' => 2, 049 'kbd' => 2, 050 'samp' => 2, 051 'var' => 2, 052 'code' => 2, 053 'cite' => 2, 054 'abbr' => 2, 055 'acronym'=> 2, 056 'dfn' => 2, 057 }, 058 'metakey' => 32, # for <meta name="keywords" content="foo bar"> 059 'headers' => 8, # for Mail/News' headers 060 ); 061 $INVALID_LENG = 128; 062 $MAX_FIELD_LENGTH = 200; 063 $NKF = "module_nkf"; 064 $KAKASI = "module_kakasi -ieuc -oeuc -w"; 065 $CHASEN = "no"; 066 $CHASEN_NOUN = "no"; 067 # $MECAB = "/usr/bin/mecab -Owakati -b 8192"; 068 $WAKATI = $KAKASI; 069 # $LIBDIR = "@PERLLIBDIR@"; 070 # $FILTERDIR = "@FILTERDIR@"; 071 # $TEMPLATEDIR = "@TEMPLATEDIR@"; 072 073 バックアップバックアップ用スクリプトサーバーの運用では,データを失わないようにすることが最も重要です.そのために,データのバックアップが効果的です.これは,手動ではとても面倒なので,自動的にコンピューターにやらせることにします.そこで,このページを参考にして,次のような Perl のスクリプトを書きました.これを coron を使い定期的に実行させると,「/home」と「データベース」が自動的にバックアップできます. 001 #!/usr/bin/perl 002 #============================================================================ 003 # サーバーのデータバックアップ 004 # 元ネタは、次のWEBページ. 005 # http://lucenhangul.com/wiki/lucenwiki?itemid=68 006 # ここに書かれていたシェルスクリプトを Perl に直した. 007 # Masashi Yamamoto 008 # ymm10m34@khaki.plala.or.jp 009 #============================================================================ 010 $today = `date +%Y%m%d`; # 本日の日付 011 $oldday = `date --d "1 months ago" +%Y%m%d`; # これよりも古いものは削除 012 $mysql = "/usr/bin/mysql"; 013 $db_dump = "/usr/bin/mysqldump"; 014 $db_user = "xxxxxxxxx"; # データベースのユーザー名 015 $db_passwd = "xxxxxxxxx"; # データベースのパスワード 016 $home_dir = "/home"; # バックアップ対象ディレクトリー 017 $backup_dir = "/mnt/LinkStation/web_backup"; # バックアップの場所 018 $backup_HOME = "HOME"; 019 $backup_DB = "DB"; 020 $log_file = "log.txt"; 021 022 chomp $today; 023 chomp $oldday; 024 025 &open_log; 026 &mk_dir; 027 &home_backup; 028 &db_backup; 029 &rm_old_backup; 030 &close_log; 031 032 #============================================================================ 033 # ログファイルのオープン 034 #============================================================================ 035 sub open_log{ 036 my $time; 037 $time=localtime; 038 open(LOG, ">>$log_file"); 039 printf LOG "$time\n"; 040 printf LOG "$today\n"; 041 } 042 043 #============================================================================ 044 # ログファイルのクローズ 045 #============================================================================ 046 sub close_log{ 047 my $time; 048 $time=localtime; 049 printf LOG "$time\n\n"; 050 close LOG; 051 } 052 053 #============================================================================ 054 # バックアップ用のディレクトリーの作成 055 #============================================================================ 056 sub mk_dir{ 057 if(! -e "$backup_dir/$today"){ 058 059 `mkdir -p $backup_dir/$today/$backup_DB`; 060 if(-d "$backup_dir/$today/$backup_DB"){ 061 printf LOG "make DB \t$backup_dir/$today/$backup_DB \n"; 062 } 063 064 `mkdir -p $backup_dir/$today/$backup_HOME`; 065 if(-d "$backup_dir/$today/$backup_HOME"){ 066 printf LOG "make HOME\t$backup_dir/$today/$backup_HOME\n"; 067 } 068 } 069 } 070 071 #============================================================================ 072 # ホームディレクトリーのバックアップ 073 #============================================================================ 074 sub home_backup{ 075 my $user, @user_list; 076 my $ret; 077 078 opendir(DIR, $home_dir); 079 080 while (defined($user=readdir(DIR))){ # ディレクトリー名の取得 081 if((-d $home_dir.'/'.$user) && 082 ($user ne ".") && ($user ne "..")){ 083 push(@user_list, $user); 084 } 085 } 086 087 foreach(@user_list){ # tarを使ってバックアップ 088 $ret=system("tar cPfz $backup_dir/$today/$backup_HOME/$_.tar.gz \\ 089 $home_dir/$_"); 090 printf LOG "backup home dir\t$_\t\t$ret\n"; 091 } 092 093 closedir(DIR); 094 } 095 096 #============================================================================ 097 # データベースのバックアップ 098 #============================================================================ 099 sub db_backup(){ 100 my $database, @list; 101 my $ret; 102 103 $database = 104 `$mysql -u $db_user --password=$db_passwd -e "show databases" | 105 grep -v Database`; 106 107 @list = split(/\n/,$database); 108 109 foreach(@list){ 110 $ret = system("$db_dump -u $db_user --password=$db_passwd $_ > \\ 111 $backup_dir/$today/$backup_DB/$_.DB.sql"); 112 printf LOG "backup data base\t$_\t\t$ret\n"; 113 } 114 } 115 116 #============================================================================ 117 # 期限の過ぎたバックアップの削除 118 #============================================================================ 119 sub rm_old_backup(){ 120 my $dir, @dir_list; 121 my $ret; 122 123 opendir(DIR, $backup_dir); 124 125 while (defined($dir=readdir(DIR))){ # ディレクトリー名の取得 126 if((-d $backup_dir.'/'.$dir) && 127 ($dir ne ".") && ($dir ne "..")){ 128 push(@dir_list, $dir); 129 } 130 } 131 132 close DIR; 133 134 @sort_dir_list = sort{$a<=>$b}@dir_list; 135 136 for($i=0; $i<@sort_dir_list; $i++){ 137 if(($i < @sort_dir_list-1) && ($sort_dir_list[$i]<$oldday)){ 138 $ret = system("rm -rf $backup_dir/$sort_dir_list[$i]"); 139 printf LOG "delete old backup\t$sort_dir_list[$i]\t$ret\n"; 140 } 141 } 142 } 143 144 定期的に実行いざというときに大事なデータを復旧させるためには,まめに,バックアップ作業を行っておく必要があります.サーバーのハードディスクが壊れたとき,バックアップは二年前のものしかないとなると泣けてきます.定期的にコマンドを実行させるには,cron を使うのが良いでしょう.私の場合は,1週間に1回バックアップをとれば十分なので,/var/spool/cron/root に次のように記述しました. 03 04 * * 2 /root/BackUp/backup.pl これで,毎週火曜日の AM4:03 に定期的にバックアップスクリプトが実行されます. バックアップメディアサーバーマシーンのハードディスクにバックアップをとったのではあまり意味がありません.サーバーのハードディスクが故障したとき,バックアップのデータも失われる可能性が高いからです.サーバーマシーンの他のハードディスクという方法もありますが,サーバーマシーンが落下すると,同時にハードディスクが壊れるでしょう.DVD-RAMは良い方法かもしれません.残念ながら,私のサーバーには,DVD-RAMはありません.自宅を見渡したところ,Buffalo社のLinkStationというNASサーバーがありまた.WEBサーバーとは別の部屋にありますので,これに定期的にバックアップを保存することにします.家が燃えたり,地震でつぶれない限り,安心です.とはいえ,このバックアップもたまには,他のメディアにバックアップととる必要があるかもしれません.
ページ作成情報参考資料
更新履歴
|