【Guacamole中文文档】二、用户指南 —— 3.用Docker安装Guacamole
用Docker安裝Guacamole
可以使用Docker部署Guacamole,無需從源代碼構建guacamole-server或手動配置web應用程序。Guacamole項目為Guacamole和guacd提供了官方支持的Docker圖像,并在每次發布時保持最新。
Guacamole典型的Docker部署方式將涉及三個單獨的容器,在創建時連接在一起:
-
guacamole/guacd
提供guacd守護進程,從guacamole-server源碼構建,支持VNC、RDP、SSH、telnet以及Kubernetes協議。
-
guacamole/guacamole
提供運行在Tomcat 8上的Guacamole Web應用程序,支持WebSocket。當基于Docker鏈接或環境變量啟動時,將自動生成連接到guacd,MySQL ,PostgreSQL ,LDAP等所需的配置。
-
mysql或postgresql
提供Guacamole用于身份驗證和存儲連接配置數據的數據庫。
這種分離很重要,因為它有助于升級并保持適當的關注點分離。由于數據庫與Guacamole和guacd分開,這些容器可以隨意銷毀和重新制作。唯一必須通過升級來維持數據的容器是數據庫。
運行guacd的Docker鏡像
guacd的Docker鏡像從guacamole-server的發行版源代碼中以支持VNC,RDP,SSH,telnet和Kubernetes的方式構建。常見如安裝所需的依賴項、為SSH、telnet或Kubernetes安裝字體,以及確保將FreeRDP插件安裝到正確的位置等陷阱都得到了解決。它將簡單地只是運轉。
運行Guacamole的Docker鏡像使用的guacd
當運行guacd映像以鏈接到Guacamole容器時,網絡上不需要暴露任何端口。鏈接期間,Docker將自動處理對這些端口的訪問,Guacamole鏡像將正確檢測和配置與guacd的連接。
$ docker run --name some-guacd -d guacamole/guacd以這種方式運行時,guacd將在默認端口4822上持續偵聽,但該端口將僅對已顯式鏈接到some-guacd的Docker容器可用。
guacd的日志等級可以通過GUACD_LOG_LEVEL環境變量控制。默認值是info,且可以被設置成guacd日志標志(-L)的任何有效設置。
$ docker run -e GUACD_LOG_LEVEL=debug -d guacamole/guacd運行guacd供Docker外的服務使用
如果你不打算使用Guacamole鏡像,你仍然可以利用guacd鏡像來方便地安裝和維護。通過公開guacd端口4822,Docker外部的服務將能夠訪問到guacd。
?重點: 執行此操作時要格外小心,guacd是一個被動代理,不執行任何類型的身份驗證。 如果你沒有將guacd與網絡中不受信任的部分正確隔離,惡意用戶可能會將guacd用作其他系統的跳轉點。 $ docker run --name some-guacd -d -p 4822:4822 guacamole/guacdguacd現在將監聽4822端口,Docker將在托管Docker的同一服務器上公開該端口。其他服務,例如在Docker外部運行的Tomcat實例,將能夠直接連接到該guacd。
Guacamole的Docker鏡像
Guacamole的Docker鏡像構建在標準Tomcat 8鏡像之上,并自動處理所有配置。在創建容器時,使用環境變量或Docker鏈接指定了guacd和各種身份驗證機制所需的配置信息。
?重點: 如果使用PostgreSQL或MySQL進行身份驗證,需要手動初始化數據庫。Guacamole不會自動生成它的數據表,但會提供所需的SQL腳本。Guacamole鏡像運行后,就可以通過http://*HOSTNAME*:8080/guacamole/鏈接訪問Guacamole,其中HOSTNAME是托管Docker服務的機器的主機名或IP地址。
用Docker方式啟動時配置Guacamole
使用Docker運行Guacamole時,通過編輯guacamole.properties來配置Guacamole的傳統方法不太方便。在使用Docker方式時,你可能希望使用enable-environment-properties配置屬性,以允許使用環境變量為任意Guacamole配置屬性指定值。將在《配置Guacamole》章節中進行介紹。
連接Guacamole到guacd
Guacamole的Docker鏡像需要能夠連接到guacd以建立遠程桌面連接,就像任何其他Guacamole部署一樣。Guacamole所需的連接信息將通過Docker鏈接或環境變量提供。
如果你將使用Docker提供guacd,并且希望使用Docker鏈接將Guacamole鏡像連接到guacd,連接詳情暗含在Docker鏈接中:
$docker run --name some-guacamole \--link some-guacd:guacd \...-d -p 8080:8080 guacamole/guacamole如果你不是通過Docker提供的guacd,你需要使用額外的環境變量提供網絡連接信息:
-
GUACD_HOSTNAME
guacd實例用于建立遠程桌面連接的主機名。如果沒有通過Docker方式來提供guacd則需要這一項。
-
GUACD_POST
Guacamole連接到guacd時使用的端口。該環境變量是可選的。如果沒有提供,則會使用標準的guacd端口,4822。
因此,如果不能或不希望使用Docker鏈接的方式,則可以使用GUACD_HOSTNAME和GUACD_PORT環境變量來替代:
$ docker run --name some-guacamole \-e GUACD_HOSTNAME=172.17.42.1 \-e GUACD_PORT=4822 \...-d -p 8080:8080 guacamole/guacamole要想讓Guacamole發揮作用,與guacd的連接并不是唯一的要求;還需要配置一些身份驗證機制。MySQL、PostgreSQL和LDAP在這方面都是受支持的,下面的章節將對此進行更詳細的描述。如果沒有提供至少一種身份驗證機制所需的配置選項,Guacamole鏡像將無法啟動,并且你將會看到一個錯誤。
MySQL身份驗證
以MySQL身份驗證后端機制使用Guacamole,你需要運行mysql鏡像的Docker容器,或通過網絡訪問MySQL運轉設備。可以使用環境變量或Docker鏈接指定MySQL的連接。
初始化MySQL數據庫
如果數據庫尚未使用Guacamole模式初始化,則需要在使用Guacamole之前進行初始化。Guacamole鏡像中包含了一個方便的腳本,用于生成執行此操作所需的SQL。
生成用于初始化新MySQL數據庫的SQL腳本(如《數據庫身份驗證》中所述),請執行以下操作:
$ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql或者,可以使用《數據庫身份驗證》中包含的SQL腳本。生成此腳本后,你必須:
通過MySQL附帶的mysql實用程序執行此操作的過程記錄在《數據庫身份驗證》。
連接Guacamole到MySQL
如果你的MySQL數據庫是被其他Docker容器提供的,并且你希望使用一個Docker鏈接連通Guacamole鏡像和你的數據庫,連接詳情暗含在Docker鏈接中:
$ docker run --name some-guacamole \--link some-guacd:guacd \--link some-mysql:mysql \...-d -p 8080:8080 guacamole/guacamole如果你不是通過Docker來提供你的MySQL數據庫,你需要使用額外的環境變量來提供你的數據庫網絡連接信息:
-
MYSQL_HOSTNAME
Guacamole身份驗證使用的數據庫的主機名。如果你沒有通過Docker來提供你的MySQL數據庫,則需要該項。
-
MYSQL_PORT
Guacamole連接到MySQL時使用的端口。該環境變量是可選的。如果沒有提供,則會使用標準的MySQL服務端口,3306。
因此,如果不能或不希望通過Docker鏈接的方式,MYSQL_HOSTNAME和MYSQL_PORT環境變量可以用于替代:
$ docker run --name some-guacamole \--link some-guacd:guacd \-e MYSQL_HOSTNAME=172.17.42.1 \...-d -p 8080:8080 guacamole/guacamole注意,與MySQL的Docker鏈接一樣,也可以不需要guacd的Docker鏈接(上述--link some-guacd:guacd選項)。guacd的連接信息可以使用環境變量指定,如《連接Guacamole到guacd》章節中所述。
必須的環境變量
使用MySQL進行身份驗證需要通過環境變量指定其他配置參數。這些變量共同描述了Guacamole將如何連接到MySQL:
-
MYSQL_DATABASE
Guacamole身份驗證使用的數據庫名稱。
-
MYSQL_USER
Guacamole用于連接MySQL的數據庫用戶。
-
MYSQL_PASSWORD
Guacamole使用MYSQL_USER連接MySQL數據庫時使用的密碼。
省略了任何必需的環境變量,都將在日志中收到一條錯誤消息,鏡像將停止運行。然后需要使用指定的正確的變量重新創建容器。
可選的環境變量
對于一個或多個用戶并發使用的連接,可以使用其他可選環境變量來覆蓋Guacamole的默認行為。連接和連接組的并發使用可以限制為一個總的最大值和(或)每用戶的最大值:
-
MYSQL_ABSOLUTE_MAX_CONNECTIONS
在任何時候允許的并發連接的絕對最大數量,無論涉及的是Guacamole連接還是用戶參與。如果設置為0,則表示沒有限制。由于此限制適用于所有Guacamole連接,因此如果設置此限制,則無法覆蓋。
默認情況下,并發連接的絕對總數是沒有限制的(0)。
-
MYSQL_ABSOLUTE_MAX_CONNECTIONS
允許任何一個Guacamole連接的最大并發連接數。如果設置為0,則表示沒有限制。編輯連接時,可以在每個連接的基礎上覆蓋此選項。
默認情況下,連接的總體并發使用是沒有限制的(0)。
-
MYSQL_DEFAULT_MAX_GROUP_CONNECTIONS
允許連接到任何一個Guacamole連接組的最大并發連接數。如果設置為0,則表示沒有限制。在編輯連接組時,可以基于每個組覆蓋此選項。
默認情況下,連接組的總體并發使用是沒有限制的(0)。
-
MYSQL_DEFAULT_MAX_CONNECTIONS_PER_USER
允許單個用戶維護任何一個Guacamole連接的最大并發連接數。如果設置為0,則表示沒有限制。編輯連接時,可以在每個連接的基礎上覆蓋此選項。
默認情況下,每個用戶并發使用的連接是沒有限制的(0)。
-
MYSQL_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER
允許單個用戶維護任何一個Guacamole連接組的最大并發連接數。如果設置為0,則表示沒有限制。在編輯連接組時,可以基于每個組覆蓋此選項。
默認情況下,每個用戶并發使用的連接組僅限于一個(1),以防止平衡連接組被一個用戶完全耗盡。 -
MYSQL_AUTO_CREATE_ACCOUNTS
當通過其他模塊成功驗證時,MySQL數據庫中不存在的帳戶是否會自動創建。如果設置為true,將自動創建帳戶。否則,默認情況下,不會自動創建帳戶,需要手動創建帳戶,以便將MySQL數據庫擴展中的權限分配給通過其他模塊驗證的用戶。
PostgreSQL身份驗證
以PostgreSQL身份驗證后端機制使用Guacamole,你需要運行postgres鏡像的Docker容器,或通過網絡訪問PostgreSQL運轉設備。可以使用環境變量或Docker鏈接指定PostgreSQL的連接。
初始化PostgreSQL數據庫
如果數據庫尚未使用Guacamole模式初始化,則需要在使用Guacamole之前進行初始化。Guacamole鏡像中包含了一個方便的腳本,用于生成執行此操作所需的SQL。
生成用于初始化新PostgreSQL數據庫的SQL腳本(如《數據庫身份驗證》中所述),請執行以下操作:
$ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgres > initdb.sql或者,可以使用《數據庫身份驗證》中包含的SQL腳本。生成此腳本后,你必須:
通過PostgreSQL附帶的psql和createdb實用程序執行此操作的過程記錄在《數據庫身份驗證》。
連接Guacamole到PostgreSQL
如果你的PostgreSQL數據庫是被其他Docker容器提供的,并且你希望使用一個Docker鏈接連通Guacamole鏡像和你的數據庫,連接詳情暗含在Docker鏈接中:
$ docker run --name some-guacamole \--link some-guacd:guacd \--link some-postgres:postgres \...-d -p 8080:8080 guacamole/guacamole如果你不是通過Docker來提供你的PostgreSQL數據庫,你需要使用額外的環境變量來提供你的數據庫網絡連接信息:
-
POSTGRES_HOSTNAME
Guacamole身份驗證使用的數據庫的主機名。如果你沒有通過Docker來提供你的PostgreSQL數據庫,則需要該項。
-
POSTGRES_PORT
Guacamole連接到PostgreSQL時使用的端口。該環境變量是可選的。如果沒有提供,則會使用標準的PostgreSQL服務端口,5432。
因此,如果不能或不希望通過Docker鏈接的方式,POSTGRES_HOSTNAME和POSTGRES_PORT環境變量可以用于替代:
$ docker run --name some-guacamole \--link some-guacd:guacd \-e POSTGRES_HOSTNAME=172.17.42.1 \...-d -p 8080:8080 guacamole/guacamole注意,與PostgreSQL的Docker鏈接一樣,也可以不需要guacd的Docker鏈接(上述--link some-guacd:guacd選項)。guacd的連接信息可以使用環境變量指定,如《連接Guacamole到guacd》章節中所述。
必須的環境變量
使用PostgreSQL進行身份驗證需要通過環境變量指定其他配置參數。這些變量共同描述了Guacamole將如何連接到PostgreSQL:
-
POSTGRES_DATABASE
Guacamole身份驗證使用的數據庫名稱。
-
POSTGRES_USER
Guacamole用于連接PostgreSQL的數據庫用戶。
-
POSTGRES_USER
Guacamole使用POSTGRES_USER連接PostgreSQL數據庫時使用的密碼。
省略了任何必需的環境變量,都將在日志中收到一條錯誤消息,鏡像將停止運行。然后需要使用指定的正確的變量重新創建容器。
可選的環境變量
對于一個或多個用戶并發使用的連接,可以使用其他可選環境變量來覆蓋Guacamole的默認行為。連接和連接組的并發使用可以限制為一個總的最大值和(或)每用戶的最大值:
-
POSTGRES_ABSOLUTE_MAX_CONNECTIONS
在任何時候允許的并發連接的絕對最大數量,無論涉及的是Guacamole連接還是用戶參與。如果設置為0,則表示沒有限制。由于此限制適用于所有Guacamole連接,因此如果設置此限制,則無法覆蓋。
默認情況下,并發連接的絕對總數是沒有限制的(0)。
-
POSTGRES_DEFAULT_MAX_CONNECTIONS
允許任何一個Guacamole連接的最大并發連接數。如果設置為0,則表示沒有限制。編輯連接時,可以在每個連接的基礎上覆蓋此選項。
默認情況下,連接的總體并發使用是沒有限制的(0)。
-
POSTGRES_DEFAULT_MAX_GROUP_CONNECTIONS
允許連接到任何一個Guacamole連接組的最大并發連接數。如果設置為0,則表示沒有限制。在編輯連接組時,可以基于每個組覆蓋此選項。
默認情況下,連接組的總體并發使用是沒有限制的(0)。
-
POSTGRES_DEFAULT_MAX_CONNECTIONS_PER_USER
允許單個用戶維護任何一個Guacamole連接的最大并發連接數。如果設置為0,則表示沒有限制。編輯連接時,可以在每個連接的基礎上覆蓋此選項。
默認情況下,每個用戶并發使用的連接是沒有限制的(0)。
-
POSTGRES_DEFAULT_MAX_GROUP_CONNECTIONS_PER_USER
允許單個用戶維護任何一個Guacamole連接組的最大并發連接數。如果設置為0,則表示沒有限制。在編輯連接組時,可以基于每個組覆蓋此選項。
默認情況下,每個用戶并發使用的連接組僅限于一個(1),以防止平衡連接組被一個用戶完全耗盡。 -
POSTGRES_AUTO_CREATE_ACCOUNTS
當通過其他模塊成功驗證時,PostgreSQL數據庫中不存在的帳戶是否會自動創建。如果設置為true,將自動創建帳戶。否則,默認情況下,不會自動創建帳戶,需要手動創建帳戶,以便將PostgreSQL數據庫擴展中的權限分配給通過其他模塊驗證的用戶。
可選環境變量也可用于覆蓋Guacamole在數據庫和網絡級別的默認超時行為:
-
POSTGRES_DEFAULT_STATEMENT_TIMEOUT
驅動程序在中止查詢之前等待數據庫響應的秒數。默認值為0表示超時被禁用。
-
POSTGRES_SOCKET_TIMEOUT
等待套接字讀取操作的秒數。如果從服務器讀取數據的時間長于此值,則連接將關閉。這可用于處理網絡問題,例如與數據庫的連接斷開。與POSTGRES_DEFAULT_STATEMENT_TIMEOUT類似,它還將中止耗時過長的查詢。默認值為0表示超時被禁用。
LDAP身份驗證
以LDAP身份驗證后端機制使用Guacamole,需要對LDAP目錄進行網絡訪問。與MySQL和PostgreSQL不同,Guacamole的Docker鏡像不支持LDAP的Docker鏈接,必須使用環境變量指定連接信息:
-
LDAP_HOSTNAME
你的LDAP服務的主機名或IP地址。
-
LDAP_PORT
你的LDAP服務監聽的端口。默認情況下,對于未加密的LDAP或使用STARTTLS的LDAP,是389,對于通過SSL加密的LDAP(LDAPS),這將是636。
-
LDAP_ENCRYPTION_METHOD
與LDAP服務器通信時,Guacamole應該使用的加密機制。對于未加密的LDAP,合法值為none;對于通過SSL/TLS加密的LDAP,合法值為ssl(通常稱為LDAPS);對于使用STARTTLS的LDAP,合法值為starttls。如果省略,將不使用加密。
只有LDAP_HOSTNAME變量是必須的,但如果你的LDAP目錄使用加密或監聽在非標準端口,則你可能仍需要指定LDAP_PORT或LDAP_ENCRYPTION_METHOD:
$ docker run --name some-guacamole \--link some-guacd:guacd \-e LDAP_HOSTNAME=172.17.42.1 \...-d -p 8080:8080 guacamole/guacamole注意,guacd的Docker鏈接(上述--link some-guacd:guacd選項)不是必須的,與LDAP類似,guacd的連接信息可以使用環境變量指定,就如《連接Guacamole到guacd》中所述。
必須的環境變量
使用LDAP進行身份驗證需要通過環境變量指定其他配置參數。這些變量共同描述了Guacamole將如何查詢LDAP目錄:
-
LDAP_USER_BASE_DN
所有Guacamole用戶的DN基礎。所有將根據LDAP進行身份驗證的Guacamole用戶必須是此基本DN的后代。
與其他身份驗證機制一樣,如果省略了任何必需的環境變量(包括通過網絡連接到LDAP目錄所需的環境變量),都將在日志中收到錯誤消息,鏡像將停止。然后需要使用指定的適當變量重新創建容器。
可選的環境變量
其他可選環境變量可用于配置LDAP目錄層次結構的詳細信息,或支持更靈活的用戶帳戶搜索:
-
LDAP_GROUP_BASE_DN
使用標準seeAlso屬性的Guacamole配置中可能引用的所有組的DN基礎。用于控制Guacamole配置訪問的所有組都必須是此基本DN的后代。如果省略此變量,seeAlso屬性對Guacamole配置將沒有影響。
-
LDAP_GROUP_SEARCH_FILTER
其他擴展可能用于定義權限的組用于查詢LDAP樹的搜索篩選器。如果省略此屬性,則使用默認值(objectClass=*)。
-
LDAP_SEARCH_BIND_DN
驗證試圖登錄的用戶時要綁定的用戶的DN(可分辨名稱)。如果指定,Guacamole將查詢LDAP目錄,以確定每個登錄用戶的DN。如果省略,每個用戶的DN將使用LDAP_USER_BASE_DN指定的基本DN直接派生。
-
LDAP_SEARCH_BIND_PASSWORD
作為LDAP_SEARCH_BIND_DN進行綁定以驗證其他用戶時提供給LDAP服務器的密碼。此變量僅在指定LDAP_SEARCH_BIND_DN時使用。如果省略,但指定了LDAP_SEARCH_BIND_DN,Guacamole將嘗試在沒有密碼的情況下與LDAP服務器綁定。
-
LDAP_USERNAME_ATTRIBUTE
LDAP目錄中所有Guacamole用戶對象中包含用戶名的一個或多個屬性。通常,默認情況下,這將只是uid。如果LDAP目錄包含用戶名由不同屬性指定的用戶,則可以在此處指定多個屬性,并用逗號分隔,但請注意:這樣做需要在LDAP_search_BIND_DN中提供搜索DN。
-
LDAP_CONFIG_BASE_DN
所有Guacamole配置的DN基礎。如果省略,將無法從LDAP目錄中查詢Guacamole連接的配置,你需要將它們存儲在其他位置,例如MySQL或PostgreSQL數據庫中。
正如《LDAP身份驗證》中所述,Guacamole確實支持將LDAP與MySQL或PostgreSQL數據庫相結合,且也可以通過Guacamole的Docker鏡像進行配置。每個認證機制都可以使用各自的環境變量獨立配置,通過為多個系統提供所需的環境變量,Guacamole將自動配置為在Docker鏡像啟動時使用每個機制。
Header身份驗證
Header身份驗證擴展可用于通過受信任的第三方服務對Guacamole進行身份驗證,在該服務上,經過身份驗證的用戶的用戶名通過特定的HTTP標頭傳遞回Guacamole。以下是用于啟用和配置header身份驗證的有效Docker變量:
-
HEADER_ENABLED
啟用通過header擴展進行身份驗證,這會導致Guacamole啟動時加載擴展。默認值是false,不會加載header擴展名。
-
HEADER_ENABLED
可選環境變量,如果設置了該變量,將配置HTTP頭的名稱,該頭將用于驗證用戶是否使用Guacamole。如果未指定,將使用默認值REMOTE_USER。
自定義擴展以及GUACAMOLE_HOME
如果你有自己的或第三方的Guacamole擴展,它不被Guacamole的Docker鏡像所支持,但與鏡像中的Guacamole版本兼容,你仍然可以通過使用GUACAMOLE_HOME環境變量提供自定義基本配置來使用它們:
-
GUACAMOLE_HOME
Docker容器中用作鏡像自動生成GUACAMOLE_HOME 模板的目錄的絕對路徑。Guacamole的Docker鏡像基于其他環境變量生成的任何配置都將應用于該目錄內容的獨立副本。
你還需要按照特定于你的擴展的創建GUACAMOLE_HOME內容所需的步驟(將擴展本身放在GUACAMOLE_HOME/extensions/中,向guacamole.properties添加任何屬性等),但GUACAMOLE的其余配置將自動處理,覆蓋在你提供的GUACAMOLE_HOME的副本上。
Docker鏡像的GUACAMOLE_HOME環境變量必須指向容器中的一個目錄,因此你需要通過docker run命令的-v選項將自定義的GUACAMOLE_HOME暴露給容器。然后,選擇的容器目錄可以在GUACAMOLE_HOME環境變量中引用,且鏡像將自動處理剩余的配置。
$ docker run --name some-guacamole \...-v /local/path:/some-directory \-e GUACAMOLE_HOME=/some-directory \-d -p 8080:8080 guacamole/guacamole驗證Guacamole安裝
一旦Guacamole鏡像開始運行,Guacamole可以在 http://HOSTNAME:8080/guacamole/進行訪問,其中HOSTNAME是Docker主機的主機名或IP地址,并且你可以看到一個登錄界面。如果你使用MySQL或PostgreSQL進行身份驗證后端,數據庫初始化腳本將創建一個名為guacadmin的默認管理用戶,密碼是guacadmin。你應該立刻登錄并修改密碼。如果是使用LDAP方式,你可以用任何LDAP目錄中的有效用戶進行登錄。
如果你無法訪問Guacamole網站,或沒有看到登錄界面,請使用docker logs命令檢查容器日志,以確定是否有問題。可能是配置參數不正確或者是數據庫沒有正確初始化:
$ docker logs some-guacamole總結
以上是生活随笔為你收集整理的【Guacamole中文文档】二、用户指南 —— 3.用Docker安装Guacamole的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs 2019 创建rdl报表
- 下一篇: Module named ‘XXX’ a