Chevron Left

查看所有社群故事

在 AWS Lightsail 上執行 Metabase

2022 年 03 月 01 日

貢獻者

Percy Musaka

Catalyst IT

photo of Percy Musaka

Percy 是 Catalyst IT(一家 IT 解決方案公司)的軟體工程師。他原本想成為飛行員,直到他用 C 語言寫下他的第一個「hello world」,這是一段人與機器之間美好關係的開始。您可以在 Twitter 上找到 Percy:@VaMusaka

a scheme of the set up

我一直在網路上搜尋一個簡單(開放原始碼)的分析平台,它可以與許多資料來源整合,特別是 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。

  1. 在 Lightsail 頁面上,按一下「建立執行個體」按鈕來建立新的執行個體。Amazon LightSail
  2. 選擇離您最近的執行個體位置。
  3. 選擇您的執行個體映像。

    • 選擇平台 Linux/Unix;
    • 選擇藍圖 Ubuntu 20.04 LTS;
    • 如果您還沒有 SSH 金鑰,請建立一個;
  4. 選擇您的執行個體方案。

    • 若要開始使用,我建議選擇 2gb Ram, 1vCPU, 60gb SSD 執行個體。(在本文發佈時,Amazon 在此執行個體大小上提供三個月的免費期)
  5. 識別您的執行個體。

    • 為您的資源指定一個唯一的名稱。
  6. 如果您對設定感到滿意,請建立執行個體。
  7. 當您建立執行個體時,請記下附加到您執行個體的公用 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 應用程式的伺服器分開。

貢獻者

Percy Musaka

Catalyst IT

photo of Percy Musaka

Percy 是 Catalyst IT(一家 IT 解決方案公司)的軟體工程師。他原本想成為飛行員,直到他用 C 語言寫下他的第一個「hello world」,這是一段人與機器之間美好關係的開始。您可以在 Twitter 上找到 Percy:@VaMusaka

您可能也會喜歡

預測下一次點擊

Ukrit Wattanavaekin

Metabase

資料驅動的產品管理

Victor Bolu

WebAutomation

您可能也會喜歡

預測下一次點擊

Ukrit Wattanavaekin

Metabase

資料驅動的產品管理

Victor Bolu

WebAutomation