WebRelease 2.5 以前から WebRelease 2.6 以降にバージョンアップすると、従来の FTP 設定、サイト設定などに指定されていた設定を元に、プライマリチャネルが自動生成されます。
4章 FTPの設定
コンテンツを公開サーバにアップロードして公開するためには、プライマリチャネルの設定しておく必要があります。サイトを作成すると main という名称のチャネルが自動的に作成されています。このチャネルがプライマリチャネルです。
WebRelease 2.5 以前から WebRelease 2.6 以降にバージョンアップすると、従来の FTP 設定、サイト設定などに指定されていた設定を元に、プライマリチャネルが自動生成されます。
プライマリチャネルの設定を行う場合には「FTP管理」画面の「チャネル」タブで「操作」欄の編集ボタンをクリックします。プライマリチャネルは、チャネル一覧の必ず1行目に表示されています。
編集ボタンをクリックするとチャネルの編集画面が表示されます。
各項目は、以下の説明を参考にチャネルの設定を行ってください。設定を記入したら画面右上の「保存」ボタンで設定を保存してください。
チャネルの名称を指定します。チャネル名には a から z、A から Z、0 から 9 と - (ハイフン) と _ (アンダースコア) のみが使えます。チャネル名は 15 文字以内でなければなりません。
各チャネルには一意な名前を指定しなければなりません。同じ名前のチャネルを複数作成することはできません。
プライマリチャネルはサイト作成時に自動的に作成されます。その時には main というチャネル名が付けられています。この名前は必要に応じて変更してかまいません。
チャネル名は、テンプレートの展開やメソッド内で参照する必要が生じます。一旦付けたチャネル名を変更すると、テンプレートやメソッド内にも追随して変更しなければならない箇所が波及することになります。チャネル名は「一旦決めたらあまり変更できない」という前提で決めてください。
チャネルの表示名を指定します。表示名は、テンプレート中でチャネルを識別するために使うのではなく、コンテンツ中にチャネルの名前を表示する場合などに使用する名前を指定します。チャネル表示名には任意の文字が使えます。また、一意である必要もありません。
チャネル名は一旦決めると変更が難しいのですが、チャネル表示名はそうではありません。テンプレート内でチャネルを識別するのにチャネル名を使うことにしておけば、チャネル表示名は比較的自由にいつでも変更可能になるでしょう。
チャネルには、任意個のタグをつけることができます。タグをひとつだけつける場合には、付けたいタグの綴りをこの欄に指定してください。例えば "Mobile" というタグをついけたい場合には、この欄に Mobile と指定します。複数のタグを指定する場合には、各タグを空白文字で区切って指定してください。例えば "Mobile” と "PC" のふたつのタグをつけたい場合には、この欄に Mobile PC と2語を空白文字で区切って指定します。タグには日本語を含め任意の文字が自由に使えますが、空白文字はタグの区切りとして認識されるため、タグの中には含めることはできません。
複数のチャネルに同じタグをつけることができます。あるチャネルが、ある綴りのタグを持っているかどうかは、Channel オブジェクトの hasTag() メソッドで調べることができます。
WebRelease ではチャネルごとにコンテンツのエンコーディングを指定することができます。チャネルに配信されるコンテンツのエンコーディングはここで指定したものとなります。
現在では、ほとんどの場合、UTF-8 での配信になるでしょう。
公開サーバの URL を入力します。 https://www.example.com/directory/ といった表記で http(s):// から記入してください。 後述する FTP サーバ / SFTP サーバ / Amazon S3 への接続情報およびアップロード先のディレクトリとして指定した場所にアップロードされたコンテンツがここで指定した URL で参照できるように URL を指定してください。
例えば、アップロード先ディレクトリに /var/www/html を指定した場合、そこにアップロードされた index.html (/var/www/html/index.html) に、https://www.example.com/index.html でアクセスできるように指定してください。
コンテンツのアップロード先には下記のいずれかを指定することができます。
コンテンツアップロード先に FTP サーバを指定した場合のチャネル編集画面は下記のようになります。
ホスト名には生成されたコンテンツをアップロードする FTP サーバのホスト名を指定します。ホスト名には、いわゆるホスト名を指定する以外にIPアドレスを直接指定することもできます。この場合FTP先ホストの IPアドレスを192.168.12.13といった4つの数字をピリオドで区切る記法で指定してください。
アップロード先に指定したFTP先ホスト名が FTP の接続を受け付けているポート番号を指定します。通常、FTPポート番号は 21 です。対向する FTP サーバ側が特殊な設定をしている場合を除いてこの値は変更しないでください。
データ転送に PASV モード使うかどうかを指定します。ここをチェックすると PASV モード、チェックをはずすと非 PASV モードとなります。通常は PASV モードとしてください。
PASV モードでは、WebRelease と FTP サーバの間のデータの転送に使用する TCP 接続のポート番号は FTP サーバ側が決定します。決定されたポート番号に対して WebRelease 側から FTP サーバ側に向けて接続が行われ、データの転送が行われます。非 PASV モードでは、ポート番号の決定は WebRelease 側が行ないます。決定されたポート番号に対して FTP サーバ側から WebRelease 側に向けて接続が行われ、データの転送が行われます。
FTPサーバに接続するときに使用するFTPアカウント(ユーザ名)とそのパスワードを指定します。
FTP サーバ上でのアップロードしたファイルを置く場所を指定します。'/' からのディレクトリパスで指定してください。日本語(全角文字)は使用できません。
このディレクトリにアップロードされたファイルが、「チャネル URL」 で指定した URL で参照できなければなりません。例えば、チャネル URL に https://www.your.host.com/news/ と指定してあり、ここでFTPディレクトリに /var/www/html/news/ と指定した場合、/var/www/html/news/index.html にアップロードしたファイルが https://www.your.host.com/news/index.html として参照できるように指定してください。
コンテンツアップロード先に SFTP サーバを指定した場合のチャネル編集画面は下記のようになります。
ホスト名には生成されたコンテンツをアップロードする SFTP サーバのホスト名を指定します。ホスト名には、いわゆるホスト名を指定する以外にIPアドレスを直接指定することもできます。この場合SFTP先ホストの IPアドレスを192.168.12.13といった4つの数字をピリオドで区切る記法で指定してください。
先に指定したホスト名が ssh の接続を受け付けているポート番号を指定します。通常、ssh (sftp) のポート番号は 22 です。SFTP サーバ側が特殊な設定をしている場合を除いてこの値は変更しないでください。
SFTP サーバに接続するときに使用するアカウントを指定します。
SFTP サーバへの接続時に実行される認証の方法を指定します。「パスワード認証」と「公開鍵認証」のいずれかを選んでください。公開鍵認証を使用するためには、別途、鍵ペアの生成と、公開鍵の、SFTP サーバへの設置が必要になります。後述の「公開鍵認証の設定方法」の節を参考にしてください。
認証方法に「パスワード認証」を選んだ場合に表示される入力エリアです。SFTP サーバへの接続に使用するパスワードを入力してください。
認証方法に「公開鍵認証」を選んだ場合に表示される入力エリアです。サーバへの接続に使用する鍵ペアのうち、秘密鍵を指定します。秘密鍵は ~wr2/.ssh/ 以下に置かれていなければなりません。このフィールドには ~wr2/.ssh に置かれているファイルを選択するポップアップが表示されますので、その中から秘密鍵を選んで指定してください。
認証方法に「公開鍵認証」を選んだ場合に表示される入力エリアです。秘密鍵にパスフレーズが設定されている場合に、このフィールドにそのパスフレーズを入力してください。
秘密鍵の作成時に、秘密鍵にパスフレーズを設定していない場合には、このフィールド入力されているパスフレーズは使用されません。
SFTP サーバ上でのアップロードしたファイルを置く場所を指定します。'/' からのディレクトリパスで指定してください。日本語(全角文字)は使用できません。
このディレクトリにアップロードされたファイルが、「チャネル URL」 で指定した URL で参照できなければなりません。例えば、チャネル URL に https://www.your.host.com/news/ と指定してあり、ここでFTPディレクトリに /var/www/html/news/ と指定した場合、/var/www/html/news/index.html にアップロードしたファイルが https://www.your.host.com/news/index.html として参照できるように指定してください。
フィンガープリントは SFTP 接続時にサーバから送られてくる、サーバの身元証明です。WebRelease はフィンガープリントを使って、接続しようとしているサーバが本物であるかどうかをチェックします。フィンガープリントをチェックすることにより、なりすましなどによる攻撃をある程度回避することができます。フィンガープリントのチェックを行わずに、誤って攻撃者のサーバに接続し、ID と パスワードを提示してログインを試みると、攻撃者にアカウント情報を盗まれてしまいます。そういった危険を避けるためにフィンガープリントによる接続先のチェックは重要です。
WebRelease は、最初は SFTP サーバのフィンガープリントを持っていませんが、最初に SFTP サーバに接続した時にサーバから送られてきたサーバのフィンガープリントを保存します。その後、SFTP サーバに接続を行う場合には毎回、前回とおなじフィンガープリントが送られてくるかどうかをチェックし、フィンガープリントが一致する場合にのみログインして SFTP サーバとの通信を開始します。フィンガープリントが一致しない場合には、ログインは行われず、SFTP は失敗(エラー終了)します。
サーバのフィンガープリントは、SFTP サーバの OS やソフトウェアを再インストールするなどすることにより変化する場合があります。サーバのフィンガープリントが変わった場合には、フィンガープリントをクリア(「サーバのフィンガープリント」欄を空欄にした上で「保存」ボタンをクリックしてください)してからサーバに再度接続してください。それにより新たなサーバのフィンガープリントを取り込むことができます。
FTP 記録に「SFTP サーバの fingerprint が一致しません。サーバへの接続を中止しました。」というエラーが残され SFTP が失敗している場合、接続先サーバを変更したのであれば、フィンガープリント欄をクリアしてから再度サーバに接続してください。
もし、SFTP サーバの切り替えや再インストールを行っていない状況で、上記エラーが発生した場合には、本当に目的のサーバに接続しようとしているかどうかを十分に確認してください。WebRelease が使用している DNS や、WebRelease から SFTP サーバまでの経路上のネットワーク機器(ルータなど)が攻撃を受けていると、WebRelease 側で指定している接続先の IP アドレスやホスト名が正しくても、他のサーバに誘導されてしまうことがあります。エラーが発生した理由が把握できてからフィンガープリントのクリアを行ってください。
コンテンツアップロード先に Amazon S3 を指定することで、コンテンツを Amazon S3 に直接アップロードすることができます。S3 と Amazon CloudFront や Cloudfront Functions を組み合わせることで、サーバレスな上に極めて高いピークトラフィック対応力を持つ公開サーバをとても簡単に構築することができるでしょう。WebRelease には Amazon CloudFront にキャッシュされたコンテンツを invalidate する機能も実装されています。
アップロード先に Amazon S3 を指定した場合のチャネル編集画面は下記のようになります。
S3 のバケットにコンテンツをアップロード(s3:putObject / s3:deleteObject)するのに使用する Access Key ID を指定してください。Access Key ID の取得方法については Amazon Web Service の関連ドキュメントを参照してください。
上記の Access Key ID に対応した Secret Access Key を指定してください。Secret Access Key の取得方法については Amazon Web Service の関連ドキュメントを参照してください。Secret Access Key は設定後は WebRelease の画面に表示されることはありません。
バケットが置かれているリージョンを指定してください。AWS の東京リージョンの場合は ap-northeast-1 を指定すれば良いでしょう。リージョン名については AWS のドキュメントを参照してください。
コンテンツをアップロードするバケット名を指定してください。なお、WebRelease にはバケット作成機能はありません。アップロード先のバケットはあらかじめ作成しておいてください。また、バケットには、上記 Access Key ID と Secret Access Key での書き込み権限 (s3:putObject と s3:deleteObject) が必要です。同時に、他のアカウントからの書き込みが行われないように厳重にアクセス権の設定をおこなっておいてください。このアクセス制限が不十分だとコンテンツの改竄などの致命的なトラブルに巻き込まれることになりかねません。
コンテンツをアップロードするディレクトリ(Prefix)を指定してください。多くの場合は / で大丈夫でしょう。
WebRelease から S3 へのコンテンツのアップロードは複数の https 接続を使って並列に実行されます。この項目には、並列数、つまり、同時に使用する接続数を指定します。接続数が多い方がコンテンツのアップロードスピードは速くなりますが、多すぎてもスピードが劣化することがあります。デフォルトでは 20 になっています。多くの場合 20 ぐらいで良い結果が得られるはずです。環境によっては、もう少し大きな値でも良いかもしれません。実環境で試してみて、良い結果が得られる値を使うと良いでしょう。
コンテンツのアップロード時には、ここで指定した並列実行数と同じ数のスレッドが必要になります。WebRelease サーバ上に非常に多くのサイト(100サイト以上程度)がある場合、ここであまり大きな値を指定するとシステムの許容するスレッド数を超えてしまい、エラーが発生してしまう可能性があります。むやみに大きな値を指定しないようにしてください。(それほど心配する必要はありません)
アップロードしたファイル(html や png など)に指定する cache-control ヘッダを指定します。ここで指定した値がすべてのファイルの cache-control ヘッダに付されます。ファイルによって異なる値を指定することはできません。
max-age=300
などの指定が良いでしょう。この指定の場合、CloudFront やその先に設置されている proxy サーバ、そしてブラウザは、コンテンツを 300 秒
(5分)間、キャッシュします。値には http ヘッダの cache-control ヘッダに指定可能な値を指定してください。値の妥当性のチェック(エラーチェック)は行われず、そのまま、cache-control ヘッダの値として使用されますので、cache-control ヘッダの値として不適当な値は指定しないでください。
Amazon S3 と Amazon CloudFront を組み合わせて使用した場合、cache-control ヘッダは CloudFront のコンテンツキャッシュをコントロールすることになります。ただし、cache-control ヘッダは CloudFront だけでなく、その先に設置されているかもしれない Proxy サーバなどの動作にも影響を与えることに注意してください。WebRelease からは CloudFront にキャッシュされたコンテンツを invalidate することはできますが、その先にある Proxy サーバなどにキャッシュされたコンテンツを invalidate できるわけではありません。長いキャッシュ時間の指定を行う場合は十分に注意してください。ユーザが必ず https でだけ CloudFront にアクセスするのであれば、CloudFront の下流にある Proxy サーバなどはコンテンツをキャッシュすることはできないので危険は小さいかもしれません。
CloudFront でのキャッシュ時間を長く設定する方がバックエンドの S3 へのアクセスが少なくなり効率的です。この値を長くするには cache-control ヘッダを使うのではなく CloudFront 側で minimumTTL の値を大きく設定するのが良いでしょう。8640000 (100 日) ぐらいの設定でも大丈夫です。このような設定を行う場合には 次の項で説明している Invalidation の設定が必須になります。
ファイルの種類やファイル名によって異なる cache-control ヘッダを付けたい場合は CloudFront Functions を併用することを検討すると良いかもしれません。
WebRelease から CloudFront のコンテンツキャッシュの invalidate を行いたい場合には、その CloudFront の Distribution ID をここに指定してください。invalidate はコンテンツのアップロードがすべて正常に終了した場合に限り、アップロード完了直後に開始されます。アップロード中に何らかのエラーが発生している場合には invalidate の処理は起動されません。
invalidate の対象は、チャネル URL 欄に指定した URL のパス部分以下すべてとなります。例えば、チャネル URL に https://www.example.com/abc/ と指定してある場合には、invalidate の対象は "/abc/*" になります。バケットに指定した prefix ではなく、チャネル URL に指定したパスで invalidate される点に注意してください。
CloudFront の invalidate を実行するためには invalidate を実行する権限のある IAM ユーザが必要になります。例えば Permissions に CloudFrontFullAccess Policy を持つ IAM ユーザが必要です。このフィールドにはそのユーザの Security Credencials に作成した Access Keys のいずれかの有効な Access Key ID を指定します。
上記の Access Key ID に対応した Secret Access Key を指定してください。Secret Access Key は設定後は WebRelease の画面に表示されることはありません。
CloudFront の invalidation を行なうと CloudFront から 503 Service Unavailable エラーが返される場合があります。多くの場合、エラーはごく一時的な負荷の影響と思われますので、503 エラーに対してはリトライを試みる価値があります。このフィールドでは、リトライの回数を指定します。デフォルトでは 50 回となっていますが、503 エラーが多いと感じられる場合には、もう少し大きめの値を指定してみてください。
チャネル設定画面の右上にある「接続確認」ボタンを使うと入力した接続情報で正常に対向サーバに接続できるかどうか確認することができます。
チャネルの設定項目の入力を終えたら、一旦「保存」ボタンで設定を保存してください。その後「接続確認」ボタンをクリックすることで、入力した接続情報で対向サーバに接続することができるかどうかを確認することができます。
問題なく接続できた場合には「正常に接続できました」というメッセージが表示されます。何らかのエラーメッセージが表示された場合には、対向サーバとの接続に問題があることを示しています。接続情報をよく確認してみてください。
SFTP の接続に公開鍵認証を採用する場合には、別途の設定作業が必要です。作業の流れは概ね以下のとおりです。
鍵ペアを準備します。
WebRelease には鍵ペアを生成する機能はありませんので OpenSSH などに装備されているツールを使ってキーを生成してください。例えば以下のコマンドで、鍵ペアを生成できます。WebRelease2 を稼働させているサーバ上でユーザ wr2 として作業すると良いでしょう。 ssh-keygen コマンドには、オプションとして -m PEM を必ず指定して PEM 形式のキーを生成してください。PEM 形式になっていない場合には、WebRelease が鍵をうまく読み込めない場合があります。
# su - wr2
% ssh-keygen -t ecdsa -b 521 -m PEM
ssh-keygen コマンドの実行時に、とくに指定をしなければ、鍵ペアは以下のディレクトリに生成されるはずです。
% ls -l ~/.ssh
total 28
-rw------- 1 wr2 wr2 365 Mar 1 13:28 id_ecdsa
-rw-r--r-- 1 wr2 wr2 284 Mar 1 13:28 id_ecdsa.pub
このディレクトリに生成された id_ecdsa というファイルが秘密鍵であり、また、id_ecdsa.pub というファイルが公開鍵です。秘密鍵のパーミッションが 600 になっていない場合には chmod コマンドで 600 にしておいてください。また、公開鍵についても 644 程度にはしておく方がよいでしょう。
SFTP サーバに公開鍵をコピーします。
% scp ~/.ssh/id_ecdsa.pub sftpserver.example.com:/tmp
ここでは scp コマンドでファイルを転送していますが、どのような方法でも構いませんので、公開鍵を SFTP サーバの(例えば)/tmp にコピーしてください。
SFTP サーバ側にログインして鍵の設定を行います。
SFTP で接続するユーザとして作業すると簡単です。先ほど転送した公開鍵を ~sftpuser/.ssh/authorized_keys の末尾に追加します。
# su - sftpuser
% cd
% mkdir -p .ssh
% chmod 700 .ssh
% cat /tmp/id_ecdsa.pub >> .ssh/authorized_keys
% chmod 600 .ssh/authorized_keys
% rm /tmp/id_ecdsa.pub
ここでは WebRelease から SFTP サーバへの接続に使うアカウントを、仮りに sftpuser としてあります。 各ファイルやディレクトリのモードに注意してください。.ssh ディレクトリのモードは 700 にしておきます。また、authorized_keys ファイルのモードは 600 でなければなりません。ディレクトリとファイルのオーナーは自分でなければなりません。
WebRelease に秘密鍵とパスフレーズを入力します。
秘密鍵ファイルを WebRelease に入力します。この例では ~wr2/.ssh/id_ecdsa ですので、それを「秘密鍵」の欄に入力しておきます。
ssh-keygen を実行して鍵ペアを作成する時にパスフレーズを指定していた場合には、「秘密鍵のパスフレーズ」欄に設定したパスフレーズを入力します。
以上で公開鍵認証に関係する設定は終わりです。うまく接続できない場合には、下記の点を確認し、必要な修正を行ってください。