- arion-compose: project.name (required) + docker-compose.volumes (correct option, was docker-compose.raw.volumes which didn't exist) - syncthing: tmpfiles for /var/lib/syncthing (configDir) owned by mikl, fixes 'mkdir /var/lib/syncthing: permission denied' when running as non-default user
72 lines
3.2 KiB
Nix
72 lines
3.2 KiB
Nix
# heather — Syncthing (sync + relay) как NixOS-сервис.
|
||
#
|
||
# Заменяет syncthing@michaotic + strelaysrv с iscg-dev.
|
||
#
|
||
# - services.syncthing: sync daemon. dataDir = /srv/syncthing (синкается на
|
||
# устройства poppy/телефон). configDir = /var/lib/syncthing (state syncthing).
|
||
# - relayOptions.enable: strelaysrv, public relay на :22067 (relay) / :22070
|
||
# (status). Для устройств за NAT.
|
||
#
|
||
# GUI: 127.0.0.1:8384 (только localhost), Caddy проксирует на sync.iscg.dev
|
||
# с basicauth сверху (см. caddy.nix). Пароль GUI включить отдельно (syncthing
|
||
# сам требует при прослушивании не-localhost, но на localhost опционален —
|
||
# Caddy даёт внешний слой auth).
|
||
#
|
||
# /srv/syncthing/herbarium/ — silverbullet space (bind mount в контейнер,
|
||
# см. arion-compose.nix). syncthing sync'ает весь /srv/syncthing включая
|
||
# herbarium на устройства.
|
||
|
||
{ config, pkgs, lib, ... }:
|
||
{
|
||
services.syncthing = {
|
||
enable = true;
|
||
user = "mikl";
|
||
group = "users";
|
||
|
||
# Что синкается (файлы). /srv — FHS для service data.
|
||
dataDir = "/srv/syncthing";
|
||
|
||
# State syncthing (config, certs, index). Не синкается.
|
||
configDir = "/var/lib/syncthing";
|
||
|
||
# Открывает firewall порты 22000 (sync). firewall выключен на heather
|
||
# (полагаемся на YC SG), но флаг для консистентности.
|
||
openDefaultPorts = true;
|
||
|
||
# GUI только на localhost — Caddy проксирует снаружи.
|
||
guiAddress = "127.0.0.1:8384";
|
||
|
||
# НЕ override devices/folders из nix — конфигурим через GUI/API.
|
||
# overrideDevices/overrideFolders = false (default) = nix не трогает то,
|
||
# что добавлено через GUI. Иначе nix бы их стирал при rebuild.
|
||
overrideDevices = false;
|
||
overrideFolders = false;
|
||
};
|
||
|
||
# strelaysrv: public relay для syncthing-устройств за NAT.
|
||
# Порты 22067 (relay) и 22070 (status).
|
||
# NixOS-модуля syncthing не управляет strelaysrv — поднимаем вручную через
|
||
# systemd, пакет syncthing-relay (strelaysrv binary).
|
||
systemd.services.syncthing-relay = {
|
||
description = "Syncthing Relay Server (strelaysrv)";
|
||
after = [ "network.target" ];
|
||
wantedBy = [ "multi-user.target" ];
|
||
serviceConfig = {
|
||
ExecStart = "${pkgs.syncthing-relay}/bin/strelaysrv";
|
||
Restart = "on-failure";
|
||
User = "mikl";
|
||
Group = "users";
|
||
# strelaysrv пишет ключи/статус в CWD — рабочая директория.
|
||
WorkingDirectory = "/var/lib/syncthing-relay";
|
||
StateDirectory = "syncthing-relay";
|
||
};
|
||
};
|
||
|
||
# /srv/syncthing создаём, права mikl:users (syncthing работает от mikl).
|
||
# /var/lib/syncthing (configDir) — тоже под mikl, иначе syncthing не может
|
||
# mkdir (StateDirectory модуля срабатывает не всегда при не-default user).
|
||
systemd.tmpfiles.rules = [
|
||
"d /srv/syncthing 0755 mikl users -"
|
||
"d /var/lib/syncthing 0755 mikl users -"
|
||
];
|
||
}
|