Windows環境のGit WebUIサーバー構築

# 概要

Linuxマシンを用意する方が早いのは重々承知の上で、
Windows環境でサーバー構築する話。

サーバー機として使えるマシンが、
既に別の常駐ソフトが稼働中のWindowsマシンしか無いという事案。

手段として下記の2つを考える。

* Windows Subsystem for Linux(WLS)を使う
* Windowsで構築する


# WLSを使う

Unixが使い慣れていることと、なるべく既存ソフトに影響を与えないようにとWLS を検討する。
はたしてWLSにUbuntuを入れれば普通のLinuxサーバーっぽく動作させられるのか、試してみることにする。

## WLSを起動するまでの設定手順

Windows10の「Windowsの機能の有効化または無効化」から、Windows Subsystem for Linuxのチェックを有効にする

### Ubuntu 設定

#### インストール
Microsoft StoreからUbuntuを検索して、Ubuntu18.04 LTSを入手する

設定で開発者モードを有効にする

#### Proxy設定を入力（必要なら）
sudo vi /etc/environment
http_proxy="http://user:path@proxy-server:proxy-port"
https_proxy="http://user:path@proxy-server:proxy-port"
ftp_proxy="http://user:path@proxy-server:proxy-port"

### ssh有効化

vi /etc/ssh/sshd_config
 -> 変更する PasswordAuthentication yes
sudo ssh-keygen -A
sudo service ssh restart

### アンインストール方法

無事に動いているが、一旦アンインストールしたい場合は、普通にWindows10のスタートアップかアプリ画面でアイコン右クリックでアプリを削除を選べばできた。
削除しおわってアイコンが消えるのに2, 3分くらいかかった。

## WebUIのインストール

Gitに標準で付いているWebUIでは1プロジェクト毎にサーバーを立てる必要があるため、
もう少し高機能なWebUIがほしいと考えた。
今回は導入に成功したGitクライアント以外に幾つか試したものがあるため、
どんな状況だったのかを記録するために、ここに記しておく。

今回試したWeb UIは下記の通り。

* GitLab （不可）
* Kallithea （不可）
* GitBucket インストールできた

最低限の条件としては、Freeで使えること。
ユーザーとプロジェクトの管理ができること。
その点で、GitWebは除外したがプロジェクト単体で管理したいならベストだろう。
gintra, ungitなどはUIが一般的な気がしなかったため、除外した。


### GitLab

#### Ubuntu アップデート
$ sudo apt update
$ sudo apt upgrade

#### Gitlab インストール

$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
$ sudo apt install gitlab-ce

更新後に、下記のコマンドで再コンフィグをかける
$ sudo gitlab-ctl reconfigure

ここで永久にコンフィグが完了しない問題が発生している。
非WLSのLinuxマシンでのUbuntuでは本手順で問題ないことは確認できており、
gitlabはスタートアップ関連にも依存があるというか自動設定してくれるため、
そのあたりに何か問題が出ているだろうという見当は有るのだが、
ここまで高級なクライアントを求めているわけではないため、次を試したい。
ちなみに、VirutalBoxだとインストール出来るらしい。

### Kallithea

#### python 関連の準備
apt-get install python-dev
apt-get install git
apt-get install python-pip
easy_install pip
easy_install PasteScript

#### Kallitheaのインストール
pip install kallithea
paster make-config Kallithea kallithea.ini
pasterのエラーが取れず挫折。


### GitBucket

JettyやH2DB、Gitのjava実装を内蔵しているため、最小構成で利用する場合は、
gitbucket.warをwgetして、java -jar gitbucket.warするだけで実行可能。もちろん拡張も可能。

gitbucketのデータやリポジトリが置かれる場所は、デフォルトでは~/.gitbucketだったため、環境変数GITBUCKET_HOMEに指定すると変更できた。
8080ポート指定は、apache-tomcat-8.5.8/conf/server.confで変更できる。

SSHを使う場合、User Managementから『System Settings』を変更することになるが
ブラウザ経由でGitBucketにアクセスできなくなる場合がある。
そのときは、設定ファイルを直接編集して修正する。.gitbucket/gitbucket.conf 

