nixos/modules/nextcloud/default.nix

88 lines
3.1 KiB
Nix

{ custom, domain }: { config, pkgs, ... }:
let
nextcloudEnvironment = {
MYSQL_DATABASE = "nextcloud";
MYSQL_USER = "nextcloud";
MYSQL_HOST = "172.17.0.1";
NEXTCLOUD_TRUSTED_DOMAINS = "${domain} ${config.networking.hostName}.2li.local 10.7.89.103";
REDIS_HOST = "redis";
SMTP_HOST = "mail.infomaniak.com";
SMTP_SECURE = "ssl";
SMTP_PORT = "465";
};
networkName = "nextcloud";
nextcloudImage = "ghcr.io/nebucatnetzer/nextcloud-smb/nextcloud-smb:25.0.1@sha256:71148efd6be127a0cae47f8d5a4d2129d24a1cd325d9a973e34cebdf0047675e";
nextcloudService = "${config.virtualisation.oci-containers.backend}-nextcloud";
cronService = "${config.virtualisation.oci-containers.backend}-cron";
in
{
age.secrets.nextcloudEnv.file = "${custom.inputs.self}/scrts/nextcloud_env.age";
services.mysql.settings = {
mysqld = {
innodb_file_per_table = 1;
innodb_buffer_pool_size = "2G";
read_rnd_buffer_size = "4M";
sort_buffer_size = "4M";
};
};
virtualisation.oci-containers = {
backend = "docker";
containers."nextcloud" = {
image = nextcloudImage;
autoStart = true;
environment = nextcloudEnvironment;
environmentFiles = [ config.age.secrets.nextcloudEnv.path ];
ports = [
"8080:80"
];
volumes = [
"${custom.inputs.self}/modules/nextcloud/custom-php.ini:/usr/local/etc/php/conf.d/zzz-custom.ini"
"/etc/localtime:/etc/localtime:ro"
];
dependsOn = [ "redis" ];
extraOptions = [
''--mount=type=volume,source=nextcloud_data,target=/var/www/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/server_data/nextcloud/data,"volume-opt=o=addr=10.7.89.108,rw,nfsvers=4.0,nolock,hard,noatime"''
"--add-host=host.docker.internal:host-gateway"
"--net=${networkName}"
];
};
containers."cron" = {
image = nextcloudImage;
autoStart = true;
environment = nextcloudEnvironment;
environmentFiles = [ config.age.secrets.nextcloudEnv.path ];
entrypoint = "/cron.sh";
dependsOn = [ "redis" ];
volumes = [
"/etc/localtime:/etc/localtime:ro"
];
extraOptions = [
''--mount=type=volume,source=nextcloud_data,target=/var/www/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/server_data/nextcloud/data,"volume-opt=o=addr=10.7.89.108,rw,nfsvers=4.0,nolock,hard,noatime"''
"--add-host=host.docker.internal:host-gateway"
"--net=nextcloud"
];
};
containers."redis" = {
image = "redis:alpine";
autoStart = true;
volumes = [
"/etc/localtime:/etc/localtime:ro"
];
extraOptions = [
"--net=${networkName}"
];
};
};
system.activationScripts.makeDockerNetwork = ''
${pkgs.docker}/bin/docker network ls | ${pkgs.gnugrep}/bin/grep ${networkName} || ${pkgs.docker}/bin/docker network create ${networkName}
'';
environment.shellAliases = {
occ = ''${pkgs.docker}/bin/docker exec -u www-data nextcloud php occ'';
};
systemd.services.${nextcloudService}.after = [ "mysql.service" "nginx.service" ];
systemd.services.${cronService}.after = [ "mysql.service" ];
}