at 23.11-pre 2.0 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 (lib.mdDoc "ClickHouse database server"); 15 16 package = mkOption { 17 type = types.package; 18 default = pkgs.clickhouse; 19 defaultText = lib.literalExpression "pkgs.clickhouse"; 20 description = lib.mdDoc '' 21 ClickHouse package to use. 22 ''; 23 }; 24 25 }; 26 27 }; 28 29 30 ###### implementation 31 32 config = mkIf cfg.enable { 33 34 users.users.clickhouse = { 35 name = "clickhouse"; 36 uid = config.ids.uids.clickhouse; 37 group = "clickhouse"; 38 description = "ClickHouse server user"; 39 }; 40 41 users.groups.clickhouse.gid = config.ids.gids.clickhouse; 42 43 systemd.services.clickhouse = { 44 description = "ClickHouse server"; 45 46 wantedBy = [ "multi-user.target" ]; 47 48 after = [ "network.target" ]; 49 50 serviceConfig = { 51 Type = "notify"; 52 User = "clickhouse"; 53 Group = "clickhouse"; 54 ConfigurationDirectory = "clickhouse-server"; 55 AmbientCapabilities = "CAP_SYS_NICE"; 56 StateDirectory = "clickhouse"; 57 LogsDirectory = "clickhouse"; 58 ExecStart = "${cfg.package}/bin/clickhouse-server --config-file=/etc/clickhouse-server/config.xml"; 59 TimeoutStartSec = "infinity"; 60 }; 61 62 environment = { 63 # Switching off watchdog is very important for sd_notify to work correctly. 64 CLICKHOUSE_WATCHDOG_ENABLE = "0"; 65 }; 66 }; 67 68 environment.etc = { 69 "clickhouse-server/config.xml" = { 70 source = "${cfg.package}/etc/clickhouse-server/config.xml"; 71 }; 72 73 "clickhouse-server/users.xml" = { 74 source = "${cfg.package}/etc/clickhouse-server/users.xml"; 75 }; 76 }; 77 78 environment.systemPackages = [ cfg.package ]; 79 80 # startup requires a `/etc/localtime` which only if exists if `time.timeZone != null` 81 time.timeZone = mkDefault "UTC"; 82 83 }; 84 85}