heather: replace k3s with docker+arion+caddy+syncthing

- remove k3s.nix (1.3GB overhead unjustified for single-node)
- add docker.nix (docker + arion CLI, mikl in docker group)
- add caddy.nix (edge proxy, TLS via ACME staging, host-based routing)
- add syncthing.nix (sync daemon + strelaysrv via systemd, /srv/syncthing)
- add arion-compose.nix (forgejo first, others stubbed as TODO)
- add arion flake input + nixos module
- default.nix: wire up arion project as systemd service (serviceName=heather)

Architecture: Caddy (host) terminates TLS, routes to host services (syncthing)
and docker containers (arion, 127.0.0.1:PORT). Named volumes everywhere except
silverbullet (bind /srv/syncthing/herbarium).
This commit is contained in:
mikl 2026-07-12 12:23:05 +03:00
commit 220d1f651c
8 changed files with 412 additions and 43 deletions

View file

@ -1,4 +1,4 @@
# heather — k3s single-node cluster на YC (NixOS 25.11, собирается как qcow2-образ)
# heather — сервер на Yandex Cloud (NixOS 26.11).
# https://git.iscg.dev/mikl/nix-config
#
# Перенесено из muscari (переименование 2026-07-11).
@ -6,21 +6,48 @@
# Образ NixOS собирается как qcow2 (см. ./image.nix, make-disk-image.nix) и
# заливается как boot disk в YC. НЕ через nixos-anywhere — kexec на YC хрупкий.
# См. memory/yandex-nixos-qcow2.md.
#
# Архитектура (2026-07-12, заменила k3s):
# Caddy (edge, TLS) → host-сервисы (syncthing) + docker-контейнеры (arion)
# Cilium/k3s выключены — overhead 1.3 GB был неоправдан для single-node.
# См. ./docker.nix, ./caddy.nix, ./syncthing.nix, ./arion-compose.nix.
{ config, pkgs, lib, ... }:
{
imports = [
./image.nix # YC guest profile + qcow2 build target (заменяет disk-config.nix)
./k3s.nix
./image.nix # YC guest profile + qcow2 build target
./docker.nix # docker + arion CLI (контейнеры)
./caddy.nix # edge proxy, TLS, роутинг по доменам
./syncthing.nix # sync + relay
];
# Arion-проект как systemd-сервис: arion-compose.nix → docker-compose → up.
# NB: settings — это модуль с imports, НЕ `import ./arion-compose.nix`.
virtualisation.arion.backend = "docker";
virtualisation.arion.projects.heather = {
serviceName = "heather"; # systemd: arion-heather.service
settings = {
imports = [ ./arion-compose.nix ];
};
};
networking = {
hostName = "heather";
# Firewall выключен в ./image.nix (полагаемся на YC Security Groups).
# Порты тут только для документации — реально открывает YC SG.
firewall.allowedTCPPorts = [
22 # SSH
80 # HTTP (Ingress через Traefik)
443 # HTTPS (Ingress через Traefik)
# 6443 не открываем — kubectl через SSH-туннель
22 # SSH
80 # HTTP (Caddy → redirect to HTTPS)
443 # HTTPS (Caddy, TLS termination)
2222 # forgejo git ssh (публично)
22000 # syncthing sync
22067 # strelaysrv (relay)
22070 # strelaysrv (status)
# jitsi (когда добавим): 3478, 5349, 10000/udp, 49152-65535/udp
];
firewall.allowedUDPPorts = [
22000 # syncthing sync (QUIC)
# jitsi: 10000 (jvb), 49152-65535 (RTP)
];
};
# useDHCP задаёт ./image.nix (mkDefault) — облачный профиль.
@ -47,4 +74,4 @@
# После первой установки 25.11 не трогаем (NixOS convention)
system.stateVersion = "25.11";
}
}