forked from mirrors_public/oddlama_nix-config
feat: add new host envoy for mail, switch disko to partlabel
This commit is contained in:
parent
303fbd5595
commit
289fcdd197
45 changed files with 302 additions and 154 deletions
30
hosts/envoy/acme.nix
Normal file
30
hosts/envoy/acme.nix
Normal file
|
@ -0,0 +1,30 @@
|
|||
{config, ...}: let
|
||||
inherit (config.repo.secrets.local) acme;
|
||||
in {
|
||||
age.secrets.acme-cloudflare-dns-token = {
|
||||
rekeyFile = ./secrets/acme-cloudflare-dns-token.age;
|
||||
mode = "440";
|
||||
group = "acme";
|
||||
};
|
||||
|
||||
age.secrets.acme-cloudflare-zone-token = {
|
||||
rekeyFile = ./secrets/acme-cloudflare-zone-token.age;
|
||||
mode = "440";
|
||||
group = "acme";
|
||||
};
|
||||
|
||||
security.acme = {
|
||||
acceptTerms = true;
|
||||
defaults = {
|
||||
inherit (acme) email;
|
||||
credentialFiles = {
|
||||
CF_DNS_API_TOKEN_FILE = config.age.secrets.acme-cloudflare-dns-token.path;
|
||||
CF_ZONE_API_TOKEN_FILE = config.age.secrets.acme-cloudflare-zone-token.path;
|
||||
};
|
||||
dnsProvider = "cloudflare";
|
||||
dnsPropagationCheck = true;
|
||||
reloadServices = ["nginx"];
|
||||
};
|
||||
wildcardDomains = acme.domains;
|
||||
};
|
||||
}
|
42
hosts/envoy/default.nix
Normal file
42
hosts/envoy/default.nix
Normal file
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
config,
|
||||
nodes,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../../modules/optional/hardware/hetzner-cloud.nix
|
||||
|
||||
../../modules
|
||||
../../modules/optional/initrd-ssh.nix
|
||||
../../modules/optional/zfs.nix
|
||||
|
||||
./acme.nix
|
||||
./fs.nix
|
||||
./net.nix
|
||||
];
|
||||
|
||||
boot.mode = "bios";
|
||||
|
||||
users.groups.acme.members = ["nginx"];
|
||||
wireguard.proxy-sentinel.firewallRuleForAll.allowedTCPPorts = [80 443];
|
||||
services.nginx.enable = true;
|
||||
services.nginx.recommendedSetup = true;
|
||||
|
||||
meta.promtail = {
|
||||
enable = true;
|
||||
proxy = "sentinel";
|
||||
};
|
||||
|
||||
# Connect safely via wireguard to skip authentication
|
||||
networking.hosts.${nodes.sentinel.config.wireguard.proxy-sentinel.ipv4} = [nodes.sentinel.config.networking.providedDomains.influxdb];
|
||||
meta.telegraf = {
|
||||
enable = true;
|
||||
scrapeSensors = false;
|
||||
influxdb2 = {
|
||||
domain = config.networking.providedDomains.influxdb;
|
||||
organization = "machines";
|
||||
bucket = "telegraf";
|
||||
node = "sire-influxdb";
|
||||
};
|
||||
};
|
||||
}
|
29
hosts/envoy/fs.nix
Normal file
29
hosts/envoy/fs.nix
Normal file
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (config.repo.secrets.local) disks;
|
||||
in {
|
||||
disko.devices = {
|
||||
disk = {
|
||||
main = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.main}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
grub = partGrub;
|
||||
bios = partBoot "512M";
|
||||
rpool = partLuksZfs disks.main "rpool" "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
zpool = with lib.disko.zfs; {
|
||||
rpool = mkZpool {datasets = impermanenceZfsDatasets;};
|
||||
};
|
||||
};
|
||||
|
||||
boot.loader.grub.devices = ["/dev/disk/by-id/${disks.main}"];
|
||||
}
|
38
hosts/envoy/net.nix
Normal file
38
hosts/envoy/net.nix
Normal file
|
@ -0,0 +1,38 @@
|
|||
{config, ...}: {
|
||||
networking.hostId = config.repo.secrets.local.networking.hostId;
|
||||
networking.domain = config.repo.secrets.global.domains.me;
|
||||
|
||||
boot.initrd.systemd.network = {
|
||||
enable = true;
|
||||
networks = {inherit (config.systemd.network.networks) "10-wan";};
|
||||
};
|
||||
|
||||
systemd.network.networks = {
|
||||
"10-wan" = let
|
||||
icfg = config.repo.secrets.local.networking.interfaces.wan;
|
||||
in {
|
||||
address = [
|
||||
icfg.hostCidrv4
|
||||
icfg.hostCidrv6
|
||||
];
|
||||
gateway = ["fe80::1"];
|
||||
routes = [
|
||||
{routeConfig = {Destination = "172.31.1.1";};}
|
||||
{
|
||||
routeConfig = {
|
||||
Gateway = "172.31.1.1";
|
||||
GatewayOnLink = true;
|
||||
};
|
||||
}
|
||||
];
|
||||
matchConfig.MACAddress = icfg.mac;
|
||||
networkConfig.IPv6PrivacyExtensions = "yes";
|
||||
linkConfig.RequiredForOnline = "routable";
|
||||
};
|
||||
};
|
||||
|
||||
networking.nftables.firewall.zones.untrusted.interfaces = ["wan"];
|
||||
|
||||
# Allow accessing influx
|
||||
wireguard.proxy-sentinel.client.via = "sentinel";
|
||||
}
|
BIN
hosts/envoy/secrets/acme-cloudflare-dns-token.age
Normal file
BIN
hosts/envoy/secrets/acme-cloudflare-dns-token.age
Normal file
Binary file not shown.
10
hosts/envoy/secrets/acme-cloudflare-zone-token.age
Normal file
10
hosts/envoy/secrets/acme-cloudflare-zone-token.age
Normal file
|
@ -0,0 +1,10 @@
|
|||
age-encryption.org/v1
|
||||
-> X25519 Y7J0KmGssDwytzJSMTKnb2qVfCBEl4nMiKeg4PDhbhM
|
||||
R+FV22jr0XcybGJk8Z2o40O5ptRK3NPgQOxJ7HlORho
|
||||
-> piv-p256 xqSe8Q AyC1XlhbGhbfUBn4gV56t48AazKi5Lt9H5BCOZqbTtOp
|
||||
s3mrvVrMZ/kTdUSjKyBWa5hUFL2fwL2xRo7UFF0AwP0
|
||||
-> Ao-grease vp@ m_b
|
||||
oV7D7L5dZtF75bJ6Ms0yZr92rENJmE4xKpdlBp4h40onYWv1Z17R2/bmygv5MD9+
|
||||
S7J25g3rxfk00fUOK8cwDcWyRtp4jQqcooJyrQ
|
||||
--- J/aXuudcbUAfU06R065fsvPTX2qZr0w0eZ9gI6I+McY
|
||||
vÂâ-##·¬=|Ú•˝-IÝR†·żÝn<§z´fÄ.\śő‘cU/OÓ 6÷¶ëĽ±�Üož’Ţ$ő¶8\Ň6E•ËeËí†n
|
1
hosts/envoy/secrets/host.pub
Normal file
1
hosts/envoy/secrets/host.pub
Normal file
|
@ -0,0 +1 @@
|
|||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHgdSxSAnqaIqpr7OhyaKXGfQLUWf2bkpyF2mSG01LVv
|
11
hosts/envoy/secrets/local.nix.age
Normal file
11
hosts/envoy/secrets/local.nix.age
Normal file
|
@ -0,0 +1,11 @@
|
|||
age-encryption.org/v1
|
||||
-> X25519 Iz/ZYzOsB5ONZTT2azO8HcfvwEdS8zjYv2a+gdSa6Rw
|
||||
3RvSD6jq4IKXOWmgFiLK0OgZkvrbRQZLqlYgiVMixAY
|
||||
-> piv-p256 xqSe8Q A4BW1CqEWMOdGkIjIqvXJrzC54BBaEbnhywgd1UA9gQf
|
||||
lRdaSMaW/xFvzBYk56T6ld64vrFS4EbQdcJJarOd2hE
|
||||
-> Xw[-grease ^u-qoTf JV
|
||||
7ht6GO0MH9xXNpmbVpi/NYiy27V0XHtE+qNmMqZSj0/rVtnYWMhm4Ezu+3Y
|
||||
--- EYikW64z1mfwwVgFevfGeo4Sp4994H8WnvbJ+RfxMnc
|
||||
Pðlðb wqÚZêÿÉÞœä9‚ÁÃí—Ô«:V†ål~(Þƒ¦#xÒ£V[ã|!óæccVn»%®kÊYðr;hS)g�gELÀ€‘wZAôJHµÚj~a´Ëö{®*ªC8·
|
||||
ábÓi!
˜ãÏ#â K4¶‡À/3Ð$I§c7’Uèÿ…Tš°j«×f€Ëj`LX0f•hO%~ª”¥*]Þc“Óñ¯›œÞR¤Aß0Øy¿0¤v¯²¨#{·CÙ.BqW-ÓÄÊÁž1WÂ7/jÈ”ã}!òÓãüçò/„¡öEb%Ô ƒ—št«q¼²!éùe>g€ó)Λd~Üð„¨yA
|
||||
‰ZŽá¼NÐÏß쟞mo–|„˜ÆrX˜Íˆº6T$¿~5ÜýýÍ‚Rj>û– zh•³•K�IeÀdä}›Nó zZñãšá¢e`e¦Ý�Äb~KÆÐ]hï1—ÇÉè½yF
|
|
@ -7,30 +7,15 @@
|
|||
in {
|
||||
disko.devices = {
|
||||
disk = {
|
||||
${disks.m2-ssd} = {
|
||||
m2-ssd = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
efi =
|
||||
partEfi "0%" "1GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}-part1";
|
||||
};
|
||||
swap =
|
||||
partSwap "1GiB" "17GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}-part2";
|
||||
};
|
||||
"rpool_${disks.m2-ssd}" =
|
||||
partLuksZfs disks.m2-ssd "rpool" "17GiB" "100%"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}-part3";
|
||||
};
|
||||
efi = partEfi "1G";
|
||||
swap = partSwap "16G";
|
||||
rpool = partLuksZfs disks.m2-ssd "rpool" "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -7,39 +7,24 @@
|
|||
in {
|
||||
disko.devices = {
|
||||
disk = {
|
||||
${disks.m2-ssd} = {
|
||||
m2-ssd = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
"rpool_${disks.m2-ssd}" =
|
||||
partLuksZfs disks.m2-ssd "rpool" "0%" "100%"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}-part1";
|
||||
};
|
||||
rpool = partLuksZfs disks.m2-ssd "rpool" "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
${disks.boot-ssd} = {
|
||||
boot-ssd = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.boot-ssd}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
efi =
|
||||
partEfi "0%" "8GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.boot-ssd}-part1";
|
||||
};
|
||||
swap =
|
||||
partSwap "8GiB" "100%"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.boot-ssd}-part2";
|
||||
};
|
||||
efi = partEfi "8G";
|
||||
swap = partSwap "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -7,30 +7,15 @@
|
|||
in {
|
||||
disko.devices = {
|
||||
disk = {
|
||||
${disks.main} = {
|
||||
main = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.main}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
grub =
|
||||
partGrub "0%" "1MiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.main}-part1";
|
||||
};
|
||||
bios =
|
||||
partEfi "1MiB" "512MiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.main}-part2";
|
||||
};
|
||||
"rpool_${disks.main}" =
|
||||
partLuksZfs disks.main "rpool" "512MiB" "100%"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.main}-part3";
|
||||
};
|
||||
grub = partGrub;
|
||||
bios = partBoot "512M";
|
||||
rpool = partLuksZfs disks.main "rpool" "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -8,28 +8,18 @@ in {
|
|||
disko.devices = {
|
||||
disk =
|
||||
{
|
||||
${disks.m2-ssd-1} = {
|
||||
m2-ssd-1 = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd-1}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
efi =
|
||||
partEfi "0%" "1GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd-1}-part1";
|
||||
};
|
||||
"rpool_${disks.m2-ssd-1}" =
|
||||
partLuksZfs disks.m2-ssd-1 "rpool" "1GiB" "100%"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd-1}-part2";
|
||||
};
|
||||
efi = partEfi "1G";
|
||||
rpool = partLuksZfs disks.m2-ssd-1 "rpool" "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
${disks.m2-ssd-2} = {
|
||||
m2-ssd-2 = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd-2}";
|
||||
content = lib.disko.content.luksZfs disks.m2-ssd-2 "rpool";
|
||||
|
|
|
@ -7,30 +7,15 @@
|
|||
in {
|
||||
disko.devices = {
|
||||
disk = {
|
||||
${disks.m2-ssd} = {
|
||||
m2-ssd = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
efi =
|
||||
partEfi "0%" "1GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}-part1";
|
||||
};
|
||||
swap =
|
||||
partSwap "1GiB" "17GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}-part2";
|
||||
};
|
||||
"rpool_${disks.m2-ssd}" =
|
||||
partLuksZfs disks.m2-ssd "rpool" "17GiB" "100%"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.m2-ssd}-part3";
|
||||
};
|
||||
efi = partEfi "1G";
|
||||
swap = partSwap "16G";
|
||||
rpool = partLuksZfs disks.m2-ssd "rpool" "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -7,30 +7,15 @@
|
|||
in {
|
||||
disko.devices = {
|
||||
disk = {
|
||||
${disks.mmc} = {
|
||||
mmc = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/${disks.mmc}";
|
||||
content = with lib.disko.gpt; {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
efi =
|
||||
partEfi "0%" "1GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.mmc}-part1";
|
||||
};
|
||||
swap =
|
||||
partSwap "1GiB" "9GiB"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.mmc}-part2";
|
||||
};
|
||||
"rpool_${disks.mmc}" =
|
||||
partLuksZfs disks.mmc "rpool" "9GiB" "100%"
|
||||
// {
|
||||
# FIXME: Needed because partlabels are 💩: https://github.com/nix-community/disko/issues/551
|
||||
device = "/dev/disk/by-id/${disks.mmc}-part3";
|
||||
};
|
||||
efi = partEfi "1G";
|
||||
swap = partSwap "8G";
|
||||
rpool = partLuksZfs disks.mmc "rpool" "100%";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue