ソースコードで学ぶWebプログラミング

サーバ設置、動作環境の知識まとめ

Webプログラミングで手薄になりがちなのが設置、動作環境の知識です。

プログラムを設置するとは、サーバにファイルを配置することを意味しますが、 単純にFTP(ファイル転送ソフト)などで配置するだけでは動かないことがあります。

また、ある環境では動いたのに、別の環境では動かないこともあります。

解決には、動作環境の調査や原因の追求が必要となりますが、 そのためには、前提となる知識を持っていなければなりません。

この必携とも言える、設置、動作環境に関する前提知識をまとめました。

FTP(ファイル転送ソフト)でプログラムを設置する

FTPクライアントは、サーバにプログラムや画像データを転送するためのソフトウェアです。
FTPクライアントで接続するには、サーバ側でFTPサーバが動いている必要があります。

FTPソフトではファイルを転送する以外に、ディレクトリの作成やパーミッションの設定も可能です。

パーミッションとは、ファイルの許可情報で「ファイル所有者」「所有グループ」「その他」の 3つのユーザータイプに対して、「読み」「書き」「実行」の権限を設定します。

例:FTPソフトでのパーミッション表示 -rwxr--r--

ポイントまとめ

・パーミッション情報は「ファイルタイプ」1文字と「読み書き実行」3文字x3つの10文字で表される ・1文字目はファイルタイプで「-(ファイル)」「d(ディレクトリ)」「l(シンボリックリンク)」の3種類 ・2,3,4文字目は「ファイル所有者」5,6,7文字目は「所有グループ」8,9,10は「その他」 ・「r(読み)」「w(書き)」「x(実行)」の順に、許可がない場合「-」

上の例では「ファイルタイプ」は「ファイル」、「ファイル所有者」は「読み」「書き」「実行」が可能、 「所有グループ」と「その他」は「読み」のみが可能だと分かります。

設置サーバによって適切なパーミッションは異なるため、ご確認の上、設定を行って下さい。

サーバで動作しているソフトウェア

レンタルサーバでは、多数のサーバソフトが動作しており、Webプログラムはそのソフトウェア群の中で動きます。

ここでのサーバという用語には2種類の意味があります。
一つは機器としてのサーバマシンを意味し、このサーバにOS(とソフトウェア群)がインストールされていますが、 そのソフトウェア群の中に、常時起動してクライアントソフトからの入力を受付けるソフトウェアが存在します。 これがもう一つの意味でのサーバです。

主なサーバソフト

Webサーバ:ブラウザでアクセスして見られるページを表示。apacheが一般的。 ftpサーバ:ファイル転送を受付。 sshサーバ:sshで接続し、コマンドを受付。 DBサーバ:データを管理する。mysqlが一般的。 cron:指定時間や定期実行に利用される。 phpMyAdmin:データベースmysqlの管理ソフト。ブラウザで管理。

サーバの動作をファイルで変更する

サーバでは、設定ファイルを配置することで、動作を変更することが出来ます。

Webサーバでは「.htaccess」を設置、PHPでは主に「.user.ini」を配置します。

「.htaccess」の主な設定内容

・指定のファイルをアクセス禁止 ・指定のディレクトリをアクセス制限 ・URLを指定のフォーマットで制御

画像の外部読込を禁止したり、ID・パスワードを求めたり(BASIC認証)、 URLを静的URLに変更などが行えます。

「.user.ini」の主な設定内容

・アップロードファイルのサイズ制限 ・エラーの表示制御 ・文字コードの設定

コマンドでプログラムを実行する

サーバソフト以外にもコマンド実行で処理を行わせることが出来ます。
Webプログラムで利用するには、プログラム内でコマンドを実行し、結果を取得します。

よく使われるコマンド一覧

・ファイル検索 find ・文字列検索 grep ・テキスト差分 diff ・画像処理 ImageMagick ・ファイル圧縮 zip ・ファイル解凍 unzip ・サイトダウンロード wget ・スクリーンショット wkhtmltoimage ・MySQLエクスポート mysqldump ・MySQLインポート mysql

プログラムのファイルパスの設定方法

設定ファイルやコマンド実行では、ファイルパスを設定することがあります。 ファイルパスとは、そのファイルがサーバ内で存在する場所を指します。 URLとは異なり、FTPからも確認できない事が多いため、 契約サーバの運営サイトに情報がないか確認するか、プログラムで調べます。

PHPでは、下記コードで、そのファイルを設置したファイルパスを確認できます。

<?php echo dirname(__FILE__);

コマンドのパスを調べるには、「which」「find」「locate」コマンドが使われます。

<?php /* 調べたいコマンド */ $cmd = 'mysqldump'; exec('find / -path "*bin*" -name '.$cmd.' 2>/dev/null',$o,$r); header('Content-Type: text/plain'); print_r($o);

テキストファイルの文字コードとは

Webプログラムは、主にPHP、javascript、Perlなどのスクリプト言語で構築されます。

スクリプト言語のプログラムは、テキストファイルです。テキストファイルなので、文字コードと 呼ばれる文字とコンピュータで処理できる数値の対応パターンを決めるものが存在します。

文字と文字コード

「UTF-8」の「あ」は「E38182」 「Shift_JIS」の「あ」は「82A0」 「EUC_JP」の「あ」は「A4A2」 「ISO-2022-JP」の「あ」は「2422」

「UTF-8」が最も一般的なもので、WebページであるHTML文書やXML文書も このエンコーディングであることが多いです。 「Shift_JIS」は、windowsで使われることが多いエンコーディングです。

このエンコーディングが実際のファイルのものと異なる場合「文字化け」が起こります。

エラーの原因となる「BOM」について

