Monorepo for Tangled tangled.org

nix,spindle: use `DATA_DIR` for db & other spindle data

This single persistent directory can be used for storing general spindle
data like db, motd file and upcoming sparse-clone git repos.

db path will be `${DATA_DIR}/spindle.db`

Signed-off-by: Seongmin Lee <git@boltless.me>

boltless.me cfe08e1e 6d774b55

verified
Changed files
+11 -6
nix
spindle
config
+4 -4
nix/modules/spindle.nix
··· 35 35 description = "Address to listen on"; 36 36 }; 37 37 38 - dbPath = mkOption { 38 + stateDir = mkOption { 39 39 type = types.path; 40 - default = "/var/lib/spindle/spindle.db"; 41 - description = "Path to the database file"; 40 + default = "/var/lib/spindle"; 41 + description = "Tangled spindle data directory"; 42 42 }; 43 43 44 44 hostname = mkOption { ··· 150 150 StateDirectory = "spindle"; 151 151 Environment = [ 152 152 "SPINDLE_SERVER_LISTEN_ADDR=${cfg.server.listenAddr}" 153 - "SPINDLE_SERVER_DB_PATH=${cfg.server.dbPath}" 153 + "SPINDLE_SERVER_DATA_DIR=${cfg.server.stateDir}" 154 154 "SPINDLE_SERVER_HOSTNAME=${cfg.server.hostname}" 155 155 "SPINDLE_SERVER_PLC_URL=${cfg.server.plcUrl}" 156 156 "SPINDLE_SERVER_DEV=${lib.boolToString cfg.server.dev}"
+1 -1
nix/vm.nix
··· 140 140 }; 141 141 in { 142 142 knot = mkDataSyncScripts "/mnt/knot-data" config.services.tangled.knot.stateDir; 143 - spindle = mkDataSyncScripts "/mnt/spindle-data" (builtins.dirOf config.services.tangled.spindle.server.dbPath); 143 + spindle = mkDataSyncScripts "/mnt/spindle-data" config.services.tangled.spindle.server.stateDir; 144 144 }; 145 145 }) 146 146 ];
+6 -1
spindle/config/config.go
··· 3 3 import ( 4 4 "context" 5 5 "fmt" 6 + "path/filepath" 6 7 7 8 "github.com/bluesky-social/indigo/atproto/syntax" 8 9 "github.com/sethvargo/go-envconfig" ··· 10 11 11 12 type Server struct { 12 13 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:6555"` 13 - DBPath string `env:"DB_PATH, default=spindle.db"` 14 14 Hostname string `env:"HOSTNAME, required"` 15 15 TapUrl string `env:"TAP_URL, required"` 16 16 PlcUrl string `env:"PLC_URL, default=https://plc.directory"` ··· 18 18 Owner syntax.DID `env:"OWNER, required"` 19 19 Secrets Secrets `env:",prefix=SECRETS_"` 20 20 LogDir string `env:"LOG_DIR, default=/var/log/spindle"` 21 + DataDir string `env:"DATA_DIR, default=/var/lib/spindle"` 21 22 QueueSize int `env:"QUEUE_SIZE, default=100"` 22 23 MaxJobCount int `env:"MAX_JOB_COUNT, default=2"` // max number of jobs that run at a time 23 24 } 24 25 25 26 func (s Server) Did() syntax.DID { 26 27 return syntax.DID(fmt.Sprintf("did:web:%s", s.Hostname)) 28 + } 29 + 30 + func (s Server) DBPath() string { 31 + return filepath.Join(s.DataDir, "spindle.db") 27 32 } 28 33 29 34 type Secrets struct {