将 Metabase 作为 systemd 服务运行

对于那些不在其基础设施中使用 Docker 的用户,您可以将 Metabase 注册为一个 systemd 服务,该服务可以被启动/停止/卸载。

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

假设

本指南的核心假设

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

对于生产环境,您必须设置一个 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 用户可以读取 Metabase JAR 文件的任何位置。一个方便的位置是该用户的家目录 /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 服务

现在,是时候将我们的 Metabase 服务注册到 systemd 了,这样它就可以在系统启动时启动了

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.