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