at 25.11-pre 1.8 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7let 8 cfg = config.services.clickhouse; 9in 10{ 11 12 ###### interface 13 14 options = { 15 16 services.clickhouse = { 17 18 enable = lib.mkEnableOption "ClickHouse database server"; 19 20 package = lib.mkPackageOption pkgs "clickhouse" { }; 21 22 }; 23 24 }; 25 26 ###### implementation 27 28 config = lib.mkIf cfg.enable { 29 30 users.users.clickhouse = { 31 name = "clickhouse"; 32 uid = config.ids.uids.clickhouse; 33 group = "clickhouse"; 34 description = "ClickHouse server user"; 35 }; 36 37 users.groups.clickhouse.gid = config.ids.gids.clickhouse; 38 39 systemd.services.clickhouse = { 40 description = "ClickHouse server"; 41 42 wantedBy = [ "multi-user.target" ]; 43 44 after = [ "network.target" ]; 45 46 serviceConfig = { 47 Type = "notify"; 48 User = "clickhouse"; 49 Group = "clickhouse"; 50 ConfigurationDirectory = "clickhouse-server"; 51 AmbientCapabilities = "CAP_SYS_NICE"; 52 StateDirectory = "clickhouse"; 53 LogsDirectory = "clickhouse"; 54 ExecStart = "${cfg.package}/bin/clickhouse-server --config-file=/etc/clickhouse-server/config.xml"; 55 TimeoutStartSec = "infinity"; 56 }; 57 58 environment = { 59 # Switching off watchdog is very important for sd_notify to work correctly. 60 CLICKHOUSE_WATCHDOG_ENABLE = "0"; 61 }; 62 }; 63 64 environment.etc = { 65 "clickhouse-server/config.xml" = { 66 source = "${cfg.package}/etc/clickhouse-server/config.xml"; 67 }; 68 69 "clickhouse-server/users.xml" = { 70 source = "${cfg.package}/etc/clickhouse-server/users.xml"; 71 }; 72 }; 73 74 environment.systemPackages = [ cfg.package ]; 75 76 # startup requires a `/etc/localtime` which only if exists if `time.timeZone != null` 77 time.timeZone = lib.mkDefault "UTC"; 78 79 }; 80 81}