Windows Server2016のIISでGitbucketを動かす

GitbucketをWindowsServer2016へセットアップした時のメモです。公式のセットアップ方法 「Installation on IIS and Helicontech Zoo」でサーブレットコンテナにJettyを使う方法がが全く上手くかなかったため*1 IIS + Tomcatで環境を構築しています。Windows10でも同様の手順で作業すれば行けると思います。

余談ですが、公式の説明にあった Web Platform Installer が、もうメンテされずに腐ってて、Jetty の更新時刻が2012年3月の上リンク切れしていました。5年前・・・

セットアップ環境

セットアップした環境は以下の通りです。Tomcatだけ9ではなく8を使用しています。また社内ユースで悪用は想定していないのでプロトコルはHTTPです。HTTPS化の手順はここでは説明しません*2

項目 内容
OS WindowsServer 2016 *3
IIS 10.0
Java Java8 update131
サーブレットコンテナ Tomcat 8.5.15
コネクタ HttpPlatformHandler1.2
GitBucket 4.13.0

HttpPlatformHandlerのインストール

Javaはデフォルトの位置へインストール済み、IIS10.0も有効になっている前提でセットアップを開始したいと思います。先ずはHttpPlatformHandlerをここからダウンロードしてインストールします。少しわかりにくいですが、以下の画像の赤枠をクリックします。

f:id:Takachan:20170608010633p:plain

Accept にチェックを入れて [Install] を選択します。

f:id:Takachan:20170608010434p:plain

一瞬でインストールが完了しますが、このソフトはスタートメニューやデスクトップににショートカットが登録されたりはしません。手ごたえがありませんが、[Finish] 押したらそれで完了です。

Tomcatのインストール

公式ページからTomcat8をダウンロードしてきます。Windows向け32/64bitインストーラを選択してください。

f:id:Takachan:20170608010813p:plain

インストーラーを起動したら全部デフォルトでインストールします。

f:id:Takachan:20170608010849p:plain

f:id:Takachan:20170608010915p:plain

Java はインストールされていれば勝手にパスが入っているハズです。

f:id:Takachan:20170608010948p:plain

インストールパスもデフォルトのまま [Install] します。

f:id:Takachan:20170608011013p:plain

最後に、以下をチェックしてインストールを [Finish] します。

Run Apatch Tomcat

Tomcatの動作確認

Webブラウザを立ち上げてアドレスバーに

http://loalhost:8080

と入力してお馴染みの画面が出るかどうか確認します。

f:id:Takachan:20170608011041p:plain

Gitbucket.watのデプロイ

先ずは、Tomcat 上で Gitbucket が動作するか確認します。Gitbucket のページから gitbucket.war ファイルをダウンロードします。

f:id:Takachan:20170608011309p:plain

ダウンロードしたファイルを以下フォルダ内にコピーします。

C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\gitbucket.wat

アドレスバーへ以下 URL を入力して Gitbucket が表示されるか確認します。

http://localhost:8080/gitbucket/

ブラウザ上では以下の通り表示されると思います。

f:id:Takachan:20170608011513p:plain

IISの設定

以下フォルダに gitbucket フォルダを作成します。

C:\inetpub\wwwroot

gitbucket フォルダ内に以下 web.config ファイルを以下内容で作成して配置します。

