The Holy Grail Nextcloud setup made easy by NixOS
Table of Contents
Nextcloud really is the central piece to most people’s self-hosted infrastructure.
Providing file synchronization, a web interface to navigate through them, calendar, contacts, tasks, kanban and webmail, it presents itself as a complete GSuite self-hosted alternative.
Hosting Nextcloud has become easier over time, thanks to its docker-compose example setups and to the Snap for use mostly on Ubuntu systems. However, having a faster and more optimized setup can take some effort on these platforms. Thankfully, on NixOS it’s not hard at all, as I’ll show you.
{ self, config, lib, pkgs, ... }:
{
services = {
nginx.virtualHosts = {
"cloud.example.com" = {
forceSSL = true;
enableACME = true;
};
"onlyoffice.example.com" = {
forceSSL = true;
enableACME = true;
};
};
nextcloud = {
enable = true;
hostName = "cloud.example.com";
# Need to manually increment with every major upgrade.
package = pkgs.nextcloud27;
# Let NixOS install and configure the database automatically.
database.createLocally = true;
# Let NixOS install and configure Redis caching automatically.
configureRedis = true;
# Increase the maximum file upload size to avoid problems uploading videos.
maxUploadSize = "16G";
https = true;
enableBrokenCiphersForSSE = false;
autoUpdateApps.enable = true;
extraAppsEnable = true;
extraApps = with config.services.nextcloud.package.packages.apps; {
# List of apps we want to install and are already packaged in
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/nextcloud/packages/nextcloud-apps.json
inherit calendar contacts mail notes onlyoffice tasks;
# Custom app installation example.
cookbook = pkgs.fetchNextcloudApp rec {
url =
"https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz";
sha256 = "sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI+eXDHnNSm1HDbP6M=";
};
};
config = {
overwriteProtocol = "https";
defaultPhoneRegion = "PT";
dbtype = "pgsql";
adminuser = "admin";
adminpassFile = "/path/to/nextcloud-admin-pass";
};
};
onlyoffice = {
enable = true;
hostname = "onlyoffice.example.com";
};
};
}
You may want to proceed with caution while setting up the OnlyOffice server, which will allow for Google Docs-like functionality on our Nextcloud instance, by having it only accessible inside your VPN or by setting the services.onlyoffice.jwtSecretFile
option if exposed to the public Internet.
With this snippet, a Nextcloud instance with a selection of pre-installed Apps, PostgreSQL as a database, Redis Caching and Let’s Encrypt certificates will be set up for you.
To connect to the OnlyOffice server, configure it appropriately in Administration settings > ONLYOFFICE > ONLYOFFICE Docs address.
Backups #
In this configuration, we need to persist the /var/lib/nextcloud
and /var/lib/postgresql
directories.
For backing up, you could copy /var/lib/nextcloud
to another computer and, for the database, dump it to a file and copy it to another computer as well, as described in the official Nextcloud documentation.
Conclusion #
Once again, NixOS proves itself as an amazing self-hosting platform.
Nextcloud, in its default configuration, is sometimes known for running slow. Thanks to NixOS, we’ve optimized its performance and that’s quite impactful, as it’s my most used self-hosted application. Having all of these apps running on Nextcloud has enabled me to move on from GSuite to a mostly autonomous and self-hosted infrastructure.
In the future, I look forward to being able to use Collabora/Nextcloud Office instead of OnlyOffice, as it’s more aligned with Nextcloud’s philosophical goals and hasn’t done suspicious decisions in the past.