2021/05/10

[備忘録] CentOS 7 に Apache Guacamole 1.3.0 をインストールする ~ その2

前回のその1に続いて Apache Guacamole の構築手順「その2」になります。

今回はWebアプリの部分である guacamole-client のインストール(というかデプロイ)手順になります。Alibaba Cloud の Server Load Balancer (SLB) の設定も一部含みます。

Guacamole サーバー構成(Web/AP)

環境は 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 でアクセスします。

Guacamole ログイン画面

Alibaba Cloud SLB (CLB)の設定

ここからは少し Alibaba Cloud の話が入ります。今回はECSにグローバルIPを持たせていないので、サーバーの前段にロードバランサーを配置します。今回はそこの設定手順も見ていきたいと思います。
※必要な人だけ行ってください。

Guacamole サーバー構成(Web/AP)

Alibaba Cloud の管理コンソールから「Server Load Balancer」のページへ遷移して「Create CLB」を選択します。

Alibaba Cloud CLB の作成

リージョンやインスタンスタイプなどを選択して「Buy Now」を選択します。

Alibaba Cloud CLB の作成詳細

設定内容の確認が出るので「Terms of Service」をチェックして「Activate Now」を選択します。

Alibaba Cloud CLB の作成確認画面

「Server Load Balancer」のページへ戻り一覧から作成した SLB(CLB)の「Configure」を選択します。

Alibaba Cloud CLB の一覧画面

リスナーのプロトコルを選ぶのですが、今回はHTTPSを選択して「Next」を選択します。
なお、HTTPSを使うにはSSL証明書が必要になります。

Alibaba Cloud CLB の設定(プロトコル)

ここで、取込済みの証明書を選択するか、新たに取込んだSSL証明書を選択して「Next」を選択します。
※今回は割愛しますが、必要であれば別途手順を書きます。

Alibaba Cloud CLB の設定(SSL証明書)

バックエンドのサーバーを選択する画面になります。
「VServer Groupe」と「Default server group」がありますが、今回は「Default server group」を選択して「Add More」を選択します。
※「VServer Groupe」は一つのSLBで複数のドメインやURLの宛先に応じて異なるバックエンドに振り分ける場合に使用します。

Alibaba Cloud CLB の設定(バックエンドサーバー)

SLB(CLB)に紐付けるECSを選択します。


Alibaba Cloud CLB の設定(サーバー選択)

今回は1台だけなので「Weight」は100にして「Add」を選択します。

Alibaba Cloud CLB の設定(サーバー追加)

今回バックエンドのTomcatは8080ポートのままなので「port」に8080を入力し「Next」を選択します。

Alibaba Cloud CLB の設定(バックエンドポート指定)

ヘルスチェックはバックのTomcatの設定による部分はありますが・・・デフォルトであればこのままで大丈夫なはずです。
「Next」を選択します。

Alibaba Cloud CLB の設定(ヘルスチェック)

設定内容が表示されるので問題がなければ「Submit」を選択します。

Alibaba Cloud CLB の設定確認画面

こんな感じで表示されれば作成は成功です。

Alibaba Cloud CLB の設定成功

「OK」を選択すると作成したSLB(CLB)が表示されます。
グローバルIPが表示されるので、このIPアドレスをドメインを管理しているDNSにてAレコードとして設定してあげてください。
※この部分は今回割愛させて頂きます。

Alibaba Cloud CLB の一覧画面

一応このままIPでアクセスすることも可能ですが、SSL証明書と合わないので怒られると思います。
DNSの設定前に確認が必要であれば「X.X.X.Xにアクセスする(安全ではありません)」を選択して表示できるかは確認できます。

Alibaba Cloud CLB アクセス(IP直接)

ちなみに、まだ東京リージョンに来ていない且つベータ版ですが、新しく出た Application Load Balancer(ALB) の方はAlibabaが持つドメイン名での提供となります。
※実際に使用されるときはDNSでCNAMEを設定することになるかと思いますが。

Alibaba Cloud ALB のサンプル画面

まずは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) を使用する予定です。

0 件のコメント:

コメントを投稿

Alibaba Cloud の Region 増えてた

  久々に Alibaba Cloud を覗いてみたら・・・ あ、なんかリージョン増えてるわ 昨年発表していたフィリピン(マニラ)リージョン、タイ(バンコク)リージョン、韓国(ソウル)リージョン が増えていたのでちょっと現状確認してみました。 フィリピン(マニラ)リージョンの場合...