プログラムソースであるテキストファイルは、普通の文書エディタで編集が可能ですが、 「UTF-8」で保存した場合、「BOM(byte order mark)」と呼ばれる見えないデータが 付いてしまうことがあります。 PHPの場合、この「BOM」が付いた状態ではエラーとなりますが、 原因となっている部分が見えないため注意が必要です。

プログラムが動作しない原因を探る方法

エラーが出ている場合、エラー内容から原因を解消します。

ブラウザにエラーが表示される場合

403 Forbidden アクセス制限が行われています 404 Not Found ファイルが存在しません 500 Internal Server Error プログラム上のミス

上記はHTTPステータスコードですが、多くはWebサーバがレスポンスとして返しています。 プログラムの内部的なエラー内容については分からないため、ログなどを探る必要があります。

ブラウザにエラーが表示されない場合

PHPプログラムの場合、画面が真っ白となってエラーが表示されない事があります。 これは設定でエラーを表示しないようにしてあるためで、プログラム内で設定の変更を行い、 確認することが出来ます。一般ユーザにエラー内容を見せたくない場合は、 ファイルに記録する設定にして、エラー内容を確認します。

/* エラーを表示する 0で表示しない */ ini_set('display_errors', 1); /* 出力するエラーの種類 -1ですべて */ error_reporting(-1); /* ログに記録する */ ini_set('log_errors','On'); /* ログの記録場所 */ ini_set('error_log','/log/php_error.log');

プログラムのバージョン差による問題

サーバにインストールされているプログラムやサーバにはバージョンがあり、 同じプログラムソースでも、環境によって動かない場合があります。

PHPのバージョンの確認方法

<?php phpinfo();

PHPでは上記のプログラムでバージョン情報、サーバでのインストール状況を確認できます。 バージョンやインストール環境によって、使えない関数があるため、代替となる関数を実装するか、 別途ライブラリを設置することで解消したり、動作させるPHPのバージョンを変更することで解消します。

レンタルサーバ・VPSの選び方

開発したWebプログラムをインターネット上に公開するには、サーバが必要となります。 主なレンタルサーバについて、比較できるようにまとめました。

・共有サーバとは、サーバ資源を共有することで費用を下げたもの ・VPSとは、仮想的にサーバ資源を独占することで費用を下げたもの

共有サーバ

サーバ 年間費用 初期費用 ディスク容量 マルチドメイン MySQL PHP SSH 無料SSL 転送量 cron バックアップ 障害対応
XREA Plus 2,286円 0円 64GB 5個 64GB/日 ×
バリューサーバー スタンダード 4,320円 2,160円 100GB 無制限 300GB/月 ×
コアサーバー CORE-A 4,762円 0円 120GB 無制限 無制限 ×
ヘテムル ベーシック 11,664円 2,160円 200GB 70個 80GB/日
ロリポップ! スタンダード 8,100円 1,620円 120GB 100個 30個 100GB/日 ×
さくらのレンタルサーバ スタンダード 5,142円 1,029円 100GB 100個 20個 80GB/日
エックスサーバー X10 12,960円 3,240円 200GB 無制限 50個 無制限
WebARENA SuiteX スタンダード 17,640円 0円 300GB 10個 3個 無制限
ColorfulBox Box2 13,737円 0円 60GB 無制限 無制限 2T/月
MixHost スタンダード 12,700円 0円 60GB 無制限 無制限 2T/月
Zenlogic プランS 11,529円 0円 300GB 無制限 無制限 × 無制限

VPS

サーバ 月額費用 初期費用 ディスク容量 メモリ CPU 転送量 OS
ConoHa 2GB 1,701円 0円 SSD50GB 2GB 3コア 無制限 CentOS7/CentOS6/Ubuntu18.04/Ubuntu16.04/Ubuntu14.04/Debian9/Debian8/FreeBSD11/Fedora28/openSUSE15/Arch Linux20170710/NetBSD7.1/OpenBSD6.0
GMOクラウドのVPS 詳細はこちら 2GB 1,382円 4,000円 HDD100GB 2GB 3コア 無制限 CentOS7/CentOS6/Ubuntu18.04/Ubuntu17.04/Debian9
お名前.com VPS 2GB 1,420円 0円 HDD200GB 2GB 3コア 無制限 CentOS7/CentOS6/Debian9/Debian8/FreeBSD11/Ubuntu18.04/Ubuntu16.04/Ubuntu14.04/Arch Linux
さくらのVPS 2GB 1,706円 2,160円 SSD50GB 2GB 3コア 無制限 CentOS7/CentOS6/Scientific Linux7/Scientific Linux6/Ubuntu18.04/Ubuntu/16.04/Ubuntu14.04/FreeBSD11/FreeBSD10.3/Debian9/Debian8/Fedora28
WebARENA(VPSクラウド) 2GB 1,555円 0円 SSD50GB 2GB 3コア 無制限 CentOS7/CentOS6
ServersMan@VPS Standard 1,008円 0円 HDD100GB 2GB 2コア 無制限 CentOS7/CentOS6/Debian7/Debian6/Ubuntu14.04LTS/Ubuntu12.04LTS

開発、実運用の観点から重視すべき点をピックアップします。

・サーバにデータが蓄積されるか ・複数のサイト運営が可能か ・24時間の監視が必要か ・特殊なコマンドが利用できるか ・ソフトウェアをインストールが可能か

例えば、画像データなどを受付けている場合、運用後にサーバのディスク容量が 足りなくなった場合、移転作業が必要になります。 複数のブログや独自サイトを作成したい場合は、マルチドメインの制限数が重要になります。 共有サーバではソフトウェアのインストールはまず許可されていないので、 例えば Ruby on Rails を動かしたい場合などは、VPSを借りることになります。