在 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/<servicename>
注册。因此,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
中,将可配置项(它们看起来像 <some-var-name>
)替换为对您的系统有意义的值。下面的 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/<service-name>
内部具有随附的配置。
Metabase 配置文件
在编辑器中打开您的 /etc/default/metabase
环境变量配置文件
sudo <your-editor> /etc/default/metabase
在 /etc/default/metabase
中,将可配置项(它们看起来像 <some-var-name>
)替换为对您的系统有意义的值。一些 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的文档。