<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler"
           path="*"
           verb="*"
           modules="httpPlatformHandler"
           resourceType="Unspecified" />
    </handlers>
    <httpPlatform processPath="C:\Program Files\Apache Software Foundation\Tomcat 8.5\bin\startup.bat"
                  arguments="">
      <environmentVariables>
        <environmentVariable name="CATALINA_OPTS"
                             value="-Dport.http=%HTTP_PLATFORM_PORT%" />
        <environmentVariable name="CATALINA_HOME"
                             value="C:\Program Files\Apache Software Foundation\Tomcat 8.5" />
        <environmentVariable name="JRE_HOME"
                             value="C:\Program Files\Java\jdk1.8.0_131" />
        <!-- optional, if not specified, this will default to %programfiles%\Java -->
        <environmentVariable name="JAVA_OPTS"
                             value="-Djava.net.preferIPv4Stack=true" />
      </environmentVariables>
    </httpPlatform>
    <security>
      <requestFiltering>
        <fileExtensions>
          <remove fileExtension=".ldb" />
          <remove fileExtension=".refresh" />
          <remove fileExtension=".webinfo" />
          <remove fileExtension=".vjsproj" />
          <remove fileExtension=".vbproj" />
          <remove fileExtension=".vb" />
          <remove fileExtension=".resx" />
          <remove fileExtension=".resources" />
          <remove fileExtension=".mdf" />
          <remove fileExtension=".mdb" />
          <remove fileExtension=".master" />
          <remove fileExtension=".exclude" />
          <remove fileExtension=".java" />
          <remove fileExtension=".csproj" />
          <remove fileExtension=".config" />
          <remove fileExtension=".ascx" />
          <remove fileExtension=".asax" />
          <remove fileExtension=".cs" />
        </fileExtensions>
        <hiddenSegments>
          <remove segment="App_Browsers" />
          <remove segment="App_WebReferences" />
          <remove segment="App_LocalResources" />
          <remove segment="App_GlobalResources" />
          <remove segment="App_Data" />
          <remove segment="App_code" />
          <remove segment="web.config" />
        </hiddenSegments>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

特に大切なのは以下の2つです。稼働環境に合わせて書き換えが必要な場合があります。

  • CATALINA_HOME:Tomcat インストールパス
  • JRE_HOME:Java のインストールパス

Tomcatの定義ファイルの変更

ほぼ、ここに書いてあるのですが関係する定義ファイルを編集します。IISとの連携の設定と、外部から8080ポートでTomcatにアクセスできないように穴を塞ぐため、以下フォルダ内にある3つのファイルを編集します。

C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf

  • context.xml
  • server.xml
  • web.xml

context.xml

reloadable 属性を追記します。

<Context reloadable="true">

server.xml

Shutdown ポートを無効化します。

<Server port="-1" shutdown="SHUTDOWN">

WebサーバーのポートをIISのものへ変更し、外部からのアクセスができないように変更します。

編集前

<Connector port="8080" protocol="HTTP/1.1"

編集後

<Connector port="${port.http}"
           address="127.0.0.1"
           protocol="HTTP/1.1"

以下定義をコメントアウトします。

<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->

web.xml

listings を true へ変更します。

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>true</param-value> <!-- ここ -->
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

編集が完了したらサービス管理画面から Apatch Tomcat 8.5 を再起動し、IIS も併せて再起動します。

表示の確認

以下アドレスが接続できないことを確認します。

http://localhost:8080/

以下アドレスで、Gitbucket にアクセスできることを確認します。

http://localhost/gitbucket/

f:id:Takachan:20170608011605p:plain

データベースの変更

こちらのサイト参考に、データベースを Gitbucket から MySqlに変更します。例によってMySqlは全てデフォルトでセットアップ済みとします。

上記例だと以下のパスに gitbucket.war が展開されているはずなのでそこへ移動します。(このパス本当にこれでいいのかは大変疑問ですが…)

C:.gitbucket

この中に、database.conf というファイルがあるので内容を以下の通りに書き換えます。

db {
  url = "jdbc:mysql://localhost/gitbucket?useUnicode=true&characterEncoding=utf8"
  user = "administrator"
  password = "superuser"
}

自分のサーバーは大変雑な管理をしているため user と pass が適当ですがセットアップの際は運用ポリシーに従った内容を設定してください。

内容を変更したら、Tomcat, IIS 共に再起動し Web ページが表示されれば作業は完了です。

*1:主に当方のJettyに対する認識不足だとは思いますが、、、

*2:Java, IIS, MySQLの説明もここではしません。

*3:オンプレミンスな物理サーバー使用