aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/misc/metabase.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/misc/metabase.nix')
-rw-r--r--nixpkgs/nixos/modules/services/misc/metabase.nix103
1 files changed, 103 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/misc/metabase.nix b/nixpkgs/nixos/modules/services/misc/metabase.nix
new file mode 100644
index 00000000000..e78100a046a
--- /dev/null
+++ b/nixpkgs/nixos/modules/services/misc/metabase.nix
@@ -0,0 +1,103 @@
+{ config, lib, pkgs, ... }:
+
+let
+ cfg = config.services.metabase;
+
+ inherit (lib) mkEnableOption mkIf mkOption;
+ inherit (lib) optional optionalAttrs types;
+
+ dataDir = "/var/lib/metabase";
+
+in {
+
+ options = {
+
+ services.metabase = {
+ enable = mkEnableOption "Metabase service";
+
+ listen = {
+ ip = mkOption {
+ type = types.str;
+ default = "0.0.0.0";
+ description = ''
+ IP address that Metabase should listen on.
+ '';
+ };
+
+ port = mkOption {
+ type = types.port;
+ default = 3000;
+ description = ''
+ Listen port for Metabase.
+ '';
+ };
+ };
+
+ ssl = {
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable SSL (https) support.
+ '';
+ };
+
+ port = mkOption {
+ type = types.port;
+ default = 8443;
+ description = ''
+ Listen port over SSL (https) for Metabase.
+ '';
+ };
+
+ keystore = mkOption {
+ type = types.nullOr types.path;
+ default = "${dataDir}/metabase.jks";
+ example = "/etc/secrets/keystore.jks";
+ description = ''
+ <link xlink:href="https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores">Java KeyStore</link> file containing the certificates.
+ '';
+ };
+
+ };
+
+ openFirewall = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Open ports in the firewall for Metabase.
+ '';
+ };
+ };
+
+ };
+
+ config = mkIf cfg.enable {
+
+ systemd.services.metabase = {
+ description = "Metabase server";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network-online.target" ];
+ environment = {
+ MB_PLUGINS_DIR = "${dataDir}/plugins";
+ MB_DB_FILE = "${dataDir}/metabase.db";
+ MB_JETTY_HOST = cfg.listen.ip;
+ MB_JETTY_PORT = toString cfg.listen.port;
+ } // optionalAttrs (cfg.ssl.enable) {
+ MB_JETTY_SSL = true;
+ MB_JETTY_SSL_PORT = toString cfg.ssl.port;
+ MB_JETTY_SSL_KEYSTORE = cfg.ssl.keystore;
+ };
+ serviceConfig = {
+ DynamicUser = true;
+ StateDirectory = baseNameOf dataDir;
+ ExecStart = "${pkgs.metabase}/bin/metabase";
+ };
+ };
+
+ networking.firewall = mkIf cfg.openFirewall {
+ allowedTCPPorts = [ cfg.listen.port ] ++ optional cfg.ssl.enable cfg.ssl.port;
+ };
+
+ };
+}