在 Debian 上以服務方式使用 nginx 執行 Metabase
對於那些在其基礎架構中不使用(或無法使用)Docker 的人員,仍然需要在生產環境中輕鬆設定和部署 Metabase。在以 Debian 為基礎的系統上,這表示將 Metabase 註冊為可以啟動/停止/解除安裝的服務。
注意: 這只是一個基本操作指南,讓您開始使用。任何人都可以從這裡開始,在他們的系統上執行他們需要執行的操作,並且應該遵循最佳實務來設定和保護其伺服器的其餘部分。
假設
本指南中的核心假設
- 您將使用
metabase.jar
檔案執行 Metabase - 您的伺服器上已經執行
nginx
和postgres
(或其他支援的資料庫) - 您將使用環境變數來設定您的 Metabase 執行個體
- 您在伺服器上具有
sudo
存取權
建立非特權使用者以執行 Metabase,並授予使用者應用程式和記錄的存取權
基於安全考量,我們希望 Metabase 以非特權使用者的身分執行。我們將使用者簡稱為 metabase
。此外,我們將建立稍後記錄 Metabase 組態所需檔案,並為我們的非特權使用者套用正確的安全性設定。
sudo groupadd -r metabase
sudo useradd -r -s /bin/false -g metabase metabase
sudo chown -R metabase:metabase </your/path/to/metabase/directory>
sudo touch /var/log/metabase.log
sudo chown syslog:adm /var/log/metabase.log
sudo touch /etc/default/metabase
sudo chmod 640 /etc/default/metabase
建立 Metabase 服務
每個服務都需要一個指令碼,告知 systemd
如何管理它,以及它支援哪些功能。服務通常在 /etc/systemd/system/<服務名稱>
中註冊。因此,Metabase 服務應位於 /etc/systemd/system/metabase.service
。
Metabase 服務檔案
建立 /etc/systemd/system/metabase.service
服務檔案,並在您的編輯器中開啟它
sudo touch /etc/systemd/system/metabase.service
sudo <your-editor> /etc/systemd/system/metabase.service
在 /etc/systemd/system/metabase.service
中,將可設定項目(看起來像 <一些變數名稱>
)取代為適用於您系統的值。以下 Metabase 指令碼具有額外註解,可協助您瞭解每個項目的用途。
[Unit]
Description=Metabase server
After=syslog.target
After=network.target
[Service]
WorkingDirectory=</your/path/to/metabase/directory/>
ExecStart=/usr/bin/java --add-opens java.base/java.nio=ALL-UNNAMED -jar </your/path/to/metabase/directory/>metabase.jar
EnvironmentFile=/etc/default/metabase
User=metabase
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=metabase
SuccessExitStatus=143
TimeoutStopSec=120
Restart=always
[Install]
WantedBy=multi-user.target
建立 syslog conf
接下來,我們需要建立 syslog conf,以確保 systemd 可以正確處理記錄。
sudo touch /etc/rsyslog.d/metabase.conf
sudo <your-editor> /etc/rsyslog.d/metabase.conf
if $programname == 'metabase' then /var/log/metabase.log
& stop
重新啟動 syslog 服務以載入新組態。
sudo systemctl restart rsyslog.service
Metabase 的環境變數
環境變數提供一種在伺服器上自訂和設定 Metabase 執行個體的好方法。在 Debian 系統上,服務通常預期在 etc/default/<服務名稱>
內具有隨附的組態。
Metabase 組態檔
在您的編輯器中開啟 /etc/default/metabase
環境組態檔
sudo <your-editor> /etc/default/metabase
在 /etc/default/metabase
中,將可設定項目(看起來像 <一些變數名稱>
)取代為適用於您系統的值。某些 Metabase 組態具有可用選項,其中一些選項如下所示,並以 |
符號分隔
MB_PASSWORD_COMPLEXITY=<weak|normal|strong>
MB_PASSWORD_LENGTH=<10>
MB_JETTY_HOST=<0.0.0.0>
MB_JETTY_PORT=<12345>
MB_DB_TYPE=<postgres|mysql|h2>
MB_DB_DBNAME=<your_metabase_db_name>
MB_DB_PORT=<5432>
MB_DB_USER=<your_metabase_db_user>
MB_DB_PASS=<ssshhhh>
MB_DB_HOST=<localhost>
MB_EMOJI_IN_LOGS=<true|false>
# any other env vars you want available to Metabase
最後步驟
在以 Debian 為基礎的系統上將 Metabase 設定為服務的最佳部分是,確信它會在每次系統啟動時啟動。我們只需要幾個快速步驟即可完成服務註冊,並讓 Metabase 啟動並執行。
確保您的資料庫已就緒
如果您執行的是 postgres
或其他資料庫,則需要確保您已遵循資料庫系統的指示,為 Metabase 建立資料庫,以及可以存取該資料庫的使用者。這些值應與您在 Metabase 組態中為 MB_DB_TYPE
、MB_DB_DBNAME
、MB_DB_USER
和 MB_DB_PASS
環境變數設定的值相符。如果您未正確設定資料庫,Metabase 將無法啟動。
確保 nginx
設定為將請求代理至 Metabase
過於詳細地說明如何設定 nginx
超出本指南的範圍,但以下是一個快速的 nginx.conf
檔案,可讓您啟動並執行。
注意: 以下 nginx.conf
假設您正在接受連接埠 80 上的傳入流量,並想要將請求代理至 Metabase,並且您的 Metabase 執行個體已設定為在連接埠 3000
的 localhost
上執行。您可能需要注意幾個代理指示詞,因此您應該在 官方 nginx
文件中進一步查看這些指示詞。
# sample nginx.conf
# proxy requests to Metabase instance
server {
listen 80;
listen [::]:80;
server_name your.domain.com;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
註冊您的 Metabase 服務
現在,是時候向 systemd
註冊我們的 Metabase 服務了,以便它在系統啟動時啟動。我們也將確保我們的記錄檔是由我們的服務執行 metabase.jar
的非特權使用者建立並擁有。
sudo systemctl daemon-reload
sudo systemctl start metabase.service
sudo systemctl status metabase.service
一旦我們在這裡完成,請啟用服務以在啟動期間啟動。
sudo systemctl enable metabase.service
啟動、停止或重新啟動 Metabase
現在,每當您需要啟動、停止或重新啟動 Metabase 時,您只需要執行
sudo systemctl start metabase.service
sudo systemctl stop metabase.service
sudo systemctl restart metabase.service
閱讀其他版本的 Metabase 文件。