インターネット Web サーバー構築ガイドライン を読んだメモ 2

第三章:ページを公開しよう

  • IIS マネージャーで行った操作は、applicationHost.config, Web サイト、仮想フォルダー、アプリケーション内の web.config ファイル内の設定に反映される
  • IIS マネージャーで操作する際に左下を見ると現在の GUI 操作がどのファイルに反映されるかが表示されている
  • ファイルを直接編集して IIS を操作することも可能

  • ローカルで web.config を編集してデプロイすると差分が発生しないか?これ

  • 仮想ディレクトリを使用することで、既定のフォルダー以外にあるフォルダーを Web サイトの下位ディレクトリとして公開することができる

  • 複数台サーバーでの共通のコンテンツをホストする場合は、ネットワーク共有されたフォルダーを仮想ディレクトリとしてホストすれば、コンテンツの配置の手間も大幅に削減できる

第四章:さまざまなサーバーの設定

  • 仮想ホストの機能で、1 台の Web サーバーを複数のサーバーであるかのうように見せることができる
  • 1 台の Web サーバーに対して、ホスト名の異なる複数の URL を使用してアクセスができる

第五章:アクセス制限の仕組みを知ろう

  • 特定の IP アドレスあるいは範囲からのアクセスを制限することができる

    • 既定はすべての IP アドレス、コンピューター、ドメインがアクセス可能
  • 匿名認証

    • 匿名でサイトを見ることを許可する認証方式(IDとパスワードで認証しているわけではない)
    • アプリケーション側で認証している場合はこの方式になる
    • ただし、Windows の中ではどの権限で動作するかという情報が必要になる
    • 標準で Windows が持っている匿名ユーザー IUSR で認証、動作するように設定されている
    • アプリケーションはこのアカウントで実行されることになる
  • 基本認証

    • ユーザーがアクセスする際に、有効なユーザー名とパスワードの入力が必要になる
    • Base64エンコードされた暗号化されていないパスワードがネットワーク上で送信される欠点がある
      • 専用回線、SSLTLS を使用する必要がある
  • その他の認証方式

    • 多くの種類がある
  • アプリケーションプール ID について

    • 参考 https://technet.microsoft.com/ja-jp/library/ee886292.aspx?f=255&MSPPError=-2147217396
    • Windows OS には、IIS が各アプリケーションプールに一意の ID を作成できるように「仮想アカウント」と呼ばれる機能が用意されている
    • 新しいアプリケーションプールが作成されるたびに、IIS 管理プロセスによってアプリケーションプール自体の名前を表すセキュリティ識別子(SID)が作成される
    • アプリケーションIDには、そのアプリケーションプールで利用するリソースのみに対してアクセス許可を与える
    • Windows のユーザー管理コンソールにはユーザーとして表示されない
  • 正しいアクセス許可の付与

    • ユーザーによってアップロードされないものはすべて、ファイルシステムの読み取りアクセス権のみ必要
    • PHP アプリケーションや ASP.NET アプリケーションなどの動的コンテツの場合は、IIS スクリプトアクセス許可も必要
    • ユーザーがアップロードするコンテンツは、別のフォルダーに入れて、このフォルダーに書き込みアクセス権を不要する
      • このフォルダーに IIS 実行アクセス許可やスクリプトアクセス許可を付与してはいけない
  • 認証を必要とするアプリケーション

    • 認証されたユーザーすべてを含むグループに対するすべてのリソースを権限によって制限することが理想
    • さまざまなカテゴリのユーザーがいる場合は、管理者や管理者以外でグループを分けてそれぞれにアクセス権を付与する
  • 匿名で実行するアプリケーション

    • アプリケーションプール ID または、カスタムで指定した匿名 ID(IUSR) でリソースのアクセスを制限するべき
      • アプリケーションプールID にアクセス権を付与することがオススメ
      • 匿名 ID は既定のユーザーなので、既定を変更していない全アプリケーションでコンテンツへのアクセス権を持つことになる

インターネット Web サーバー構築ガイドライン を読んだメモ

msdn.microsoft.com

を読んで、IIS について学習した自分用メモ

自分の環境は、Windows10 / IIS 10

第二章:IIS の動作を見てみよう

  • アプリケーションプールと w3wp.exe は 1 対 1 が最も簡単な設定
  • 1 対 n の設定も可能

  • IIS の環境設定は複数の xml 形式ファイルの組み合わせで実現

  • IIS の開始・停止・再起動

    • IISマネージャー
    • サーバーマネージャー
    • 管理ツールのサービス
    • iisreset コマンド
    • Net コマンド
    • Appcmd.exe コマンド
    • Windows PowerShell サービス操作コマンドレット
    • Windows PowerShell IIS コマンドレッド
    • サーバーの停止でどのサービスが停止するか?
      • W3SVC World Wide Web 発行サービスが停止する (Windows10 / IIS10 で試行)
    • PowerShell の場合は、サーバー・サイト・アプリケーションプールの全ての停止が可能なのでオススメ
  • ログ

    • c:\inetpub\logs\logfiles に出力される
    • W3SVC1, W3SVC2 のように作成したサイト毎にサイトのIDが付加される
      • ID はサイトの詳細設定から確認可能

