77 lines
3.1 KiB
Nix
77 lines
3.1 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
let
|
|
# ── Adjust these to your NAS settings ──────────────────────────────────────────
|
|
nasServer = "192.168.1.100"; # your NAS IP or hostname
|
|
nasExportPath = "/export/docker-volumes"; # path on the NAS
|
|
nasMountPoint = "/mnt/nas"; # where to mount inside VM
|
|
|
|
# ── Where we drop your Compose file and run it ────────────────────────────────
|
|
composeDir = "/etc/docker-compose-app";
|
|
composeText = lib.readFile ./docker-compose.yml;
|
|
in {
|
|
##############################################################################
|
|
# A) NETWORKING
|
|
# (If you want DHCP, remove this block and let cloud-init assign an IP.)
|
|
##############################################################################
|
|
# networking.interfaces.enp0s25 = {
|
|
# useDHCP = false;
|
|
# ipv4.addresses = [{
|
|
# address = "192.168.1.50";
|
|
# prefixLength = 24;
|
|
# }];
|
|
# ipv4.gateway = "192.168.1.1";
|
|
# # optional: ipv4.dns = [ "1.1.1.1" "8.8.8.8" ];
|
|
# };
|
|
|
|
##############################################################################
|
|
# B) MOUNT YOUR NAS VIA NFS
|
|
##############################################################################
|
|
# fileSystems."${nasMountPoint}" = {
|
|
# device = "${nasServer}:${nasExportPath}";
|
|
# fsType = "nfs";
|
|
# options = [ "defaults" "nofail" "x-systemd.requires=network-online.target" ];
|
|
# };
|
|
# fileSystems."${nasMountPoint}".requiredForBoot = false;
|
|
|
|
##############################################################################
|
|
# C) INSTALL DOCKER & DOCKER-COMPOSE
|
|
##############################################################################
|
|
environment.systemPackages = with pkgs; [
|
|
docker
|
|
docker-compose
|
|
];
|
|
services.docker.enable = true;
|
|
|
|
##############################################################################
|
|
# D) DROP IN YOUR docker-compose.yml
|
|
##############################################################################
|
|
# systemd.tmpfiles.rules = [
|
|
# # Ensure directory exists before we write the file.
|
|
# "D! ${composeDir} 0755 root root - -"
|
|
# ];
|
|
# environment.etc."docker-compose-app/docker-compose.yml".text = composeText;
|
|
|
|
##############################################################################
|
|
# E) RUN DOCKER-COMPOSE AS A SYSTEMD SERVICE
|
|
##############################################################################
|
|
# systemd.services.dockerComposeApp = {
|
|
# description = "Auto-start Docker-Compose stack for home server";
|
|
# after = [ "network-online.target" "docker.service" ];
|
|
# wants = [ "network-online.target" "docker.service" ];
|
|
|
|
# serviceConfig = {
|
|
# WorkingDirectory = composeDir;
|
|
# ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f ${composeDir}/docker-compose.yml up";
|
|
# ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f ${composeDir}/docker-compose.yml down";
|
|
# Restart = "always";
|
|
# RestartSec = 10;
|
|
# };
|
|
|
|
# wantedBy = [ "multi-user.target" ];
|
|
# };
|
|
|
|
|
|
|
|
|
|
}
|