インターネット Web サーバー構築ガイドライン を読んだメモ 2
第三章:ページを公開しよう
- IIS マネージャーで行った操作は、applicationHost.config, Web サイト、仮想フォルダー、アプリケーション内の web.config ファイル内の設定に反映される
- IIS マネージャーで操作する際に左下を見ると現在の GUI 操作がどのファイルに反映されるかが表示されている
ファイルを直接編集して IIS を操作することも可能
ローカルで web.config を編集してデプロイすると差分が発生しないか?これ
仮想ディレクトリを使用することで、既定のフォルダー以外にあるフォルダーを Web サイトの下位ディレクトリとして公開することができる
- 複数台サーバーでの共通のコンテンツをホストする場合は、ネットワーク共有されたフォルダーを仮想ディレクトリとしてホストすれば、コンテンツの配置の手間も大幅に削減できる
第四章:さまざまなサーバーの設定
- 仮想ホストの機能で、1 台の Web サーバーを複数のサーバーであるかのうように見せることができる
- 1 台の Web サーバーに対して、ホスト名の異なる複数の URL を使用してアクセスができる
第五章:アクセス制限の仕組みを知ろう
特定の IP アドレスあるいは範囲からのアクセスを制限することができる
- 既定はすべての IP アドレス、コンピューター、ドメインがアクセス可能
匿名認証
基本認証
その他の認証方式
- 多くの種類がある
アプリケーションプール ID について
- 参考 https://technet.microsoft.com/ja-jp/library/ee886292.aspx?f=255&MSPPError=-2147217396
- Windows OS には、IIS が各アプリケーションプールに一意の ID を作成できるように「仮想アカウント」と呼ばれる機能が用意されている
- 新しいアプリケーションプールが作成されるたびに、IIS 管理プロセスによってアプリケーションプール自体の名前を表すセキュリティ識別子(SID)が作成される
- アプリケーションIDには、そのアプリケーションプールで利用するリソースのみに対してアクセス許可を与える
- Windows のユーザー管理コンソールにはユーザーとして表示されない
正しいアクセス許可の付与
認証を必要とするアプリケーション
- 認証されたユーザーすべてを含むグループに対するすべてのリソースを権限によって制限することが理想
- さまざまなカテゴリのユーザーがいる場合は、管理者や管理者以外でグループを分けてそれぞれにアクセス権を付与する
匿名で実行するアプリケーション
- アプリケーションプール ID または、カスタムで指定した匿名 ID(IUSR) でリソースのアクセスを制限するべき
- アプリケーションプールID にアクセス権を付与することがオススメ
- 匿名 ID は既定のユーザーなので、既定を変更していない全アプリケーションでコンテンツへのアクセス権を持つことになる
- アプリケーションプール ID または、カスタムで指定した匿名 ID(IUSR) でリソースのアクセスを制限するべき
インターネット Web サーバー構築ガイドライン を読んだメモ
を読んで、IIS について学習した自分用メモ
自分の環境は、Windows10 / IIS 10
第二章:IIS の動作を見てみよう
- アプリケーションプールと w3wp.exe は 1 対 1 が最も簡単な設定
1 対 n の設定も可能
IIS の環境設定は複数の xml 形式ファイルの組み合わせで実現
- IIS サーバー全体の設定は applicationHost.config
- c:\windows\system32\inetsrv\config
- 各サイトやアプリケーション単位の設定は web.config
- 各サイトやアプリケーションのフォルダー
- IIS 7.0 コンフィギュレーション リファレンス
- IIS サーバー全体の設定は applicationHost.config
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 id
とClient secret
が作成される
API使ってみる
- API を使用する前に認可する必要がある
- OAuth 2.0 を使用して認可する
- OAuth2.0 については、https://qiita.com/TakahikoKawasaki/items/200951e5b5929f840a1f が分かりやすい
- https://dev.netatmo.com/resources/technical/guides/authentication
今回はクライアントからの使用を想定しているので、Authentication for native client を参照
curl で試してみる
- access_token 取得
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}
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)
- Address already in use: bind なので、すでに他のプロセスがポートを使用している感じ
- https://issues.jenkins-ci.org/browse/JENKINS-15691 ここらへんにも同様の問題あり
- http://sinsengumi.net/blog/2011/01/windows%E3%81%A7%E3%81%A9%E3%81%AE%E3%83%9D%E3%83%BC%E3%83%88%E3%81%8C%E4%BD%95%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%95/ ここらへんを参考にして Windows サーバーで同一ポートを使用しているプロセスを探す
- java.exe が使用している
- この java のプロセスを終了させる
- jenkins をサービスから開始する
- サービスが 実行中 になることを確認
- Jenkins の画面がブラウザで表示されることを確認
TFS でビルド時にアプリケーションのバージョン番号に日付とビルド回数を設定する
したいこと
MSBuild でバージョン番号を付与したい
今回設定したいバージョン番号
- ApplicationVersion=1.0.20170926.1
1 0 20170926 1 - - - - | | | | | | | `-- その日にビルドした回数(翌日にリセット) | | `------------ ビルドした日付 | `--------------- とりあえず固定 `------------------ とりあえず固定
TFS で使用できる変数について
事前に定義されている変数の一覧は下記で参照できる
https://docs.microsoft.com/ja-jp/vsts/build-release/concepts/definitions/build/variables?tabs=batch
ユーザー定義の変数も設定可能
TFSにブラウザから直接設定することも可能
- これだと動的に設定が出来ない?
Batch, PowerShell, Shell を作成して、ビルドステップにて実行して動的に変数を設定
- 例えば、日付を変数に設定する PowerShell の例
$date=$(Get-Date -Format 'yyyy-MM-dd'); Write-Host "##vso[task.setvariable variable=date]$date"
- この PowerShell をタスクの一つにして、起動すれば、
$(date)
でビルド時に使用可能
その日のビルドした回数はどうやって取得するか
- 下記のページを参考にして、回数を取得できそうな PowerShell が記載されている https://intovsts.net/2015/08/24/tfs-build-2015-and-versioning/ https://gist.github.com/pietergheysens/14d7d98547fe35470d0e
$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 してコンフリクト解決してすぐコミットしてしまったとき
上記の記事を参考にして、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 中止して最初からやり直しました。