Netatmo Weather のAPIをとりあえず使ってみる

準備

  • https://dev.netatmo.com/
  • 上部メニューCREATE YOUR APP クリック
  • App name, App Description を入力
  • "I accept Netatmo APIs Terms and Conditions" にチェックを入れて同意する
  • Client idClient secret が作成される

API使ってみる

curl -w '\n' 'https://api.netatmo.com/oauth2/token' --data 'grant_type=password&client_id=xxx&client_secret=xxx&username=xxx&password=xxxx&scope=read_station' -X POST
{"access_token":"xxxx","refresh_token":"xxx","scope":["read_station"],"expires_in":10800,"expire_in":10800}
  • access_token を使用してAPIにアクセス
curl https://api.netatmo.net/api/getstationsdata\?access_token\=xxx
json のレスポンス

json のレスポンスが返ってきて、中のデータ(温度や湿度など)が正しいことを確認出来た。

Windows サーバーで サービスから Jenkins を起動しようとしたときに起動しなかったときの対応

状況

  • http://jenkins/restart とかを何回か実行した
  • サービスでステータス確認したら 停止 になっている
  • サービスから開始をクリックしてもステータスは一瞬 実行中 になるがすぐに 停止 になる

対応

  • jenkins.err.log を確認
  • エラーが出ている
警告: FAILED ServerConnector@8c1c9b{HTTP/1.1}{0.0.0.0:8090}: java.net.BindException: Address already in use: bind

java.net.BindException: Address already in use: bind

    at sun.nio.ch.Net.bind0(Native Method)

    at sun.nio.ch.Net.bind(Unknown Source)

    at sun.nio.ch.Net.bind(Unknown Source)

    at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)

    at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)

    at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:321)

    at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)

    at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)

    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)

    at org.eclipse.jetty.server.Server.doStart(Server.java:366)

    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)

    at winstone.Launcher.<init>(Launcher.java:152)

    at winstone.Launcher.main(Launcher.java:352)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    at Main._main(Main.java:246)

    at Main.main(Main.java:91)

TFS でビルド時にアプリケーションのバージョン番号に日付とビルド回数を設定する

したいこと

  • MSBuild でバージョン番号を付与したい

  • 今回設定したいバージョン番号

    • ApplicationVersion=1.0.20170926.1
1  0  20170926  1
-  -  -         -
|  |  |         |
|  |  |         `-- その日にビルドした回数(翌日にリセット)
|  |  `------------ ビルドした日付
|  `--------------- とりあえず固定
`------------------ とりあえず固定

TFS で使用できる変数について

$date=$(Get-Date -Format 'yyyy-MM-dd');

Write-Host "##vso[task.setvariable variable=date]$date"
  • この PowerShell をタスクの一つにして、起動すれば、$(date) でビルド時に使用可能

その日のビルドした回数はどうやって取得するか

    $buildNumber = $env:BUILD_BUILDNUMBER
    if ($buildNumber -eq $null)
    {
        $buildIncrementalNumber = 0
    }
    else
    {
        $splitted = $buildNumber.Split('.')
        $buildIncrementalNumber = $splitted[$splitted.Length - 1]
    }
  • $(Build.BuildNumber). で分割した2つ目から取得できそう

  • じゃ $(Build.BuildNumber) の1つ目が何か出力して確認してみる

20170926.1 
  • 自分が欲しい値そのままではないか。。。

まとめ

というわけで、今はこの設定でビルドしてる

/p:ApplicationVersion=1.0.$(Build.BuildNumber)

SourceTree で rebase してコンフリクト解決してすぐコミットしてしまったとき

qiita.com

上記の記事を参考にして、rebase -> コンフリクトの解決をしてたんですが、

特に手順5の後にコミットメッセージを入力してコミットしてしまうというミスを犯しやすいので注意が必要です。

これをやってしまいました。

SoureceTree からの解決方法が分からなかったので、コマンドから rebase を無かったことにしました。

1.コマンドで確認

$ git status
On branch fix-branch
You are currently rebasing branch 'fix-branch' on 'e114a18'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

2.rebase中でコンフリクト解消したから、git rebase --continue を実行してみる。

$ git rebase --continue
Applying: コメント
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

3.対応方法がよく分からなかったので、rebase を無かったことにしようと git rebase --abort を実行。

rebase 中止して最初からやり直しました。