services: add nextcloud

The password is quoted using `"` instead of `'` in the setup script,
beware of `$` characters...
This commit is contained in:
Bruno BELANYI 2021-02-01 11:44:21 +01:00
parent adfc2eb832
commit 34ff469b6d
4 changed files with 74 additions and 0 deletions

View file

@ -81,6 +81,11 @@
enable = true; enable = true;
secret = lib.fileContents ./secrets/matrix/secret.txt; secret = lib.fileContents ./secrets/matrix/secret.txt;
}; };
# Nextcloud self-hosted cloud
nextcloud = {
enable = true;
password = lib.fileContents ./secrets/nextcloud/password.txt;
};
# The whole *arr software suite # The whole *arr software suite
pirate.enable = true; pirate.enable = true;
# Usenet client # Usenet client

Binary file not shown.

View file

@ -6,6 +6,7 @@
./jellyfin.nix ./jellyfin.nix
./matrix.nix ./matrix.nix
./media.nix ./media.nix
./nextcloud.nix
./nginx.nix ./nginx.nix
./pirate.nix ./pirate.nix
./sabnzbd.nix ./sabnzbd.nix

68
services/nextcloud.nix Normal file
View file

@ -0,0 +1,68 @@
# A self-hosted cloud.
{ config, lib, pkgs, ... }:
let
cfg = config.my.services.nextcloud;
domain = config.networking.domain;
nextcloudDomain = "nextcloud.${config.networking.domain}";
in
{
options.my.services.nextcloud = with lib; {
enable = mkEnableOption "Nextcloud";
maxSize = mkOption {
type = types.str;
default = "512M";
example = "1G";
description = "Maximum file upload size";
};
admin = mkOption {
type = types.str;
default = "Ambroisie";
example = "admin";
description = "Name of the admin user";
};
password = mkOption {
type = types.str;
example = "password";
description = "The admin user's password";
};
};
config = lib.mkIf cfg.enable {
services.nextcloud = {
enable = true;
package = pkgs.nextcloud20; # Nextcloud 19.0.6 is marked as insecure
hostName = nextcloudDomain;
maxUploadSize = cfg.maxSize;
config = {
adminuser = cfg.admin;
adminpass = cfg.password; # Insecure, but I don't care
dbtype = "pgsql";
dbhost = "/run/postgresql";
overwriteProtocol = "https"; # Nginx only allows SSL
};
};
services.postgresql = {
enable = true;
ensureDatabases = [ "nextcloud" ];
ensureUsers = [
{
name = "nextcloud";
ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
}
];
};
systemd.services."nextcloud-setup" = {
requires = [ "postgresql.service" ];
after = [ "postgresql.service" ];
};
services.nginx.virtualHosts."${nextcloudDomain}" = {
forceSSL = true;
useACMEHost = "${domain}";
locations."/".proxyPass = "http://localhost:3000/";
};
};
}