2023-03-23 01:58:10 +03:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
|
|
backend = config.virtualisation.oci-containers.backend;
|
|
|
|
nas-path = "/media/nas/seafile";
|
2023-11-22 06:16:07 +03:00
|
|
|
pod-name = "seafile-pod";
|
2023-03-23 01:58:10 +03:00
|
|
|
open-ports = [ "127.0.0.1:8088:80" ];
|
2023-07-30 03:30:14 +03:00
|
|
|
seafile-ver = "10.0.1";
|
|
|
|
mariadb-ver = "10.11.4";
|
|
|
|
memcached-ver = "1.6.21";
|
|
|
|
caddy-ver = "1.1.0";
|
2023-03-23 01:58:10 +03:00
|
|
|
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
|
|
|
|
}
|
2023-07-30 03:30:14 +03:00
|
|
|
reverse_proxy /seafdav* seafile-server:8080 {
|
|
|
|
header_up Destination https:// http://
|
|
|
|
trusted_proxies private_ranges
|
|
|
|
}
|
2023-03-23 01:58:10 +03:00
|
|
|
handle_path /seafhttp* {
|
|
|
|
uri strip_prefix seafhttp
|
|
|
|
reverse_proxy seafile-server:8082 {
|
2023-07-30 03:30:14 +03:00
|
|
|
trusted_proxies private_ranges
|
2023-03-23 01:58:10 +03:00
|
|
|
}
|
|
|
|
}
|
2023-07-30 03:30:14 +03:00
|
|
|
handle_path /notification* {
|
|
|
|
uri strip_prefix notification
|
|
|
|
reverse_proxy seafile-server:8083 {
|
|
|
|
trusted_proxies private_ranges
|
|
|
|
}
|
2023-03-23 01:58:10 +03:00
|
|
|
}
|
|
|
|
reverse_proxy /media/* seahub-media:8098 {
|
|
|
|
lb_policy header X-Forwarded-For
|
|
|
|
trusted_proxies private_ranges
|
|
|
|
}
|
2023-07-30 03:30:14 +03:00
|
|
|
rewrite /accounts/login* /oauth/login/?
|
2023-03-23 01:58:10 +03:00
|
|
|
}
|
|
|
|
'';
|
|
|
|
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" ];
|
2023-07-30 03:30:14 +03:00
|
|
|
image = "docker.io/ggogel/seafile-server:${seafile-ver}";
|
2023-03-23 01:58:10 +03:00
|
|
|
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"
|
2022-03-22 06:02:13 +03:00
|
|
|
];
|
2023-07-30 03:30:14 +03:00
|
|
|
image = "docker.io/ggogel/seahub:${seafile-ver}";
|
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" ];
|
2023-07-30 03:30:14 +03:00
|
|
|
image = "docker.io/ggogel/seahub-media:${seafile-ver}";
|
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" ];
|
2023-07-30 03:30:14 +03:00
|
|
|
image = "docker.io/mariadb:${mariadb-ver}";
|
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" ];
|
2023-07-30 03:30:14 +03:00
|
|
|
image = "docker.io/memcached:${memcached-ver}";
|
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" ];
|
2023-07-30 03:30:14 +03:00
|
|
|
image = "docker.io/ggogel/seafile-caddy:${caddy-ver}";
|
2023-03-23 01:58:10 +03:00
|
|
|
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;
|
2023-11-22 06:16:07 +03:00
|
|
|
start = pkgs.writeShellScript "create-pod-${pod-name}" ''
|
2023-03-23 01:58:10 +03:00
|
|
|
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-06-27 23:09:36 +03:00
|
|
|
requiredBy = before;
|
2023-03-23 01:58:10 +03:00
|
|
|
partOf = before;
|
|
|
|
serviceConfig = {
|
|
|
|
Type = "oneshot";
|
|
|
|
RemainAfterExit = "yes";
|
|
|
|
ExecStart = start;
|
|
|
|
};
|
2022-03-22 06:02:13 +03:00
|
|
|
};
|
|
|
|
}
|