# 在容器中設定 Qlik 資料閘道 - 直接存取

本主題概述如何設定容器化的 直接存取閘道。本文件提供先決條件與安裝說明，並說明使用容器化 直接存取閘道 時應注意的限制與考量事項。

資訊備註自 直接存取閘道 1.8.0 起支援。

## 什麼是容器化 直接存取閘道？

您可以將 直接存取閘道 部署到 Docker 容器中。這種部署類型稱為容器化 直接存取閘道。容器化 直接存取閘道 部署支援 Linux、macOS 和 Windows。

容器化的 直接存取閘道 為您的 直接存取閘道 環境提供可攜性。

## 使用 Qlik 資料閘道 - 直接存取 時的最佳做法

為了在使用 Qlik 資料閘道 - 直接存取 時有成功的體驗，強烈建議遵守下列最佳做法：

* 請勿使用相同的 直接存取閘道 進行開發、使用者接受測試和生產，因為這將會增加可用資源過載風險並影響系統穩定性。從商務觀點，資源不足加上穩定性降低，可能會對生產應用程式資料造成延遲更新。

* 為了獲得最佳效能，請將 直接存取閘道 安裝在盡可能靠近資料來源的環境。

## 系統必要條件

本區段說明使用容器化 直接存取閘道 的需求。

### 軟體需求

* 主機上已安裝 Docker Engine 20.9+ 版本以及 Docker Compose 外掛程式（docker compose，v2 語法）。

### 需要的連接埠和通訊協定

