Nextcloud On NixOS With Docker
2022-10-7The Nextcloud Docker container requires a network, a database, and the Nextcloud container itself. It took me a while to figure out how to set all of this up on Docker, so hopefully this is helpful.
This is the contents of my nextcloud.nix file. All of the data is saved on an external (encrypted) SSD, called /media.
{ config, pkgs, ... }:
{
# Network linker
system.activationScripts.NextcloudNetwork =
let
backend = config.virtualisation.oci-containers.backend;
backendBin = "${pkgs.${backend}}/bin/${backend}";
in
''
${backendBin} network create nextcloud-net --subnet 172.20.0.0/16 || true
'';
# Database
virtualisation.oci-containers.containers."nextcloud-db" = {
autoStart = true;
image = "mariadb:10.5";
cmd = [ "--transaction-isolation=READ-COMMITTED" "--binlog-format=ROW" ];
volumes = [
"nextcloud-db:/var/lib/mysql"
];
ports = [ "3306:3306" ];
environment = {
MYSQL_ROOT_PASSWORD = "nextcloud";
MYSQL_PASSWORD = "nextcloud";
MYSQL_DATABASE = "nextcloud";
MYSQL_USER = "nextcloud";
};
extraOptions = [ "--network=nextcloud-net" ];
};
# NextCloud
virtualisation.oci-containers.containers."nextcloud" = {
image = "nextcloud";
ports = [ "8080:80" ];
environment = {
MYSQL_PASSWORD = "nextcloud";
MYSQL_DATABASE = "nextcloud";
MYSQL_USER = "nextcloud";
MYSQL_HOST = "nextcloud-db";
};
dependsOn = [ "nextcloud-db" ];
volumes = [
"/media/Containers/Nextcloud/data:/var/www/html"
];
extraOptions = [ "--network=nextcloud-net" ];
};
}
Since that's in its own .nix file, we need to add it to the imports section of the /etc/nixos/configuration.nix, like so:
imports = [
./hardware-configuration.nix
# Docker containers
./containers/nextcloud.nix
];
That's it! Run sudo nixos-rebuild switch and, once it downloads and starts, you should have a running Nextcloud instance on your NixOS box!