# Windowsで構築する

※この件に関しては１個づつ環境をインストールしていく手順で進めたことにより
　動作はしているが環境の拡張性が乏しくなった。
　XAMPPに統一すべきだったと反省している。

## Web UIのインストール

### Gitbucket
上記検討の結果、Gitbucket自体はJavaで動作しており、
Webサーバー側のGitクライアントはGitのJava実装であるということ。
例えば、WLSを使う必要がなくGitのWebクライアントだけを入れたい場合は普通にWindowsのシェルで起動すれば良い。

他のWebアプリと起動しない、Tomcatが必要ないという状況であれば下記だけでいい。

>java -jar C:\gitbucket\gitbucket.war --port=80 --prefix=/gitbucket --gitbucket.home=hogehoge

サービス化する場合は、管理者実行したコマンドプロンプトで

> sc create binPath="GitBucket java -jar C:\gitbucket\gitbucket.war --port=80 --prefix=/gitbucket --gitbucket.home=hogehoge"

## Redmine

ApacheのウェブサーバーとMySQLとそれらサービスの起動・停止マネージャーがオールインワンになっているBitnami Redmineをインストールするのが一番簡単。

### インストール

インストーラーに従ってインストールするだけ。

MySQL, Apache, Redmine は自動的にサービスに追加される。

それぞれ単独で再起動などしたい場合は、C:\Bitnami\redmine-4.0.5-0に、
manager-windows.exe という実行ファイルがあり、
このGUIを使って再起動などをかけられる。

### メール設定

#### config/configuration.ymlを編集

C:\Bitnami\redmine-4.0.5-0\apps\redmine\htdocs\config にある。
defaultのconfigは設定例がいっぱい書いてあるため
バックアップしておき、設定だけを記載するようにする
詳しくは[公式](http://redmine.jp/config/configuration_yml/)を見よう。[Gmailの設定方法](http://redmine.jp/faq/general/mail_notification/)はここに書いてある
login認証が不要な場合はauthは書かなくていい。

#### 設定の反映
Bitnamiフォルダをmanager-windows.exeで検索してRestart All

#### 確認

管理->設定->メールからメールアドレスを入力して、テストメールを送信で確認

### プラグイン追加

#### EasyGantt

Easyganttを公式からダウンロードすると、3.0と4.0が入っているため
今回は4.0を解凍して出てきたeasy_ganttを
C:\Bitnami\redmine\apps\redmine\htdocs\pluginsに展開した

次に、bundle install を使用できるようにするため、
システム環境変数の「Path」に次を追加した　※別にしなくても
C:\Bitnami\redmine-[version]\ruby\bin

コマンドプロンプトを開いて、プロキシ設定
set http_proxy=http://proxy.hogehoge.co.jp:8080

インストール
cd C:\Bitnami\redmine\apps\redmine\htdocs
bundle install --no-deployment
bundle exec rake db:migrate RAILS_ENV=production

管理者でコマンドプロンプトを実行しないと、bundle execでDBが生成されない。
表示上は特にエラー等が出ないので地味にはまる。

#### view-customize

同じようにview-customizeを追加する

CSS, Javascriptを使って、見た目などを拡張しやすくなるので便利

git clone https://github.com/onozaty/redmine-view-customize.git view_customize
cd ../
bundle install --no-deployment
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

#### knowledgebase

[本家](https://github.com/alexbevi/redmine_knowledgebase)が更新されておらずRails5に対応していないようなので、
[folk](https://github.com/southbridgeio/redmine_knowledgebase)のcommit 5109c5cb275441cef9bf2abd6c460d7daadf162eを持ってきた。

それでも、migrationでエラーとなる、これくらいはgemが無視してくれてもいいじゃんと思うが、

Cannot drop index 'index_taggings_on_tag_id': needed in a foreign key constraint: DROP INDEX `index_taggings_on_tag_id` ON `taggings`

db\migrate\20150326093104_add_missing_unique_indice.rbでコメントアウトしたらインストールできた

    #add_index :tags, :name, unique: true
    #remove_index :taggings, :tag_id
    #remove_index :taggings, [:taggable_id, :taggable_type, :context]