将 Metabase 作为 systemd 服务运行

对于那些不能(或不愿)在其基础设施中使用 Docker 的人,您可以将 Metabase 注册为 systemd 服务,该服务可以启动/停止/卸载。

本指南将以 Debian 为例,但这些步骤应适用于大多数使用 systemd 的 Linux 发行版。这是一个基础教程,旨在帮助您入门。任何人都可以从此开始,根据其系统需求进行操作,并应遵循设置和保护其服务器其余部分安全的最佳实践。

假设

本指南中的核心假设

  • 您的系统上已安装 Java 运行时环境 (JRE)
  • 您将使用 metabase.jar 文件运行 Metabase
  • 您的服务器上已运行 Nginx
  • 您将使用环境变量配置您的 Metabase 实例
  • 您拥有服务器的根访问权限

对于生产设置,您必须设置一个 PostgreSQL 或 MySQL/MariaDB 应用程序数据库 作为 Metabase 的应用程序数据库。

创建非特权用户以运行 Metabase

出于安全原因,我们希望 Metabase 以非特权用户身份运行。如果您还没有这样的用户,请创建一个名为 metabase 的用户

# Create a "metabase" group
sudo groupadd -r metabase

# Create a "metabase" user, with a home directory at /home/metabase
sudo useradd -m -r -s /bin/false -g metabase metabase

下载 Metabase JAR 文件

Metabase JAR 文件可以存储在 metabase 用户可以读取的任何位置。一个方便的位置是该用户的主目录 /home/metabase

如果您希望将 Metabase JAR 文件存储在其他位置,请务必更新本指南后续步骤中对 /home/metabase/metabase.jar 的所有引用。

# Download the Metabase OSS JAR file into /home/metabase:
sudo -u metabase wget -O /home/metabase/metabase.jar https://downloads.metabase.com/latest/metabase.jar

# Or, if you're using Metabase Pro/Enterprise:
sudo -u metabase wget -O /home/metabase/metabase.jar https://downloads.metabase.com/enterprise/latest/metabase.jar

Metabase 的环境变量

环境变量 允许您配置和自定义您的 Metabase 实例。

我们将创建一个文件来存储这些环境变量,我们将在为 Metabase 创建 systemd 服务时使用这些变量。

此命令将在 /home/metabase/.env 创建一个环境变量文件,您应更新此文件以指向您的 PostgreSQL 应用程序数据库

sudo -u metabase cat << EOF > /home/metabase/.env
MB_JETTY_HOST=127.0.0.1
MB_JETTY_PORT=3000

# Uncomment and update the variables below to connect to your Postgres application database
# If not set, Metabase will use a built-in database (not suitable for production)
# MB_DB_TYPE=postgres
# MB_DB_HOST=your_metabase_db_hostname
# MB_DB_PORT=5432
# MB_DB_DBNAME=your_metabase_db_name
# MB_DB_USER=your_metabase_db_user
# MB_DB_PASS=your_metabase_db_password
EOF

创建 Metabase 服务

每个服务都需要一个配置文件,告诉 systemd 如何管理它以及它支持哪些功能。系统范围的服务通常注册在 /etc/systemd/system/<servicename>。因此,Metabase 服务应位于 /etc/systemd/system/metabase.service

Metabase 服务文件

以下命令将在 /etc/systemd/system/metabase.service 创建一个文件,其中包含一个简单的 systemd 服务文件来运行 Metabase

sudo cat << EOF > /etc/systemd/system/metabase.service
[Unit]
Description=Metabase server
After=network.target

[Service]
WorkingDirectory=~
ExecStart=/usr/bin/java --add-opens java.base/java.nio=ALL-UNNAMED -jar /home/metabase/metabase.jar
EnvironmentFile=/home/metabase/.env
User=metabase
Type=simple
SuccessExitStatus=143
TimeoutStopSec=120
Restart=always

[Install]
WantedBy=multi-user.target
EOF

将 Metabase 设置为 systemd 服务的最大好处是它将在每次系统启动时启动,并在崩溃时自动重启。我们只需再进行几个快速步骤即可完成服务的注册并使 Metabase 启动并运行。

确保您的数据库已准备就绪

如果您正在运行 PostgreSQL 应用程序数据库,请确保您已为 Metabase 创建了一个数据库,以及可以访问该数据库的用户。这些值应与您在 Metabase 配置中为 MB_DB_TYPEMB_DB_DBNAMEMB_DB_USERMB_DB_PASS 环境变量设置的值匹配。如果您的数据库配置不正确,Metabase 将无法启动。

确保 Nginx 将请求代理到 Metabase

关于 Nginx 配置的过多细节超出了本指南的范围,但这里提供了一个快速的 nginx.conf 文件,可以帮助您启动和运行。

注意:下面的 nginx.conf 假设您在端口 80 接收传入流量,并希望将请求代理到 Metabase,并且您的 Metabase 实例配置为在 localhost 的端口 3000 上运行。您可能关心的代理指令有几个,因此您应该在 Nginx 官方文档中进一步查看这些内容。

# sample nginx.conf
# proxy requests to Metabase instance
server {
  listen 80;
  listen [::]:80;
  server_name yourdomain.example.com;
  location / {
    proxy_pass http://127.0.0.1:3000;
  }
}

注册您的 Metabase 服务

现在,是时候向 systemd 注册我们的 Metabase 服务,以便它在系统启动时启动

sudo systemctl daemon-reload
sudo systemctl start metabase.service
sudo systemctl status metabase.service

要打印实时 Metabase 服务日志,您可以运行

journalctl -fxeu metabase.service

一旦我们确认没有问题,就启用服务在启动时启动

sudo systemctl enable metabase.service

启动、停止或重启 Metabase

现在,每当您需要重启、停止或启动 Metabase 时,您只需

sudo systemctl restart metabase.service
sudo systemctl stop metabase.service
sudo systemctl start metabase.service

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想要改进这些文档吗? 建议更改。
© . This site is unofficial and not affiliated with Metabase, Inc.