seaweedfs.nix (4033B)
1 { 2 config, 3 lib, 4 pkgs, 5 ... 6 }: let 7 cfg = config.services.haravara.seaweedfs; 8 in { 9 options.services.haravara.seaweedfs = { 10 enable = lib.mkEnableOption "SeaweedFS"; 11 domains = lib.mkOption { 12 type = lib.types.listOf lib.types.str; 13 description = "Domains for the S3 gateway"; 14 }; 15 dataDir = lib.mkOption { 16 type = lib.types.str; 17 description = "Base directory for SeaweedFS data"; 18 }; 19 s3BindAddress = lib.mkOption { 20 type = lib.types.str; 21 default = "0.0.0.0"; 22 description = "Address for the S3 gateway"; 23 }; 24 s3AllowedIPs = lib.mkOption { 25 type = lib.types.listOf lib.types.str; 26 default = ["127.0.0.1" "::1" "10.88.0.0/16"]; 27 description = "IPs/networks allowed to connect to the S3 gateway"; 28 }; 29 }; 30 31 config = lib.mkIf cfg.enable { 32 users = { 33 groups.seaweedfs = {}; 34 users.seaweedfs = { 35 isSystemUser = true; 36 group = "seaweedfs"; 37 }; 38 }; 39 40 systemd = { 41 tmpfiles.rules = [ 42 "d ${cfg.dataDir} 0755 seaweedfs seaweedfs -" 43 "d ${cfg.dataDir}/master 0755 seaweedfs seaweedfs -" 44 "d ${cfg.dataDir}/volume 0755 seaweedfs seaweedfs -" 45 "d ${cfg.dataDir}/filer 0755 seaweedfs seaweedfs -" 46 ]; 47 48 services = { 49 seaweedfs-master = { 50 description = "SeaweedFS Master"; 51 after = ["network.target"]; 52 wantedBy = ["multi-user.target"]; 53 54 serviceConfig = { 55 User = "seaweedfs"; 56 Group = "seaweedfs"; 57 ExecStart = "${pkgs.seaweedfs}/bin/weed master -mdir=${cfg.dataDir}/master -port=9333 -ip=127.0.0.1 -ip.bind=127.0.0.1 -metricsPort=9324"; 58 Restart = "always"; 59 }; 60 }; 61 62 seaweedfs-volume = { 63 description = "SeaweedFS Volume"; 64 after = ["seaweedfs-master.service"]; 65 requires = ["seaweedfs-master.service"]; 66 wantedBy = ["multi-user.target"]; 67 68 serviceConfig = { 69 User = "seaweedfs"; 70 Group = "seaweedfs"; 71 ExecStart = "${pkgs.seaweedfs}/bin/weed volume -dir=${cfg.dataDir}/volume -max=100 -port=8080 -ip=127.0.0.1 -ip.bind=127.0.0.1 -master=127.0.0.1:9333 -index=leveldb -metricsPort=9325"; 72 Restart = "always"; 73 }; 74 }; 75 76 seaweedfs-filer = { 77 description = "SeaweedFS Filer"; 78 after = ["seaweedfs-master.service" "seaweedfs-volume.service"]; 79 requires = ["seaweedfs-master.service"]; 80 wantedBy = ["multi-user.target"]; 81 82 serviceConfig = { 83 User = "seaweedfs"; 84 Group = "seaweedfs"; 85 ExecStart = "${pkgs.seaweedfs}/bin/weed filer -port=8888 -ip=127.0.0.1 -ip.bind=127.0.0.1 -master=127.0.0.1:9333 -defaultStoreDir=${cfg.dataDir}/filer -metricsPort=9326"; 86 Restart = "always"; 87 }; 88 }; 89 90 seaweedfs-s3 = { 91 description = "SeaweedFS S3 Gateway"; 92 after = ["seaweedfs-filer.service"]; 93 requires = ["seaweedfs-filer.service"]; 94 wantedBy = ["multi-user.target"]; 95 96 serviceConfig = { 97 User = "seaweedfs"; 98 Group = "seaweedfs"; 99 ExecStart = "${pkgs.seaweedfs}/bin/weed s3 -port=8333 -ip.bind=${cfg.s3BindAddress} -filer=127.0.0.1:8888 -metricsPort=9327"; 100 Restart = "always"; 101 IPAddressAllow = cfg.s3AllowedIPs; 102 IPAddressDeny = "any"; 103 }; 104 }; 105 106 seaweedfs-admin = { 107 description = "SeaweedFS Admin Interface"; 108 after = ["seaweedfs-master.service"]; 109 requires = ["seaweedfs-master.service"]; 110 wantedBy = ["multi-user.target"]; 111 112 serviceConfig = { 113 User = "seaweedfs"; 114 Group = "seaweedfs"; 115 ExecStart = "${pkgs.seaweedfs}/bin/weed admin -port=23646 -master=127.0.0.1:9333"; 116 Restart = "always"; 117 IPAddressAllow = ["127.0.0.1" "::1"]; 118 IPAddressDeny = "any"; 119 }; 120 }; 121 }; 122 }; 123 }; 124 }