契約
さくらのVPS メモリ2GBコースを契約しました。
後日サーバー上で思考するゲームを開発する可能性があるため、
少しスペックの高いコースにしました。
それ以外にもSQLを導入する場合最低でも1GB、できれば2GBをお勧めします。
初期設定、鍵認証、Apache、PHP、MySQL
初期設定し、鍵認証、Apache、PHP、MySQLをインストールしました。
こちら のサイトの通りに作業をすると、無事にすべてインストールできました。
「5.鍵認証の設定」で苦労したところが2点ありました。
1点目は、"authorized_keys"ファイルに公開鍵をペーストする際に、
viエディタでINSERTモードにしていなかったので、先頭の1文字が正しくペーストされずにいて、
鍵認証でログインできなっかっという点です。
もう一点は、"chmod 600 .ssh/authorized_keys"で鍵ファイルのアクセス権を変更していなかった点です。
これはセキュリティを上げるためのオプションで、
やっていなくてもログインできると思っていたのですが、
これをやらないとログインできないという必須の作業のようです。
「Can't connect to local MySQL server through socket '/tmp/mysql.sock'」
というエラーが出た場合、ソケットの問題ですので、
こちら
を参考にしてください。
スワップファイルの確保
スワップファイルはデフォルトで2GBですが、
余裕を持たせて、16GB確保することにしました。
デフォルトの2GBをオフしなかったため、スワップは18GBになってしまいましたが、
これでよいものとしました。
スワップファイル作成時にディスク書き込み速度が550MB/sくらいと表示されていて、
ディスクの速度は相当速いものと思われます。
尚、参考にしたウェブページは忘れてしまったので掲載しません。
ごめんなさい。
JavaとTomcatのインストール
こちら のサイトの通りに作業しました。
Java 1.7はyumから、Tomcat7は圧縮ファイルからインストールしました。
この通り 、無事にインストールできました。
Javaサンプルアプリケーションのデプロイ
Windows上で、Javaサンプルアプリケーションをコンパイルし、デプロイ(配備)しました。
はじめてのJSP&サーブレット Eclipse 3.7 Indigo+Tomcat 7対応版 の6.2節の通りに、
サンプルアプリケーションを作成しました。
doGetの中身を
こちら のように修正しました。
Windows上で動作を確認し、
「エクスポート-WARファイル」でwarファイルを出力しました。
出力されたwarファイルは、
こちら です。
次に、 再びLinuxに戻り、Tomcatインストールフォルダにて、"tomcate-users.xml"を編集し、
<tomcat-users>と</tomcat-users>の間に、以下を追加します。
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="********" password="********" roles="manager-gui,admin-gui"/>
最後に、Tomcatのトップ(私の場合、"http://www.chariot-lab.com:8080/")から、"Manager App"を選択し、
「WARファイルの配備」の参照で、先ほど生成したwarファイルを選択し、
「配備」ボタンを押します。
このように 、正しくウェブアプリが動作しています。
アップロード先のURLは、"http://www.chariot-lab.com:8080/06_Servlet/"ではなく
"http://www.chariot-lab.com:8080/06_Servlet/HelloServlet"である点に注意が必要です。
ApacheとTomcatの連携
JavaとTomcatのインストールの項目のときと同じく、
こちら のサイトを参考にしました。
ただし、httpd-proxy.confは、以下のように設定しました。
<Location /examples/>
ProxyPass ajp://localhost:8009/examples>
</Location>
<Location /06_Servlet/>
ProxyPass ajp://localhost:8009/06_Servlet/
</Location>
こちら
の通り、うまく動いています。
URLは、"http://www.chariot-lab.com/06_Servlet/HelloServlet"です。
phpmyadminの導入
こちら
のサイトを参考にしてインストールしたらうまくいきました。
インストールすることにより100MBほど使用メモリが増えました。
sql関係は消費メモリが増えるので注意です。
週1回使用メモリ、使用ディスク容量を電子メール送信
cronという技術を用います。
cronに関しては、
こちら
を参考にしました。
この例では、毎週金曜日の19:03にメモリといディスクの空きを指定電子メールアドレスに送信します。
"crontab -e"コマンドで、cronを以下のように設定します。
1 19 * * 5 free -m > /var/www/aaaaaa/bbbbbb/status-memory.txt
2 19 * * 5 df -h > /var/www/aaaaaa/bbbbbb/status-disk.txt
3 19 * * 5 php /var/www/html/cccccc/dddddddddd.php
そして、 "/var/www/html/cccccc/dddddddddd.php"のソースコードを以下のように記述します。
\n";
}
do
{
$buffer = fgets($fh);
$contents .= $buffer;
} while ($buffer);
fclose($fh);
$contents .= "\n\n";
$contents .= "disk (GB)\n";
$disk_file_name = "/var/www/aaaaaa/bbbbbb/status-disk.txt";
$fh = fopen($disk_file_name, "rt");
if (!$fh)
{
print "file open error:".$disk_file_name." \n";
}
do
{
$buffer = fgets($fh);
$contents .= $buffer;
} while ($buffer);
fclose($fh);
mb_language("japanese");
mb_internal_encoding("UTF-8");
$to = "e-mail-address@so-net.ne.jp";
$from = "Chariot Lab. ".mb_encode_mimeheader("○○○")."";
$rp = "e-mail-address@so-net.ne.jp;
$org = 'Chariot Lab.';
$head = '';
$head .= "Content-Type: text/plain \r\n";
$head .= "Return-Path: $rp \r\n";
$head .= "From: $from \r\n";
$head .= "Sender: $from \r\n";
$head .= "Reply-To: $rp \r\n";
$head .= "Organization: $org \r\n";
$head .= "X-Sender: $from \r\n";
$head .= "X-Priority: 3 \r\n";
if (mb_send_mail($to, date("Y-m-d(D)")."リソース情報(Chariot Lab.)".date("H:i"), $contents, $head))
{
print("succeeded in sending e-mail \n");
}
else
{
print("sending e-mail error \n");
};
?>
毎日データベースをダンプし、整理して格納し、圧縮のうえ電子メール送信
今回もcronを用います。
この例では、毎日の朝04:10に圧縮済みデータベースバックアップを電子メール送信する例です。
"crontab -e"コマンドで、cronを以下のように設定します。
0 4 * * * mysqldump -umysql_backup -peeeeeeee -hlocalhost -A > /var/www/aaaaaa/ffffffff/ggggggggg/current_database_backup.txt
10 4 * * * php /var/www/html/cccccc/dddddddddd.php
eeeeeeee は、データベースのパスワードです。
そして、 "/var/www/html/cccccc/dddddddddd.php"のソースコードを以下のように記述します。
\n";
$dir1 = "/var/www/aaaaaa/ffffffff/".date("Y");
if (!file_exists($dir1))
{
if (mkdir($dir1))
{
print "Succeeded in creating ".$dir1." \n";
if(chmod($dir1, 0777))
{
print "Succeeded in change access right of ".$dir1." \n";
}
else
{
print "Failed in change access right of ".$dir1." \n";
}
}
else
{
print "Failed in creating ".$dir1." \n";
};
}
$dir2 = "/var/www/aaaaaa/ffffffff/".date("Y")."/".date("Ym");
if (!file_exists($dir2))
{
if (mkdir($dir2))
{
print "Succeeded in creating ".$dir2." \n";
if(chmod($dir2, 0777))
{
print "Succeeded in change access right of ".$dir2." \n";
}
else
{
print "Failed in change access right of ".$dir2." \n";
}
}
else
{
print "Failed in creating ".$dir2." \n";
};
}
$file_org = "/var/www/aaaaaa/ffffffff/ggggggggg/current_database_backup.txt";
$file_dest_dir = "/var/www/aaaaaa/ffffffff/".date("Y")."/".date("Ym")."/";
$file_dest_file = "database_backup_".date("Ymd-D").".txt";
$file_dest = $file_dest_dir.$file_dest_file;
if (copy($file_org, $file_dest))
{
print "Succeeded in copying a file: ".$file_org."->".$file_dest." \n";
}
else
{
print "Failed in copying a file: ".$file_org."->".$file_dest." \n";
}
//chdir($file_dest_dir);
$file_dest_zip = "/var/www/aaaaaa/ffffffff/".date("Y")."/".date("Ym")."/database_backup_".date("Ymd-D").".zip";
$zip = new ZipArchive();
$res = $zip->open($file_dest_zip, ZipArchive::OVERWRITE);
if ($res) {
$zip->addFile($file_dest, $file_dest_file);
$zip->close();
}
mb_language("japanese");
mb_internal_encoding("UTF-8");
$to = "e-mail-address@so-net.ne.jp";
$from = "Chariot Lab. ".mb_encode_mimeheader("○○○")."";
$rp = "e-mail-address@so-net.ne.jp;
$org = 'Chariot Lab.';
$attachment = $file_dest_zip;
$boundary = '__BOUNDARY__'.md5(rand());
$head = '';
$head .= "Content-Type: multipart/mixed;boundary=\"{$boundary}\"\n";
$head .= "Return-Path: $rp \r\n";
$head .= "From: $from \r\n";
$head .= "Sender: $from \r\n";
$head .= "Reply-To: $rp \r\n";
$head .= "Organization: $org \r\n";
$head .= "X-Sender: $from \r\n";
$head .= "X-Priority: 3 \r\n";
$body = "--{$boundary}\n";
$body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n";
$body .= "\n{$plain_message}\n";
$filebase = basename($attachment);
$body .= "--{$boundary}\n";
$body .= "Content-Type: {$attach_mime_type}; name=\"{$filebase}\"\n";
$body .= "Content-Disposition: attachment; filename=\"{$filebase}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode(file_get_contents($attachment)))."\n";
$body .= "--{$boundary}--";
if (mb_send_mail($to, date("Y-m-d(D)")."データベースバックアップ(Chariot Lab.)".date("H:i"), $body, $head))
{
print("Succeeded in sending e-mail \n");
}
else
{
print("Sending e-mail error \n");
};
?>
ZipArchiveが使えるのはは、PHP5.2以降らしいので、ご注意ください。
太独立電源システムと過充電防止回路のChariot Lab.のページ-トップに戻る