将 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_TYPE
、MB_DB_DBNAME
、MB_DB_USER
和 MB_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 的文档。