Nextcloud
Installation
A minimal example to get a Nextcloud running on localhost should look like this
/etc/nixos/configuration.nix
services.nextcloud = {
enable = true;
package = pkgs.nextcloud24;
hostName = "localhost";
config.adminpassFile = "${pkgs.writeText "adminpass" "test123"}";
};
After that you will be able to login into your Nextcloud instance at http://localhost with user admin
and password test123
as configured above.
Upgrade
As you can see on the package search, there is no default nextcloud package. Instead you have to set the current version in services.nextcloud.package
, and it is your job as the maintainer of your nextcloud to check whether you're running an upstream supported version.
Upgrading then consists of these steps:
nextcloud-occ maintenance:mode --on
- Increment the version of
services.nextcloud.package
in your config by 1 (leaving out a major version is not supported) nixos-rebuild switch
nextcloud-occ maintenance:mode --off
In theory, your nextcloud has now been upgraded by one version. NixOS attempts nextcloud-occ upgrade
, if this succeeds without problems you don't need to do anything. Check journalctl
to make sure nothing horrible happened. Go to the /settings/admin/overview
page in your nextcloud to see whether it recommends further processing, such as database reindexing or conversion.
Tips and tricks
Use alternative web server
In case port 80 is already used by a different application or you're using a different web server than Nginx, which is used by the Nextcloud module, you can put this service into a native NixOS container with a separate network subnet. Regarding the minimal example above, it should work like this:
/etc/nixos/configuration.nix
networking.nat = {
enable = true;
internalInterfaces = ["ve-+"];
externalInterface = "ens3";
};
containers.nextcloud = {
autoStart = true;
privateNetwork = true;
hostAddress = "192.168.100.10";
localAddress = "192.168.100.11";
config = { config, pkgs, ... }: {
services.nextcloud = {
enable = true;
package = pkgs.nextcloud24;
hostName = "localhost";
config.adminpassFile = "${pkgs.writeText "adminpass" "test123"}";
};
system.stateVersion = "22.05";
networking.firewall = {
enable = true;
allowedTCPPorts = [ 80 ];
};
};
};
After applying this configuration, your Nextcloud instance will be available at http://192.168.100.11
Troubleshooting
You get the message
U Wed Jul 3 06:15:06 2019 p3 nextcloud-cron.service Nextcloud[9374]: {cron} {"Exception":"Exception","Message":"Not installed","Code":0,"Trace":[{"file":"\/nix\/store\/9c58nxa9mzzg93ppwq2jlynpf4vsbd30-nextcloud-15.0.8\/lib\/base.php","line":660,"function":"checkInstalled","class":"OC","type":"::","args":[]},{"file":"\/nix\/store\/9c58nxa9mzzg93ppwq2jlynpf4vsbd30-nextcloud-15.0.8\/lib\/base.php","line":1068,"function":"init","class":"OC","type":"::","args":[]},{"file":"\/nix\/store\/9c58nxa9mzzg93ppwq2jlynpf4vsbd30-nextcloud-15.0.8\/cron.php","line":41,"args":["\/nix\/store\/9c58nxa9mzzg93ppwq2jlynpf4vsbd30-nextcloud-15.0.8\/lib\/base.php"],"function":"require_once"}],"File":"\/nix\/store\/9c58nxa9mzzg93ppwq2jlynpf4vsbd30-nextcloud-15.0.8\/lib\/base.php","Line":277,"CustomMessage":"--"}
Then you run into [1]