使用 Docker Compose

如我們的快速入門指南中所述,在本地嘗試 Superset 最快的方式是在 Linux 或 Mac OSX 電腦上使用 Docker Compose。Superset 不正式支援 Windows。這也是快速啟動一個完整功能的開發環境最簡單的方式。
請注意,我們支援 3 種主要方式來執行 docker compose
- docker-compose.yml:用於互動式開發,我們會在其中掛載您的本機資料夾,其中包含您可以編輯的前端/後端檔案,並即時體驗您在應用程式中所做的變更
- docker-compose-non-dev.yml 我們只根據本機分支建置一個更不可變的映像檔,並讓所有需要的映像檔執行。啟動時本機分支中的變更會反映出來,但在
up
時變更程式碼不會反映在應用程式中 - docker-compose-image-tag.yml 我們從 docker-hub 擷取映像檔,例如
3.0.0
版本,並啟動它以便您可以嘗試。這裡本機分支中的內容對正在執行的內容沒有影響,我們只從 docker-hub 擷取並執行預先建置的映像檔。為了讓docker compose
與啟動的 Postgres 映像檔一起運作,您會想要指向一個帶有-dev
後綴的 TAG,如export TAG=4.0.0-dev
或export TAG=3.0.0-dev
,預設值為latest-dev
。這是因為dev
建置恰好封裝了連接到作為docker compose
建置一部分啟動的 Postgres 資料庫所需的psycopg2-binary
。``
在設定任一項的需求後,將詳細介紹這兩種方法。
需求
請注意,此文件假設您已安裝 Docker 和 git。另請注意,我們過去使用 docker-compose
,但它正處於淘汰的過程中,因此我們現在改用 docker compose
。
1. 克隆 Superset 的 GitHub 儲存庫
在您的終端機中使用以下命令克隆 Superset 的儲存庫
git clone --depth=1 https://github.com/apache/superset.git
一旦該命令成功完成,您應該會在目前目錄中看到一個新的 superset
資料夾。
2. 透過 Docker Compose 啟動 Superset
首先,假設您熟悉 docker compose
的機制。在這裡,我們通常會提到 docker compose up
,即使在某些情況下,您可能想要使用 docker compose pull
強制檢查較新的遠端映像檔,使用 docker compose build
強制建置,或使用 docker compose build --pull
強制建置最新的基本映像檔。不過,在大多數情況下,簡單的 up
命令就足夠了。有關此主題的詳細資訊,請參閱 docker compose 文件。
選項 #1 - 用於互動式開發環境
docker compose up
在開發模式下執行時,superset-node
容器需要完成建置資產,才能讓 UI 正確呈現。如果您只是想試用 Superset 而不做任何程式碼變更,請按照下面針對 production
或特定版本的文件所述的步驟操作。
依預設,我們在這裡掛載本機 superset-frontend 資料夾,並執行 npm install
以及 npm run dev
,這會觸發 webpack 編譯/捆綁前端程式碼。根據您的本機設定,尤其是當您的記憶體小於 16GB 時,執行這些作業可能會非常緩慢。在這種情況下,我們建議您將 env 變數 BUILD_SUPERSET_FRONTEND_IN_DOCKER
設定為 false
,並在本機終端機中執行此操作。只需觸發 npm i && npm run dev
,這應該會快得多。
選項 #2 - 從本機分支建置一組不可變的映像檔
docker compose -f docker-compose-non-dev.yml up
選項 #3 - 啟動官方版本
export TAG=3.1.1
docker compose -f docker-compose-image-tag.yml up
這裡各種發行標籤、github SHA 和最新的 master
可以由 TAG env 變數引用。請參閱 docker 相關文件,以深入了解您可以從 Docker Hub 指向的現有標籤。
docker compose
提示與設定
屬於 Superset 執行個體的所有內容(圖表、儀表板、使用者等)都儲存在其元資料資料庫中。在生產環境中,應備份此資料庫。使用 docker compose 的預設安裝會將該資料儲存在 Docker 磁碟區中的 PostgreSQL 資料庫中,該磁碟區不會備份。
再次強調,請勿將此用於生產環境
您應該會看到從您機器上啟動的容器串流輸出的記錄。一旦此輸出速度減慢,您應該會在您的本機上擁有一個正在執行的 Superset 執行個體!為了避免未來執行時出現大量的文字,請在 docker compose up
命令的末尾新增 -d
選項。
進一步設定
以下適用於想要設定 Superset 在 Docker Compose 中如何執行的使用者;否則,您可以跳到下一節。
您可以透過遵循 docker/README.md 中提到的步驟,安裝其他 python 套件並套用設定覆寫。
請注意,docker/.env
會設定 docker compose
使用的所有 docker 映像檔的預設環境變數,而 docker/.env-local
可用於覆寫這些預設值。另請注意,docker/.env-local
已在我們的 .gitignore
中引用,防止開發人員冒險將可能敏感的設定提交到儲存庫。
一個重要的變數是 SUPERSET_LOAD_EXAMPLES
,它決定了 superset_init
容器是否會將範例資料和視覺化內容填入元資料資料庫中。這些範例有助於學習和測試 Superset,但對於經驗豐富的使用者和生產部署而言是不必要的。載入過程有時可能需要幾分鐘和大量的 CPU,因此您可能需要在資源受限的裝置上停用它。
對於通常在位於您 PYTHONPATH
中的 superset_config.py
檔案中管理,更進階或動態的設定,請注意,可以透過提供 docker/pythonpath_dev/superset_config_docker.py
來完成,該檔案會被 git 忽略(防止您將本機設定提交/推送回儲存庫)。此機制的原理在 docker/pythonpath_dev/superset_config.py
中,您可以在其中看到邏輯執行 from superset_config_docker import *
使用者通常想從 Superset 連線到其他資料庫。目前,最簡單的方法是修改 docker-compose-non-dev.yml
檔案,並將您的資料庫新增為其他服務依賴的服務(透過 x-superset-depends-on
)。其他人嘗試在 Superset 服務上設定 network_mode: host
,但這些通常會中斷安裝,因為設定需要使用 Docker Compose DNS 解析器來解析服務名稱。如果您對此有良好的解決方案,請告訴我們!
Superset 使用 Scarf Gateway 來收集遙測資料。了解不同 Superset 版本的安裝次數,可為專案的修補和長期支援決策提供參考。Scarf 會清除個人身份資訊 (PII),並且僅提供匯總的統計資料。
若要針對透過 Scarf Gateway 下載的套件選擇退出您的 docker compose 型安裝中的此資料收集,請編輯您的 docker-compose.yml
和 docker-compose-non-dev.yml
檔案中的 x-superset-image:
行,將 apachesuperset.docker.scarf.sh/apache/superset
取代為 apache/superset
,以直接從 Docker Hub 提取映像檔。
若要停用 Scarf 遙測像素,請在您的終端機和/或您的 docker/.env
檔案中將 SCARF_ANALYTICS
環境變數設定為 False
。
3. 登入 Superset
您的本機 Superset 執行個體還包含一個 Postgres 伺服器,用於儲存您的資料,並且已經預先載入了一些 Superset 隨附的範例資料集。您現在可以透過您的網頁瀏覽器造訪 https://127.0.0.1:8088
來存取 Superset。請注意,許多瀏覽器現在預設為 https
- 如果您的瀏覽器是其中之一,請確保它使用 http
。
使用預設的使用者名稱和密碼登入
username: admin
password: admin
4. 將 Superset 連接到您的本地資料庫實例
當使用 docker
或 docker compose
執行 Superset 時,它會在自己的 Docker 容器中執行,就像 Superset 完全是在另一台機器上執行一樣。因此,嘗試使用主機名稱 localhost
連接到您的本地資料庫將無法運作,因為 localhost
指的是 Superset 執行的 Docker 容器,而不是您實際的主機。幸運的是,Docker 提供了一種簡單的方法來從容器內部存取主機中的網路資源,我們將利用此功能連接到我們的本地資料庫實例。
以下說明是如何從 Superset(在 Docker 容器中執行)連接到 postgresql(在您的主機上執行)。其他資料庫的配置可能略有不同,但要點相同,歸結為兩個步驟 -
- (Mac 使用者可以跳過此步驟)配置本地 postgresql/資料庫實例以接受公用傳入連線。預設情況下,postgresql 只允許來自
localhost
的傳入連線,並且在 Docker 下,除非您使用--network=host
,否則localhost
將分別指向主機和 Docker 容器上的不同端點。允許 postgresql 接受來自 Docker 的連線涉及對檔案postgresql.conf
和pg_hba.conf
進行單行更改;您可以在網路上輕鬆找到針對您的作業系統/PG 版本的相關連結,以完成這項任務。對於 Docker,僅將 IP 位址172.0.0.0/8
加入白名單而不是*
就足夠了,但在任何情況下,您都必須注意,在生產資料庫中執行此操作可能會造成災難性的後果,因為您正在將資料庫開放給公共網際網路。 - 當嘗試連線到資料庫時,請嘗試使用
host.docker.internal
(Mac 使用者、Ubuntu)或172.18.0.1
(Linux 使用者)作為主機名稱,而不是localhost
。這是 Docker 的內部細節 -- 實際情況是,在 Mac 系統中,Docker Desktop 會為主機名稱host.docker.internal
建立一個 DNS 條目,該條目會解析為主機的正確位址,而在 Linux 中則不是這種情況(至少預設情況下)。如果這兩個主機名稱都不起作用,那麼您可能需要找到您要使用的確切主機名稱,為此您可以執行ifconfig
或ip addr show
並查看 Docker 為您建立的docker0
介面的 IP 位址。或者,如果您甚至看不到docker0
介面,請嘗試(如果需要使用 sudo)docker network inspect bridge
並查看是否有"Gateway"
的條目並記下 IP 位址。