Metabase 怎么作为 systemd 系统服务运行?
【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase
如果你的服务器上没有条件使用 Docker(或你不想用),可以把 Metabase 以metabase.jar的形式注册成 systemd 服务:开机自启、进程崩溃后自动拉起,并可以用systemctl统一启停。本文基于 Metabase 官方文档 Running Metabase as a systemd service 整理,以 Debian 为例,但步骤适用于大多数使用 systemd 的 Linux 发行版。
开始前的准备条件
官方文档列出了这条路径的核心假设,动手前先逐条确认:
系统已安装 Java 运行环境(JRE)。Metabase 目前要求 JRE 25(Eclipse Temurin / HotSpot JVM),更早的 Java 版本不受支持。可先用
java -version检查:java -versionMetabase 通过
metabase.jar文件运行,而不是 Docker 镜像;服务器上已经在运行 Nginx,负责把外部请求代理到 Metabase;
Metabase 的配置通过环境变量完成;
你有 root(可
sudo)权限。
生产环境还需要一个 PostgreSQL 或 MySQL/MariaDB 应用数据库,配置方式见 Configuring the Metabase application database。如果没配应用数据库,Metabase 会回退到内置的 H2 文件库,官方明确说明这不适合生产,而且数据库没配好时 Metabase 无法启动。
创建运行 Metabase 的普通用户
出于安全考虑,Metabase 不应以 root 运行。如果系统里还没有专门的用户,创建一个名为metabase的用户:
# 创建 "metabase" 组 sudo groupadd -r metabase # 创建 "metabase" 用户,家目录为 /home/metabase sudo useradd -m -r -s /bin/false -g metabase metabase后续步骤中 JAR 文件、环境变量文件都放在/home/metabase下。如果你想把 JAR 放到别的位置,需要把后面所有对/home/metabase/metabase.jar的引用一并改掉。
下载 Metabase JAR 文件
JAR 文件只要metabase用户可读即可,文档推荐的存放位置是/home/metabase/metabase.jar:
# 下载 Metabase OSS 的 JAR 到 /home/metabase: sudo -u metabase wget -O /home/metabase/metabase.jar https://downloads.metabase.com/latest/metabase.jar # 或者,如果你用的是 Metabase Pro/Enterprise: sudo -u metabase wget -O /home/metabase/metabase.jar https://downloads.metabase.com/enterprise/latest/metabase.jar两条命令二选一:OSS 版本走第一个地址,Pro/Enterprise 版本走第二个地址。
用环境变量文件配置 Metabase
环境变量是 Metabase 的定制方式。下一步创建 systemd 服务时会引用一个环境变量文件,现在先把它建好:
sudo -u metabase cat << EOF > /home/metabase/.env MB_JETTY_HOST=127.0.0.1 MB_JETTY_PORT=3000 # 取消注释并更新下面的变量以连接你的 Postgres 应用数据库 # 如果不设置,Metabase 将使用内置数据库(不适合生产) # 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需要说明的取值含义(均来自文档):
MB_JETTY_HOST:Metabase 监听的网络接口。设为127.0.0.1表示只监听本机,由 Nginx 转发外部流量;设为0.0.0.0则监听所有接口。JAR 部署的默认值是localhost。MB_JETTY_PORT:HTTP 端口,默认就是3000。MB_DB_*系列:指向你的 PostgreSQL 应用数据库。生产环境必须取消注释并替换your_metabase_db_hostname、your_metabase_db_name、your_metabase_db_user、your_metabase_db_password这几个占位值为你实际的数据库连接信息;保持注释状态则走内置 H2 数据库,仅限试用。
创建 systemd 服务文件
系统级服务的配置放在/etc/systemd/system/<servicename>,所以 Metabase 的服务文件是/etc/systemd/system/metabase.service。用下面的命令创建它:
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其中有几处需要和你的环境核对:
ExecStart里的--add-opens java.base/java.nio=ALL-UNNAMED是文档给出的启动参数,原样保留;/home/metabase/metabase.jar要和你上一步 JAR 的实际位置一致。EnvironmentFile=/home/metabase/.env指向上一步创建的环境变量文件,这也是"跑服务时把数据库连接变量放进单独配置文件"的落地方式(JAR 文档里对服务化运行有同样说明)。Restart=always意味着 Metabase 崩溃后会被 systemd 自动拉起;配合[Install]段的WantedBy=multi-user.target,服务会在每次系统启动时自动运行。
确认数据库与 Nginx 代理就绪
数据库侧:如果用的是 PostgreSQL 应用数据库,确认已经为 Metabase 建好数据库和可访问该库的用户,并且这些值与.env里的MB_DB_TYPE、MB_DB_DBNAME、MB_DB_USER、MB_DB_PASS一致。文档明确提示:数据库没配好时 Metabase 无法启动。Metabase 不会替你创建数据库,PostgreSQL 下可以先执行:
createdb --encoding=UTF8 -e metabaseNginx 侧:nginx.conf的完整配置超出本文范围,文档给了一份最小可用的示例,前提是:外部流量走 80 端口,Metabase 实例在localhost:3000上运行。
# 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; } }注意server_name yourdomain.example.com是文档示例值,需要替换成你自己的域名;proxy_pass的地址要与.env里的MB_JETTY_HOST/MB_JETTY_PORT对得上(示例对应127.0.0.1:3000)。
注册并启动服务
把服务注册给 systemd 并启动:
sudo systemctl daemon-reload sudo systemctl start metabase.service sudo systemctl status metabase.servicestatus用于查看服务当前状态。要看 Metabase 的实时服务日志,运行:
journalctl -fxeu metabase.service确认一切正常后,把服务设为开机自启:
sudo systemctl enable metabase.service如何确认 Metabase 已经跑起来
验证分两层:
- 进程层:
systemctl status metabase.service显示服务在运行,且journalctl -fxeu metabase.service日志中没有启动错误。Metabase 启动时会在日志里打印进度(即journalctl看到的输出),完全启动的标志是出现Metabase Initialization Complete/Metabase Initialization COMPLETE这类确认日志(示例见 Running the Metabase JAR file 中的文档示例输出)。 - 访问层:Metabase 默认监听 3000 端口。本方案里
MB_JETTY_HOST=127.0.0.1,所以外部访问要经过 Nginx:打开http://你的域名/(对应 80 端口)应能看到 Metabase。首次部署可直接访问http://localhost:3000/setup走初始化流程——注意这条地址只在能直连本机 3000 端口(如登录到服务器本机)时可用,外部用户一律走 Nginx。
日常启停操作
服务注册完成后,重启、停止、启动 Metabase 就是标准的systemctl操作:
sudo systemctl restart metabase.service sudo systemctl stop metabase.service sudo systemctl start metabase.service边界与限制
- 这份指南被官方明确定位为 "bare-bones recipe"(最小可行配方):它只保证服务能跑起来,服务器其余部分的设置和安全加固需要按你自己的运维规范继续做。
- 生产部署必须使用 PostgreSQL 或 MySQL/MariaDB 作为应用数据库;
.env中不配置MB_DB_*时使用的内置 H2 数据库仅适合本地试用。应用数据库连接信息只在启动时读取,应用运行中无法更换,改完.env后需要重启服务生效。 - 如果你之前用 H2 存过问题、仪表盘等内容,换成生产应用数据库时涉及数据迁移,参见 Migrating from the H2 database。
- 安装过程中遇到问题的排查入口是 Troubleshooting: Running Metabase。
【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考