前回のその1に続いて Apache Guacamole の構築手順「その2」になります。
今回はWebアプリの部分である guacamole-client
のインストール(というかデプロイ)手順になります。Alibaba Cloud の Server Load Balancer (SLB) の設定も一部含みます。
環境は Alibaba Cloud で OS は CentOS 7.9 を使いました。
Apache Guacamole のバージョンは 1.3.0 です。
guacamole-client は Java アプリケーションサーバー上で稼働しますので、JDKやAPサーバー、ビルドに使うMavenが必要になります。
こちらの構築手順は以下をご参照ください。動かしてみるだけなら yum での導入でも大丈夫です。
なお、guacamole-client のビルドには Java 1.8 が必要になります。
guacamole-client
はwarファイルが公開されていますが、今回は試しにソースコードからビルドしてみます。
Guacamole ソースコードの入手
ソースコードは Apache Guacamole のリリースページ又は、GitHub から取得します。
あとはASF公式のダウンロードページやミラー( https://downloads.apache.org/ とか https://ftp.riken.jp )からの取得も可能です。
こちらではビルド済みのwarファイルも置いてあります。
任意のディレクトリでソースコードを取得します。
# wget https://ftp.riken.jp/net/apache/guacamole/1.3.0/source/guacamole-client-1.3.0.tar.gz
圧縮ファイルを展開します。
# tar -zxvf guacamole-client-1.3.0.tar.gz
# cd guacamole-client-1.3.0
# ls -la
合計 88
drwxrwxr-x 9 1001 1001 4096 12月 29 08:04 .
dr-xr-x---. 6 root root 4096 4月 21 18:33 ..
-rw-r--r-- 1 1001 users 72 11月 1 06:37 .dockerignore
-rw-r--r-- 1 1001 users 11 12月 12 17:46 .gitignore
-rw-r--r-- 1 1001 users 1984 9月 1 2020 CONTRIBUTING
-rw-r--r-- 1 1001 users 1921 11月 1 06:37 Dockerfile
-rw-r--r-- 1 1001 users 15705 9月 1 2020 LICENSE
-rw-r--r-- 1 1001 users 165 10月 26 14:32 NOTICE
-rw-r--r-- 1 1001 users 2484 9月 1 2020 README
drwxrwxr-x 4 1001 1001 4096 7月 6 2020 doc
drwxrwxr-x 12 1001 1001 4096 12月 22 07:07 extensions
drwxrwxr-x 5 1001 1001 4096 4月 21 18:33 guacamole
drwxrwxr-x 3 1001 1001 4096 4月 21 18:33 guacamole-common
drwxrwxr-x 3 1001 1001 4096 4月 21 18:33 guacamole-common-js
drwxr-xr-x 3 1001 users 4096 4月 21 18:33 guacamole-docker
drwxrwxr-x 3 1001 1001 4096 4月 21 18:33 guacamole-ext
-rw-r--r-- 1 1001 users 4908 12月 22 07:07 pom.xml
-rw-r--r-- 1 1001 users 1977 9月 1 2020 project-assembly.xml
guacamole-client のビルド
今回はソースコードを持ってきたのでビルドをしていきます。Java と Maven が必要なので事前に導入してください。
展開したguacamole-client-1.3.0
ディレクトリの直下で mvn package
を実行しアーティファクトを作成します。
# mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] guacamole-common [jar]
[INFO] guacamole-ext [jar]
[INFO] guacamole-common-js [pom]
[INFO] guacamole [war]
[INFO] guacamole-auth-cas [jar]
[INFO] guacamole-auth-duo [jar]
[INFO] guacamole-auth-header [jar]
[INFO] guacamole-auth-jdbc [pom]
[INFO] guacamole-auth-jdbc-base [jar]
[INFO] guacamole-auth-jdbc-mysql [jar]
[INFO] guacamole-auth-jdbc-postgresql [jar]
[INFO] guacamole-auth-jdbc-sqlserver [jar]
[INFO] guacamole-auth-jdbc-dist [jar]
[INFO] guacamole-auth-ldap [jar]
[INFO] guacamole-auth-openid [jar]
[INFO] guacamole-auth-quickconnect [jar]
[INFO] guacamole-auth-saml [jar]
[INFO] guacamole-auth-totp [jar]
[INFO] guacamole-example [war]
[INFO] guacamole-playback-example [war]
[INFO] guacamole-client [pom]
[INFO]
[INFO] ---------------< org.apache.guacamole:guacamole-common >----------------
[INFO] Building guacamole-common 1.3.0 [1/21]
[INFO] --------------------------------[ jar ]---------------------------------
<中略>
[INFO] --- maven-assembly-plugin:2.5.3:single (make-source-archive) @ guacamole-client ---
[INFO] Reading assembly descriptor: project-assembly.xml
[INFO] Building tar: /root/guacamole-client-1.3.0/target/guacamole-client-1.3.0.tar.gz
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] guacamole-common 1.3.0 ............................. SUCCESS [01:44 min]
[INFO] guacamole-ext 1.3.0 ................................ SUCCESS [ 7.072 s]
[INFO] guacamole-common-js 1.3.0 .......................... SUCCESS [ 15.820 s]
[INFO] guacamole 1.3.0 .................................... SUCCESS [01:09 min]
[INFO] guacamole-auth-cas 1.3.0 ........................... SUCCESS [ 16.991 s]
[INFO] guacamole-auth-duo 1.3.0 ........................... SUCCESS [ 2.884 s]
[INFO] guacamole-auth-header 1.2.0 ........................ SUCCESS [ 1.801 s]
[INFO] guacamole-auth-jdbc 1.3.0 .......................... SUCCESS [ 0.028 s]
[INFO] guacamole-auth-jdbc-base 1.3.0 ..................... SUCCESS [ 4.102 s]
[INFO] guacamole-auth-jdbc-mysql 1.3.0 .................... SUCCESS [ 2.728 s]
[INFO] guacamole-auth-jdbc-postgresql 1.3.0 ............... SUCCESS [ 2.599 s]
[INFO] guacamole-auth-jdbc-sqlserver 1.3.0 ................ SUCCESS [ 2.473 s]
[INFO] guacamole-auth-jdbc-dist 1.3.0 ..................... SUCCESS [ 3.354 s]
[INFO] guacamole-auth-ldap 1.3.0 .......................... SUCCESS [ 8.983 s]
[INFO] guacamole-auth-openid 1.3.0 ........................ SUCCESS [ 2.131 s]
[INFO] guacamole-auth-quickconnect 1.3.0 .................. SUCCESS [ 2.622 s]
[INFO] guacamole-auth-saml 1.3.0 .......................... SUCCESS [ 5.058 s]
[INFO] guacamole-auth-totp 1.3.0 .......................... SUCCESS [ 6.922 s]
[INFO] guacamole-example 1.3.0 ............................ SUCCESS [ 1.049 s]
[INFO] guacamole-playback-example 1.3.0 ................... SUCCESS [ 0.367 s]
[INFO] guacamole-client 1.3.0 ............................. SUCCESS [ 3.428 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:24 min
[INFO] Finished at: 2021-04-21T18:39:45+08:00
[INFO] ------------------------------------------------------------------------
BUILD SUCCESS が表示されていればアーティファクトが作成されています。
war ファイルを探すと以下にあるようですね。
# find -name *1.3.0.war -not -path "./doc/*" -ls
1070495 11992 -rw-r--r-- 1 root root 12277217 4月 21 18:38 ./guacamole/target/guacamole-1.3.0.war
あとで使う拡張機能も以下のような所に生成されています。
# find extensions/ -name *1.3.0.jar -ls
791507 3652 -rw-r--r-- 1 root root 3739151 4月 21 18:38 extensions/guacamole-auth-duo/target/guacamole-auth-duo-1.3.0.jar
664165 220 -rw-r--r-- 1 root root 221392 4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/target/guacamole-auth-jdbc-base-1.3.0.jar
664652 4 -rw-r--r-- 1 root root 2611 4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/target/guacamole-auth-jdbc-dist-1.3.0.jar
664639 5584 -rw-r--r-- 1 root root 5717087 4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/target/guacamole-auth-jdbc-sqlserver-1.3.0.jar
796047 5592 -rw-r--r-- 1 root root 5723346 4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/target/guacamole-auth-jdbc-mysql-1.3.0.jar
664517 5588 -rw-r--r-- 1 root root 5720551 4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/target/guacamole-auth-jdbc-postgresql-1.3.0.jar
1192718 1000 -rw-r--r-- 1 root root 1019956 4月 21 18:39 extensions/guacamole-auth-openid/target/guacamole-auth-openid-1.3.0.jar
1074427 4872 -rw-r--r-- 1 root root 4986175 4月 21 18:39 extensions/guacamole-auth-totp/target/guacamole-auth-totp-1.3.0.jar
533809 24 -rw-r--r-- 1 root root 24523 4月 21 18:39 extensions/guacamole-auth-quickconnect/target/guacamole-auth-quickconnect-1.3.0.jar
1192695 7408 -rw-r--r-- 1 root root 7582202 4月 21 18:39 extensions/guacamole-auth-ldap/target/guacamole-auth-ldap-1.3.0.jar
665518 3960 -rw-r--r-- 1 root root 4053779 4月 21 18:39 extensions/guacamole-auth-saml/target/guacamole-auth-saml-1.3.0.jar
1189984 3772 -rw-r--r-- 1 root root 3858939 4月 21 18:38 extensions/guacamole-auth-cas/target/guacamole-auth-cas-1.3.0.jar
guacamole-client (Web アプリ) のデプロイ
デプロイ先に Java のアプリケーションサーバーが必要です。
今回は Tomcat を使用しています。warファイルを配置します。
# cp guacamole/target/guacamole-1.3.0.war /opt/tomcat/webapps/guacamole.war
# ls -la /opt/tomcat/webapps/
合計 12024
drwxr-x--- 8 tomcat tomcat 4096 4月 21 21:09 .
drwxr-xr-x 9 tomcat tomcat 4096 4月 21 15:52 ..
drwxr-x--- 3 tomcat tomcat 4096 4月 20 14:04 ROOT
drwxr-x--- 15 tomcat tomcat 4096 4月 20 14:04 docs
drwxr-x--- 7 tomcat tomcat 4096 4月 20 14:04 examples
drwxr-x--- 11 tomcat tomcat 4096 4月 21 21:09 guacamole
-rw-r--r-- 1 root root 12277217 4月 21 21:09 guacamole.war
drwxr-x--- 6 tomcat tomcat 4096 4月 20 14:04 host-manager
drwxr-x--- 6 tomcat tomcat 4096 4月 20 14:04 manager
以下の画面が表示出来ればデプロイは成功です。webサーバーがいれば https://xxxxxxx/guacamole Tomcatに直接であれば http://localhost:8080/guacamole でアクセスします。
Alibaba Cloud SLB (CLB)の設定
ここからは少し Alibaba Cloud の話が入ります。今回はECSにグローバルIPを持たせていないので、サーバーの前段にロードバランサーを配置します。今回はそこの設定手順も見ていきたいと思います。
※必要な人だけ行ってください。
Alibaba Cloud の管理コンソールから「Server Load Balancer」のページへ遷移して「Create CLB」を選択します。
リージョンやインスタンスタイプなどを選択して「Buy Now」を選択します。
設定内容の確認が出るので「Terms of Service」をチェックして「Activate Now」を選択します。
「Server Load Balancer」のページへ戻り一覧から作成した SLB(CLB)の「Configure」を選択します。
リスナーのプロトコルを選ぶのですが、今回はHTTPSを選択して「Next」を選択します。
なお、HTTPSを使うにはSSL証明書が必要になります。
ここで、取込済みの証明書を選択するか、新たに取込んだSSL証明書を選択して「Next」を選択します。
※今回は割愛しますが、必要であれば別途手順を書きます。
バックエンドのサーバーを選択する画面になります。
「VServer Groupe」と「Default server group」がありますが、今回は「Default server group」を選択して「Add More」を選択します。
※「VServer Groupe」は一つのSLBで複数のドメインやURLの宛先に応じて異なるバックエンドに振り分ける場合に使用します。
SLB(CLB)に紐付けるECSを選択します。
今回は1台だけなので「Weight」は100にして「Add」を選択します。
今回バックエンドのTomcatは8080ポートのままなので「port」に8080を入力し「Next」を選択します。
ヘルスチェックはバックのTomcatの設定による部分はありますが・・・デフォルトであればこのままで大丈夫なはずです。
「Next」を選択します。
設定内容が表示されるので問題がなければ「Submit」を選択します。
こんな感じで表示されれば作成は成功です。
「OK」を選択すると作成したSLB(CLB)が表示されます。
グローバルIPが表示されるので、このIPアドレスをドメインを管理しているDNSにてAレコードとして設定してあげてください。
※この部分は今回割愛させて頂きます。
一応このままIPでアクセスすることも可能ですが、SSL証明書と合わないので怒られると思います。
DNSの設定前に確認が必要であれば「X.X.X.Xにアクセスする(安全ではありません)」を選択して表示できるかは確認できます。
ちなみに、まだ東京リージョンに来ていない且つベータ版ですが、新しく出た Application Load Balancer(ALB) の方はAlibabaが持つドメイン名での提供となります。
※実際に使用されるときはDNSでCNAMEを設定することになるかと思いますが。
まずはWebアプリにアクセスできる所まで来ました。
ただし、このままだとログインユーザーや接続先の設定などは出来ていないので、そちらの準備をしていきます。
Guacamole を利用するにはデフォルトの user-mapping.xml
を使った方法と別途DBを使う方法があります。
今回はコストは掛かりますが管理のしやすいDBを使った方法でいきたいと思います。
DBを立てられない、一人で簡単に使いたいだけであれば /etc/guacamole/user-mapping.xml
に以下のような設定をすることで利用可能です。
詳しくは公式の手順をご確認ください。
https://guacamole.apache.org/doc/gug/configuring-guacamole.html#basic-auth
<user-mapping>
<!-- ログイン用ID/Pass -->
<authorize username="guacuser" password="y7eQkJKZME#oW6jc4E">
<!-- ログイン先のサーバー情報 -->
<connection name="Win">
<protocol>rdp</protocol>
<!-- hostname または プライベートIP -->
<param name="hostname">10.100.10.120</param>
<param name="port">3389</param>
<param name="username">Administrator</param>
<param name="password">4NU&*34M8LX5fZ8LL@</param>
</connection>
<connection name="Win2">
<protocol>rdp</protocol>
<param name="hostname">10.100.10.153</param>
<param name="port">3389</param>
<param name="username">Administrator</param>
<param name="password">4NU&*34M8LX5fZ8LL@</param>
</connection>
</authorize>
</user-mapping>
次回は DB を使った部分の設定をご紹介していきます。
DB は ECS に立てても良いのですが Alibaba Cloud の Relational Database Service (RDS) を使用する予定です。