151 lines
4.3 KiB
Nix
Raw Normal View History

2023-03-23 01:58:10 +03:00
{ config, lib, pkgs, ... }:
let
backend = config.virtualisation.oci-containers.backend;
nas-path = "/media/nas/seafile";
pod-name = "seafile";
open-ports = [ "127.0.0.1:8088:80" ];
seahub-media-caddyfile = pkgs.writeText "Caddyfile" ''
{
admin off
http_port 8098
https_port 8099
}
:8098 {
root * /usr/share/caddy
file_server
}
'';
seafile-caddy-caddyfile = pkgs.writeText "Caddyfile" ''
{
auto_https disable_redirects
}
http:// https:// {
reverse_proxy seahub:8000 {
lb_policy header X-Forwarded-For
trusted_proxies private_ranges
}
handle_path /seafhttp* {
uri strip_prefix seafhttp
reverse_proxy seafile-server:8082 {
trusted_proxies private_ranges
}
}
reverse_proxy /seafdav* seafile-server:8080 {
header_up Destination https:// http://
trusted_proxies private_ranges
}
reverse_proxy /media/* seahub-media:8098 {
lb_policy header X-Forwarded-For
trusted_proxies private_ranges
}
}
'';
in {
secrets.seafile-db-pass = { };
2022-03-22 06:02:13 +03:00
secrets.seafile-admin-pass = { };
virtualisation.oci-containers.containers.seafile-server = {
autoStart = true;
dependsOn = [ "seafile-db" "memcached" "seafile-caddy" ];
environment = {
DB_HOST = "seafile-db";
TIME_ZONE = "Europe/Moscow";
2023-03-23 01:58:10 +03:00
HTTPS = "true";
2022-03-22 06:02:13 +03:00
SEAFILE_SERVER_HOSTNAME = "file.ataraxiadev.com";
2023-03-23 01:58:10 +03:00
GC_CRON = "0 6 * * 0";
2022-03-22 06:02:13 +03:00
};
environmentFiles = [
2023-03-23 01:58:10 +03:00
config.secrets.seafile-db-pass.decrypted
2022-03-22 06:02:13 +03:00
];
2023-03-23 01:58:10 +03:00
extraOptions = [ "--pod=seafile" ];
image = "docker.io/ggogel/seafile-server:9.0.10";
volumes = [ "${nas-path}/server-data:/shared" ];
2022-03-22 06:02:13 +03:00
};
virtualisation.oci-containers.containers.seahub = {
autoStart = true;
dependsOn = [ "seafile-server" "seahub-media" "seafile-caddy" ];
environment = {
SEAFILE_ADMIN_EMAIL = "admin@ataraxiadev.com";
};
environmentFiles = [
config.secrets.seafile-admin-pass.decrypted
];
extraOptions = [
2023-03-23 01:58:10 +03:00
"--pod=seafile"
# "--add-host=auth.ataraxiadev:192.168.0.10"
2022-03-22 06:02:13 +03:00
];
2023-03-23 01:58:10 +03:00
image = "docker.io/ggogel/seahub:9.0.10";
2022-03-22 06:02:13 +03:00
volumes = [
2023-03-23 01:58:10 +03:00
"${nas-path}/server-data:/shared"
2022-03-22 06:02:13 +03:00
];
};
virtualisation.oci-containers.containers.seahub-media = {
autoStart = true;
dependsOn = [ "seafile-caddy" ];
2023-03-23 01:58:10 +03:00
extraOptions = [ "--pod=seafile" ];
image = "docker.io/ggogel/seahub-media:9.0.10";
2022-03-22 06:02:13 +03:00
volumes = [
2023-03-23 01:58:10 +03:00
"${seahub-media-caddyfile}:/etc/caddy/Caddyfile"
"${nas-path}/server-data/seafile/seahub-data/avatars:/usr/share/caddy/media/avatars"
"${nas-path}/server-data/seafile/seahub-data/custom:/usr/share/caddy/media/custom"
2022-03-22 06:02:13 +03:00
];
};
virtualisation.oci-containers.containers.seafile-db = {
autoStart = true;
environment = {
MYSQL_LOG_CONSOLE = "true";
};
environmentFiles = [
2023-03-23 01:58:10 +03:00
config.secrets.seafile-db-pass.decrypted
2022-03-22 06:02:13 +03:00
];
2023-03-23 01:58:10 +03:00
extraOptions = [ "--pod=seafile" ];
image = "docker.io/mariadb:10.7.8";
2022-03-22 06:02:13 +03:00
volumes = [
2023-03-23 01:58:10 +03:00
"${nas-path}/db:/var/lib/mysql"
2022-03-22 06:02:13 +03:00
];
};
virtualisation.oci-containers.containers.memcached = {
autoStart = true;
2023-03-23 01:58:10 +03:00
cmd = [ "memcached" "-m 256" ];
extraOptions = [ "--pod=seafile" ];
image = "docker.io/memcached:1.6.18";
2022-03-22 06:02:13 +03:00
};
virtualisation.oci-containers.containers.seafile-caddy = {
autoStart = true;
2023-03-23 01:58:10 +03:00
extraOptions = [ "--pod=seafile" ];
image = "docker.io/ggogel/seafile-caddy:1.0.8";
volumes = [ "${seafile-caddy-caddyfile}:/etc/caddy/Caddyfile" ];
2022-03-22 06:02:13 +03:00
};
2023-03-23 01:58:10 +03:00
systemd.services."podman-create-${pod-name}" = let
portsMapping = lib.concatMapStrings (port: " -p " + port) open-ports;
start = pkgs.writeShellScript "create-pod" ''
podman pod exists ${pod-name} || podman pod create -n ${pod-name} ${portsMapping}
exit 0
'';
in rec {
path = [ pkgs.coreutils config.virtualisation.podman.package ];
before = [
2022-03-22 06:02:13 +03:00
"${backend}-seafile-server.service"
"${backend}-seahub.service"
"${backend}-seahub-media.service"
"${backend}-seafile-db.service"
"${backend}-memcached.service"
"${backend}-seafile-caddy.service"
];
2023-03-23 01:58:10 +03:00
wantedBy = before;
partOf = before;
serviceConfig = {
Type = "oneshot";
RemainAfterExit = "yes";
ExecStart = start;
};
2022-03-22 06:02:13 +03:00
};
}