2024-11-23 16:37:34 +03:00
|
|
|
{ config, ... }:
|
2024-09-18 01:04:59 +03:00
|
|
|
|
|
|
|
let
|
|
|
|
UID = 1112;
|
2024-09-19 15:05:13 +03:00
|
|
|
WEBDAV_PORT = 16821;
|
2024-09-18 01:04:59 +03:00
|
|
|
in {
|
|
|
|
imports = [
|
|
|
|
./samba.nix
|
|
|
|
];
|
|
|
|
|
2024-11-23 16:37:34 +03:00
|
|
|
desu.secrets.sftpgo-env.owner = "sftpgo";
|
|
|
|
|
2024-09-18 01:04:59 +03:00
|
|
|
users.users.sftpgo = {
|
|
|
|
isNormalUser = true;
|
|
|
|
uid = UID;
|
2024-11-30 20:11:32 +03:00
|
|
|
extraGroups = [ "geesefs" ];
|
2024-09-18 01:04:59 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
virtualisation.oci-containers.containers.sftpgo = {
|
|
|
|
image = "drakkan/sftpgo:v2.6.2";
|
|
|
|
volumes = [
|
|
|
|
"/srv/sftpgo/data:/srv/sftpgo"
|
|
|
|
"/srv/sftpgo/config:/var/lib/sftpgo"
|
|
|
|
"/mnt/puffer:/mnt/puffer"
|
2024-11-30 20:11:32 +03:00
|
|
|
"/mnt/s3-desu-priv-encrypted:/mnt/s3-desu-priv-encrypted"
|
|
|
|
];
|
|
|
|
user = "${builtins.toString UID}:${builtins.toString UID}";
|
|
|
|
extraOptions = [
|
|
|
|
"--group-add=${builtins.toString config.users.groups.geesefs.gid}"
|
2024-09-18 01:04:59 +03:00
|
|
|
];
|
|
|
|
environment = {
|
|
|
|
SFTPGO_SFTPD__BINDINGS__0__PORT = "22";
|
|
|
|
SFTPGO_WEBDAVD__BINDINGS__0__PORT = "80";
|
|
|
|
SFTPGO_WEBDAVD__BINDINGS__0__PROXY_ALLOWED = "172.17.0.1";
|
|
|
|
SFTPGO_WEBDAVD__BINDINGS__0__CLIENT_IP_PROXY_HEADER = "X-Forwarded-For";
|
|
|
|
SFTPGO_WEBDAVD__BINDINGS__0__PREFIX = "/dav/";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__PORT = "8080";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__ENABLED_LOGIN_METHODS = "3";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__SECURITY__ENABLED = "true";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__SECURITY__ALLOWED_HOSTS = "puffer.stupid.fish";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__BRANDING__NAME = "puffer";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__BRANDING__SHORT_NAME = "puffer";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__OIDC__REDIRECT_BASE_URL = "https://puffer.stupid.fish/";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__OIDC__USERNAME_FIELD = "preferred_username";
|
|
|
|
SFTPGO_HTTPD__BINDINGS__0__OIDC__IMPLICIT_ROLES = "true";
|
|
|
|
};
|
|
|
|
environmentFiles = [
|
2024-11-23 16:37:34 +03:00
|
|
|
config.desu.secrets.sftpgo-env.path
|
2024-09-18 01:04:59 +03:00
|
|
|
];
|
2024-09-19 15:05:13 +03:00
|
|
|
ports = [
|
|
|
|
"${builtins.toString WEBDAV_PORT}:80"
|
|
|
|
];
|
2024-09-18 01:04:59 +03:00
|
|
|
};
|
2024-11-30 20:11:32 +03:00
|
|
|
systemd.services.docker-sftpgo.requires = [ "ecryptfs.service" ];
|
2024-09-18 01:04:59 +03:00
|
|
|
|
|
|
|
systemd.tmpfiles.rules = [
|
|
|
|
"d /srv/sftpgo/data 0700 ${builtins.toString UID} ${builtins.toString UID} -"
|
|
|
|
"d /srv/sftpgo/config 0700 ${builtins.toString UID} ${builtins.toString UID} -"
|
|
|
|
];
|
|
|
|
|
2024-09-19 15:05:13 +03:00
|
|
|
services.nginx.virtualHosts = {
|
|
|
|
"puffer.stupid.fish" = {
|
|
|
|
forceSSL = true;
|
|
|
|
useACMEHost = "stupid.fish";
|
2024-09-18 01:04:59 +03:00
|
|
|
|
2024-10-26 19:43:18 +03:00
|
|
|
extraConfig = ''
|
|
|
|
client_max_body_size 25G;
|
|
|
|
'';
|
|
|
|
|
2024-09-19 15:05:13 +03:00
|
|
|
locations."/" = {
|
|
|
|
proxyPass = "http://sftpgo.docker:8080$request_uri";
|
|
|
|
proxyWebsockets = true;
|
|
|
|
};
|
2024-09-18 01:04:59 +03:00
|
|
|
|
2024-09-19 15:05:13 +03:00
|
|
|
locations."/dav/" = {
|
|
|
|
proxyPass = "http://sftpgo.docker:80$request_uri";
|
|
|
|
};
|
2024-09-18 01:04:59 +03:00
|
|
|
};
|
|
|
|
};
|
2024-09-19 15:05:13 +03:00
|
|
|
|
|
|
|
networking.firewall.allowedTCPPorts = [ WEBDAV_PORT ];
|
|
|
|
|
|
|
|
services.avahi.extraServiceFiles.puffer-lan = ''
|
|
|
|
<?xml version="1.0" standalone='no'?>
|
|
|
|
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
|
|
|
<service-group>
|
|
|
|
<name>puffer-lan</name>
|
|
|
|
<service>
|
|
|
|
<port>${builtins.toString WEBDAV_PORT}</port>
|
|
|
|
<type>_webdav._tcp</type>
|
|
|
|
<txt-record>path=/dav/</txt-record>
|
|
|
|
</service>
|
|
|
|
</service-group>
|
|
|
|
'';
|
2024-09-18 01:04:59 +03:00
|
|
|
}
|