我一直在網路上搜尋一個簡單(開放原始碼)的分析平台,它可以與許多資料來源整合,特別是 MongoDB。對我來說,工具的互動性和嵌入式分析功能也很重要。我發現 Metabase 符合所有條件,而且他們的定價和開放原始碼產品讓它更具吸引力。
之前玩過 Docker,我決定測試 Metabase 並使用本機版本四處看看。我設法在幾分鐘內讓它運行起來。在 Metabase 中問了幾個問題後,我很快就清楚我需要一個生產版本。為了繼續探索而不會遺失任何工作,我按照安裝文件中的建議有 2 個選項:將資料儲存在對應的檔案儲存空間中,或使用 PostgreSQL 資料庫。我選擇了資料庫選項,因為它看起來夠簡單。
雖然在 Elastic Beanstalk 上部署新版 Metabase 的教學非常詳盡,但我決定朝不同的方向發展。我選擇在 AWS Lightsail Ubuntu 執行個體上執行 Metabase。這樣做的原因很簡單,與 Amazon Elastic Compute Cloud (EC2) 或 Metabase 建議的 Elastic Beanstalk 相比,AWS Lightsail 總是讓人感覺不那麼可怕。我一直覺得與 EC2 或任何其他雲端運算供應商相比,管理執行個體、網路和儲存空間更容易。
在本文中,我將介紹我遵循的步驟,以安裝 AWS Lightsail 執行個體、使用 Docker,並將 Metabase 連接到 PostgreSQL 資料庫。我也將描述我在安裝過程中遇到的障礙,並提供一些解決方法。
先決條件
本文假設您對以下不同技術有一些了解,但並非必要條件。
AWS Lightsail:一種以低成本、預先設定的雲端資源快速建置應用程式和網站的方法。我們將使用它來託管包含 Metabase 的 Docker 容器,並作為 PostgreSQL 資料庫的主機。
Docker:一個軟體平台,可讓您快速建置、測試和部署應用程式。這將用於運行 Metabase 應用程式。
PostgresSQL:一個強大的開放原始碼物件關聯式資料庫,我們將使用它來儲存我們的 Metabase(中繼)資料和組態。這將允許我們更新、關閉和重建 docker 容器,而不會遺失我們的資料。
Metabase:一個開放原始碼商業智慧工具,可讓您使用來自各種資料庫和資料來源的資料建立圖表和儀表板。
以下是我遵循的步驟
建立 AWS 帳戶
前往 AWS Console 並建立帳戶(如果您還沒有帳戶)。對於新使用者,Amazon 提供免費方案,您可以在其中免費建立一些資源,而無需在第一年的使用中支付任何費用。
建立 AWS Lightsail 執行個體
您的帳戶準備就緒後,前往 Amazon Lightsail。
- 在 Lightsail 頁面上,按一下「建立執行個體」按鈕來建立新的執行個體。
- 選擇離您最近的執行個體位置。
-
選擇您的執行個體映像。
- 選擇平台 Linux/Unix;
- 選擇藍圖 Ubuntu 20.04 LTS;
- 如果您還沒有 SSH 金鑰,請建立一個;
-
選擇您的執行個體方案。
- 若要開始使用,我建議選擇
2gb Ram, 1vCPU, 60gb SSD
執行個體。(在本文發佈時,Amazon 在此執行個體大小上提供三個月的免費期)
- 若要開始使用,我建議選擇
-
識別您的執行個體。
- 為您的資源指定一個唯一的名稱。
- 如果您對設定感到滿意,請建立執行個體。
- 當您建立執行個體時,請記下附加到您執行個體的公用 IP。您將需要此 IP 來在安裝結束時檢查您的 Metabase 安裝。您可以依照 Amazon Lightsail 中的 IP 位址一文中所述的步驟取得此 IP。
注意:下載包含 install.sh
的文章目錄應可處理以下所述的所有步驟,而無需任何額外的組態。此腳本將安裝 Docker、PostgreSQL、設定資料庫使用者、啟用 Docker 對資料庫的存取權限、安裝和執行 Metabase 容器。若要使用此方法安裝,只需執行 sudo ./install.sh
。在系統提示輸入時,請依照任何指示操作。
或者,依照以下步驟來單獨安裝和設定每個元件
安裝 Docker
- 透過 SSH 連接到您的執行個體;
- 依照指示在 Ubuntu 上安裝 Docker Engine。
src/docker.sh
檔案中描述了相同的步驟。若要使用此檔案安裝 Docker,只需執行sudo ./src/docker.sh
。
這將移除您機器上目前安裝的任何現有 Docker 版本(如果有的話),並透過 Docker 建議的安裝程序安裝最新版本。
安裝完成後,您可以執行docker run hello-world
以確認 Docker 已安裝。
安裝 PostgreSQL
- 根據我的經驗,我建議使用 PostgreSQL 來儲存您的 Metabase 資料;
- 若要安裝此程式,請依照如何在 Ubuntu 20.04 上安裝 PostgreSQL [快速入門] 的指示操作。
src/postgres.sh
檔案中描述了安裝 PostgreSQL 的相同步驟。若要使用此檔案安裝 PostgreSQL,只需執行sudo ./src/postgres.sh
。這將安裝最新版本的 PostgreSQL。
資料庫設定
注意 - 以下步驟也可以透過執行提供的
sudo ./src/db_setup.sh
來達成。
- 現在是棘手的部分。使用 Lightsail/EC2 執行個體執行 Metabase 的主要目的是讓資料庫和 docker 容器位於同一部機器上。因此,我們需要確保可以從 Metabase Docker 容器存取我們的 PostgreSQL 資料庫。若要達成此目的,我們需要修改一些 PostgreSQL 檔案並重新啟動服務。
- 預設情況下,已安裝版本的 PostgreSQL 將無法存取 localhost 以外的任何位址上的監聽。
-
這需要變更,以允許 PostgreSQL 透過修改 /etc/postgresql/ 來監聽任何位址
/main/postgresql.conf,方法是更新以下行:`#listen_addresses = 'localhost'` 為:`listen_addresses = '*'` - 除了這一點,您還需要設定 PostgreSQL 以便可以從 Docker 存取。當執行容器時,Docker 將從範圍
172.17.0.1/16
為容器指派 IP。若要允許從此位址範圍連線到 PostgreSQL,請修改/etc/postgresql/<version>/main/pg_hba.conf
檔案,方法是新增以下行(如果它還不存在)。host all all 172.17.0.1/16 trust
-
完成後,執行
sudo systemctl restart postgresql
重新啟動您的 PostgreSQL 服務 -
設定 PostgreSQL 使用者帳戶和密碼,供 Metabase 用於連線。下一步將需要此資訊。以下是在 PostgreSQL 中建立新使用者和密碼的命令。
sudo -u postgres psql -c "CREATE USER <username> WITH PASSWORD '<password>'"
-
此使用者帳戶也需要位於 Superuser 群組中,以便它有權限建立新的資料庫。執行以下命令,將使用者新增到 Superuser 群組。
sudo -u postgres psql -c "ALTER USER <username> WITH SUPERUSER"
- 最後一步是建立 Metabase 資料庫,並將資料庫的擁有者設定為上述建立的使用者。如果您已建立資料庫,則可以略過此步驟。
sudo -u postgres psql -c “CREATE DATABASE metabase WITH OWNER <username>”
安裝 Metabase
一旦您安裝了 Docker 和 PostgreSQL,就該讓 Metabase 執行了。從在 Docker 上執行 Metabase 指示中,依照關於使用 PostgreSQL 作為 Metabase 應用程式資料庫的指示操作。/src/metabase.sh
檔案將有助於建立使用者和密碼,以及執行 Metabase docker 容器以取得此資訊。或者,您可以依照以下步驟設定 PostgreSQL 帳戶並執行 Metabase Docker 容器。
-
建立 PostgreSQL 帳戶。
sudo -u postgres psql -c "CREATE USER <username> WITH PASSWORD <password>"
-
將帳戶設定為超級管理員
sudo -u postgres psql -c "ALTER GROUP Superuser ADD USER <username>"
-
執行
sudo docker run -d -p 80:3000 \
--add-host host.docker.internal:host-gateway \
-e "MB_DB_TYPE=postgres" \
-e "MB_DB_DBNAME=metabase" \
-e "MB_DB_PORT=5432" \
-e "MB_DB_USER=<username>" \
-e "MB_DB_PASS=<password>" \
-e "MB_DB_HOST=<host_private_ip>" \
--name metabase metabase/metabase
- 您可以透過每隔幾秒檢查一次記錄來檢查進度:
docker logs Metabase
- 完成後,記錄應顯示以下訊息:
最後,使用您在建立執行個體後記下的 Lightsail 公用 IP 位址,從您的瀏覽器 http://{IP}/setup 確認 Metabase 是否已啟動並執行。如果一切設定正確,頁面應顯示 Metabase 歡迎訊息,如下所示。
Metabase 的注意事項:不建議將資料庫伺服器與應用程式放在同一個執行個體中,因為資源正由 2 個關鍵元件共用。建議的部署模型是讓資料庫伺服器與執行 Metabase 應用程式的伺服器分開。