關於所需的連接埠與通訊協定，請參閱 [必要的連接埠與通訊協定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setting-up.htm#Ports)。

### 建議硬體

* 主機：8 核心、32 GB 記憶體、可供 Docker 使用的 5 GB 儲存空間

* 選用：在 compose 檔案中為容器設定相符的限制，讓閘道擁有專屬容量，而不是與主機上的其他容器或處理程序競爭：

  ```
  direct-access-agent:
      image: ...
      deploy:
        resources:
          limits:
            cpus: "6"
            memory: 24G
  ...
  dcaas:
      image: ...
      deploy:
        resources:
          limits:
            cpus: "2"
  ```

#### 最低硬體

最低硬體僅適用於使用較小的專用部署 (開發、測試和生產) 的特定情境，搭配持續較低的資料量和數量有限的並行載入。

* 主機：4 核心、8 GB 記憶體、5 GB 可供 Docker 使用的儲存空間

* 選用：在 compose 檔案中為容器設定相符的限制，讓閘道擁有專屬容量，而不是與主機上的其他容器或處理程序競爭：

  ```
  direct-access-agent:
      image: ...
      deploy:
        resources:
          limits:
            cpus: "2"
            memory: 4G
  ...
  dcaas:
      image: ...
      deploy:
        resources:
          limits:
            cpus: "2"
  ```

## 安裝 Qlik 資料閘道 - 直接存取

設定直接存取閘道涉及在 管理 活動中心和直接存取閘道伺服器都需要執行的程序。

資訊備註需要在 管理 活動中心內執行的資料閘道程序需要租用戶管理員權限。

### 階段一：下載 Qlik 資料閘道 - 直接存取

1. 在 管理 活動中心內，選取 資料閘道。

   任何現有資料閘道將列於[顯示關於每個閘道基本資訊的表格](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-managing-console.htm#gateprop)。

2. 按一下部署工具列按鈕。

   就會開啟部署資料閘道對話方塊。

3. 選取 資料閘道 - 直接存取 - 容器化直接存取閘道，接受 Qlik 客戶合約，並按一下 下載。Direct Access gateway 安裝檔案 (docker-compose.qlik-data-gateway-direct-access.yml) 將會下載至您的電腦。

### 階段二：透過執行 Docker Compose 檔案來啟動部署

若要開始部署 直接存取閘道，請執行下列命令：

docker compose -f docker-compose.qlik-data-gateway-direct-access.yml up

### 第三階段：設定 直接存取閘道

如需詳細設定說明，請參閱 [第三階段：設定 直接存取閘道](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setting-up.htm#Stage3)。

### 階段四：註冊資料閘道

下一步是註冊資料閘道。 這可以透過 管理 活動中心或在命令列上完成。

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm)

#### 選項 1：透過 管理 活動中心

您可以使用 管理 活動中心註冊閘道。請參閱 [選項 1：透過 管理 活動中心](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setting-up.htm#StageConsole)。

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm)

#### 選項 2：使用命令列自動註冊

您也可以從命令列自動註冊 直接存取閘道，而無需使用 管理 活動中心。此方法使用由 OAuth 用戶端產生的短效工作階段 Token。

資訊備註自動註冊僅支援透過命令列進行。目前尚未提供用於閘道自動註冊的 REST API。

必要條件

具備建立與管理 OAuth 用戶端之租用戶管理員權限的 API 金鑰。

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm)透過自動註冊來註冊閘道

1. 首先，您需要設定 Python 環境以產生 OAuth 用戶端 ID，以及 direct-access-agent 容器中的斷言金鑰 (短期 Token)。依此順序分別執行下列命令：

   1. docker exec -it --user root direct-access-agent-1 bash

   2. apt-get update && apt-get install -y python3 python3-pip

   3. apt install python3.11-venv

   4. python3 -m venv .venv

   5. source .venv/bin/activate

   6. pip install cryptography pyjwt

   7. [](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm)python3 generate\_gateway\_assertion.py --tenant-url &lt;tenant-url&gt;

2. 針對[上方清單中的最後一個命令](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm#python3)，追蹤互動式提示，並在提供時複製 client\_id (OAuth 用戶端 ID) 與 assertion。請先將這些詳細資訊記錄在紙上或暫存的文字檔案中—後續的流程步驟將會需要這些資訊。

3. 當您記下 client\_id 和 assertion 後，請使用下列命令清理 Python 環境：

   deactivate

4. 將 OAuth 用戶端的同意方法設定為受信任。

   curl "https://&lt;tenant-url&gt;/api/v1/oauth-clients/&lt;client-id&gt;/connection-configs/me" -X PATCH -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer &lt;api-key&gt;' -d '[{"op":"replace","path":"/consentMethod","value":"trusted"}]'

5. 要求存取 Token。這也會觸發自動建立閘道所使用的機器人使用者帳戶。

   curl "https://&lt;tenant-url&gt;/oauth/token" -X POST -H 'content-type: application/x-www-form-urlencoded' -d "grant\_type=client\_credentials" -d "client\_id=&lt;client-id&gt;" -d "client\_assertion\_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" -d "client\_assertion=&lt;assertion&gt;" -d "scope=admin.direct-access-gateways:register\_gateway admin.direct-access-gateways:delete\_gateway"

   資訊備註

   如果判斷提示已過期，請從虛擬環境重新執行指令碼。

6. 查詢自動建立的機器人使用者。

   curl "https://&lt;tenant-url&gt;/api/v1/users" -H 'accept: application/json' -H 'authorization: Bearer &lt;API-key&gt;'

7. 複製 my-bot-client 的 ID。

8. 建立 "DAG Registration" 角色。

   curl "https://&lt;tenant-url&gt;/api/v1/roles" -X POST -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer &lt;API-key&gt;' -d '{"name":"DAG Registration","description":"Role for registering a gateway","assignedScopes":["admin.direct-access-gateways:register\_gateway", "admin.direct-access-gateways:delete\_gateway"]}'

9. 將租用戶層級的角色指派給 Bot 使用者。

   curl "https://&lt;tenant-url&gt;/api/v1/users/&lt;bot-user-ID&gt;" -X PATCH -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer &lt;API-key&gt;' -d ' [ { "op": "replace", "path": "/assignedRoles", "value": [ { "name": "DAG Registration" } ] } ]'

10. 取得直接存取閘道空間。

    curl "https://&lt;tenant-url&gt;/api/v1/spaces" -H 'authorization: Bearer &lt;API-key&gt;'

11. 複製 Direct Access Gateway 空間 ID。

12. 將機器人使用者新增至空間，並賦予可編輯權限。

    curl "https://&lt;tenant-url&gt;/api/v1/spaces/&lt;DAG-space-ID&gt;/assignments" -X POST -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer &lt;API-key&gt;' -d '{"assigneeId": "&lt;bot-user-ID&gt;","roles": ["consumer","dataconsumer","producer"], "type": "user"}'

13. 如果現有的斷言已過期，請產生新的斷言。執行下列命令：

    python3 generate\_gateway\_assertion.py --tenant-url &lt;tenant-url&gt;

14. 請依照命令提示字元中的所需步驟進行操作。由於 OAuth 用戶端已建立，因此需要使用此 API 呼叫來更新 JWK：

    curl "https://&lt;tenant-url&gt;/api/v1/oauth-clients/&lt;client-ID&gt;" -X PATCH -H 'accept: application/json' -H 'content-type: application/json' -H 'authorization: Bearer &lt;API-key&gt;' -d '[{"op":"replace","path":"/publicKeys/0/y","value":"&lt;Y-value-from-JWK&gt;"},{"op":"replace","path":"/publicKeys/0/x","value":"&lt;X-value-from-JWK&gt;"},{"op":"remove","path":"/publicKeys/0/use"},{"op":"replace","path":"/publicKeys/0/kid","value":"&lt;kid-value-from-JWK&gt;"}]'

15. 註冊閘道：

    dotnet ConnectorAgent.dll qcs register\_gateway --tenant\_url &lt;tenant-url&gt; --gateway\_name &lt;DAG-name&gt; --gateway\_description &lt;DAG-description&gt; --space\_name &lt;space-name&gt; --client-id &lt;client-ID&gt; --assertion &lt;assertion&gt;

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm)移除自動註冊的閘道

請依照下列步驟，取消註冊使用上述自動、基於工作階段 Token 的方法所註冊的閘道。這些步驟也會移除為其建立的 OAuth 用戶端、機器人使用者和角色。

1. 如[上方區段](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm#AutoRegister)所述，產生判斷提示。

2. 刪除閘道：

   dotnet ConnectorAgent.dll qcs delete\_gateway --tenant\_url &lt;tenant-url&gt; --gateway\_name &lt;gateway-name&gt; --client-id &lt;client-ID&gt; --assertion &lt;assertion&gt;

3. 查詢為閘道建立的 Bot 使用者帳戶。

   curl "https://&lt;tenant-url&gt;/api/v1/users" -H 'accept: application/json' -H 'authorization: Bearer &lt;api-key&gt;'

4. 複製機器人 ID。

5. 刪除此機器人使用者帳戶。

   curl -X DELETE "https://&lt;tenant-url&gt;/api/v1/users/&lt;bot-user-ID&gt;" -H "Authorization: Bearer &lt;api-key&gt;"

6. 查詢為閘道建立的「DAG Registration」角色。

   curl "https://&lt;tenant-url&gt;/api/v1/roles?limit=1&filter=(name%20eq%20%22DAG%20Registration%22)" -H "Authorization: Bearer &lt;api-key&gt;"

7. 複製角色 ID。

8. 刪除此角色。

   curl -X DELETE "https://&lt;tenant-url&gt;/api/v1/roles/&lt;role-ID&gt; -H "Authorization: Bearer &lt;api-key&gt;"

9. 刪除 OAuth 用戶端。

   curl -X DELETE https://&lt;tenant-url&gt;/api/v1/oauth-clients/&lt;OAuth-client-ID&gt; -H "qlik-confirm-delete: &lt;OAuth-client-ID&gt;" -H "Authorization: Bearer &lt;api-key&gt;

### 階段五：在 Direct Access gateway 伺服器上啟動 Qlik 資料閘道 - 直接存取 服務

若要啟動 Qlik 資料閘道 - 直接存取 服務，請啟動 dcaas-dg 和 direct-access-agent 容器。

### 階段六：將連線新增至資料來源

請參閱 [階段六：將連線新增至資料來源](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-container.htm#Stage6)。

## 環境設定

本區段列出來自 docker-compose.qlik-data-gateway-direct-access.yml 檔案的特定環境變數，您可能需要設定這些變數，才能透過閘道正確連線您的資料來源。

* ALLOW\_SOURCES：以逗號分隔的主機名稱與 IP 允許清單。當閘道代理程式需要連線至您自己伺服器上的項目，或是本機或私人網路中的其他主機時（例如 localhost 上的資料庫、Docker 服務名稱或私人 IP 主機），您需將該位址新增至 ALLOW\_SOURCES — 否則連線嘗試將會遭到拒絕。

## 支援的資料來源

* 容器化安裝支援下列 ODBC 連接器：

  * PostgreSQL
  * SQL 伺服器
  * Oracle

  如需有關 ODBC 連接器的詳細資訊，請參閱 [ODBC 資料庫 ‒ Qlik Cloud](https://help.qlik.com/en-US/cloud-services/Subsystems/ODBC_Connector_help/Content/Connectors_ODBC/Introduction/ODBC-connector.htm) （僅提供英文版）。

* REST 連接器 (REST 透過 Direct Access gateway)。如需關於 REST 資料來源的詳細資訊，請參閱 [REST 來源 ‒ Qlik Cloud](https://help.qlik.com/en-US/cloud-services/Subsystems/REST_Connector_help/Content/Connectors_REST/REST-connector.htm) （僅提供英文版）。

## 瞭解更多資訊

* [設定 Qlik 資料閘道 - 直接存取](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setting-up.htm)
* [在 Windows 伺服器上設定 Qlik 資料閘道 - 直接存取](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/direct-access-gateway-setup-win.htm)