在Debian上以服务形式运行Metabase与nginx
对于那些在基础设施中无法(或不能)使用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 -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配置文件
接下来,我们需要创建一个syslog配置文件,以确保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实例配置为在localhost
端口3000
上运行。这里有一些您可能关心的代理指令,您应该进一步查看官方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服务
现在,我们需要将Metabase服务注册到systemd
,以便在系统启动时启动。我们还将确保我们的日志文件被创建并由运行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版本的文档。