WindowsServerでUniFi Network ApplicationをWindowsサービスとして設定する方法（自己ホスト版）

# はじめに
この記事では、WindowsServer環境でUniFi NetworkアプリケーションをWindowsサービスとして設定する手順を紹介します。通常はUniFi Network Applicationをインストールした状態だとランチャーとしてフォアグラウンドで実行されてしまいますが、UniFi Network Applicationをバックグラウンドで実行することで、より安定した運用や自動起動の実現が可能となります。

なお、公式でも同様の手順を英語で紹介しています。
ほとんど日本語訳したものになりますが、少しだけ手順を追加していたり、私なりのアレンジを加えたりしています。

【公式ドキュメント】
Self-Hosted UniFi Network Server as a Windows Service (Advanced)
https://help.ui.com/hc/en-us/articles/205144550-UniFi-Run-the-Network-Application-as-a-Windows-Service

:::note info
**ランチャーとWindowsサービス**
- **ランチャー**：UniFi Network Applicationが前面で実行されます（デフォルト）
- **Windowsサービス**：UniFi Network Applicationがバックグラウンドで実行されます（高度な設定）
:::

# 注意事項と要件
:::note warn
**公式サイトの動作保証範囲を超える内容ですので、注意が必要です。**
:::
- Windows Server環境でUniFi Network Application ver7.3.83.0を利用していますが、公式サイトではWindows 10/11での動作が保証されています。
- 本記事では、Windows Server環境でのUniFi Network Applicationの設定方法について説明しています。
- UniFi Network Applicationが使用するポートをWindowsファイアウォールで許可するようにしてください。詳細については、[UniFi Network - Required Ports Reference](https://help.ui.com/hc/en-us/articles/218506997)の記事を参照してください。


# 説明概要
1. UniFi Network Applicationのダウンロード
1. Java 11のインストールと設定
1. UniFi Network Applicationの新規インストール
1. サービスのインストール
1. サービスの起動と動作確認
1. UniFi Network Applicationの既存インストールからのアップグレード手順

# 新しいUniFi Network Applicationをサービスとして設定する
:::note warn
**注意**
* 最新バージョンのUniFi Network Application（7.3）では、Java 11が必要です。
* 以前のバージョン（7.2）では、Java 8が使用されます。
* 【x64 Javaリリース】のみをインストールし、Javaのバージョンは1つだけにしてください。
:::

## UniFi Network Applicationのダウンロード
[ダウンロードページ](https://www.ui.com/download/unifi/)から最新のUniFi Networkアプリケーションをダウンロードしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/c51b6ab6-2299-09b1-9c91-649a7ed4def0.png "UniFiNetworkアプリケーションダウンロードページ")

## Java 11のインストールと設定
[こちらのサイト](https://adoptium.net/temurin/releases/?version=11)で以下のオプションを選択し、Windows用のx64 .msiファイルをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/f7ed2782-ec4c-f8de-8626-f74bddbe2ddb.png)

:::note info
**ダウンロードするファイル**
* OS：Windows
* アーキテクチャ：x64（それぞれの環境に合わせてください）
* パッケージタイプ：JRE
* バージョン：11
:::

:::note warn
**注意**
JAVA_HOME変数が正しく設定されていない場合、サービスのインストールは成功しません。
Java 11インストーラーや変数に問題がある場合は、システムに存在する他の/古いJavaバージョンを削除してください。
:::


インストールを実行し、カスタムセットアップ画面で「Set JAVA_HOME variable」を「ローカルハードドライブにインストール」に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/2157352e-a199-a317-6234-d29e8a896673.png)

設定出来たら次へを押していき、インストールを完了させて下さい。

## UniFi Network Applicationの新規インストール
ダウンロードしたUniFi Network Applicationの.exeファイルを実行して案内のままインストールを実行してください。

インストールが完了したら、ランチャーは起動せずに完了してください。もし起動してもランチャーを閉じれば問題ありません。


## サービスのインストール
管理者権限のあるWindowsコマンドプロンプト（cmd）ウィンドウを開きます。

UniFi Network Applicationのインストール場所にディレクトリを変更します。

```
cd "%UserProfile%\Ubiquiti UniFi"
```

UniFiフォルダーのルートに入ったら、以下のコマンドを実行してサービスをインストールします。

```rb
java -jar lib\ace.jar installsvc
```

インストールが完了するまで待ちます。完了したことを示す「Complete Installation」のログメッセージが表示されます。

サービスにUniFiNetworkアプリケーションが追加されたか確認しましょう。
Windowsキー + Rキーを押して「実行」ダイアログボックスを開き、ダイアログボックスに「services.msc」と入力して「OK」ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/324ba305-9604-8298-e9f6-be2adf7802fb.png)

サービス管理コンソールが開くのでUniFiNetworkアプリケーションを探します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/aa3c6008-82e1-a855-3907-2dd12fa75e03.png)
画像の様に見つかれば問題ありません。
**※画像では状態が「実行中」になっていますが、この段階では「停止」になっているはずです。**




## サービスの起動と動作確認

以下のコマンドでサービスを起動します
```rb
java -jar lib\ace.jar startsvc
```

ブラウザを開き、アプリケーションのIPアドレスまたはhttps://localhost:8443に移動します。

:::note info
**404ERRORが出たら**
1分ほど待ってからもう一度アクセスしてみてください。
サービス起動から少し時間がかかります。
:::

下図のように初期セットアップ画面が出てくれば成功です。
![スクリーンショット 2023-05-17 120953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1675077/e68e60d9-f511-c596-da18-da0c7b909787.png)




# UniFi Network Applicationの既存インストールからのアップグレード手順


## バックアップ
UniFi Network Applicationのバックアップファイルをダウンロードします。

## サービスのアンインストール
管理者権限のあるWindowsコマンドプロンプト（cmd）ウィンドウを開きます。

UniFiのインストール場所にディレクトリを変更します。
```
cd "%UserProfile%\Ubiquiti UniFi"
```

UniFiフォルダーのルートに入ったら、以下のコマンドを実行してサービスをアンインストールします。
```
java -jar lib\ace.jar uninstallsvc
```

サービスのアンインストールプロセスが完了するまで待ちます。

この後は新規インストール手順と同じです。

# おまけ「\Program Filesにサービスをインストールする方法」
サービスを特定のユーザーにインストールせずにProgram Filesにインストールする方法があります。
あくまでもおまけなので箇条書きです。

1. サービスを停止します。
1. コマンドプロンプトを起動し、「Ubiquiti UniFi」ディレクトリにディレクトリを変更します。
1. javaコマンドでサービスをアンインストールします。
1. 「Ubiquiti UniFi」ディレクトリを切り取り、「\Program Files」ディレクトリに貼り付けます。
1. コマンドプロンプトで「\Program Files\Ubiquiti UniFi」にディレクトリを移動します。
1. Javaコマンドでサービスをインストールします。
1. サービスを起動します。

最後にWebブラウザからアクセスできれば完了です。

:::note
**各種コマンド**
- サービスインストールコマンド
```java
java -jar lib\ace.jar installsvc
````

- サービスアンインストールコマンド
```java
java -jar lib\ace.jar uninstallsvc
````
:::


# おわりに
今回はUniFi NetworkをWindowsServerでサービスとして利用する手順を紹介しました。
もちろん、WindowsServerでUniFiNetwork Applicationをランチャーとして起動しても問題なく利用できますが、高度な設定が出来ません。もし高度な設定をする方はサービスで起動させた方がおすすめです。