nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

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 }