Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
8d107286a9 |
|||
|
5b44c4516c |
|||
|
a28f7a5848 |
|||
|
bff3401ada |
|||
|
668f2ef4d8 |
|||
|
37df75b8cb |
|||
|
2a8f0b0564 |
23 changed files with 137 additions and 186 deletions
18
.sops.yaml
Normal file
18
.sops.yaml
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
keys:
|
||||||
|
- &admin_age_fi age1tf38ae8yzzzmtjp5cjyemf0a8cksq62dz0x0hsntyhsjk5pq6s6q3v9nm7
|
||||||
|
- &host_age_coturn age1vnrtarxwmqxflh2sxe2s49ldfzkve268hx62x4ltv38h3emv8dqspu028l
|
||||||
|
- &host_age_ikiwiki age1st5axcrn2s09effsjp6gl89rnwd967y007pzpzamlqydrpf7yeeqjwtnx0
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: config/hosts/coturn/.*
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *admin_age_fi
|
||||||
|
- *host_age_coturn
|
||||||
|
- path_regex: config/hosts/ikiwiki/.*
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *admin_age_fi
|
||||||
|
- *host_age_ikiwiki
|
||||||
|
stores:
|
||||||
|
yaml:
|
||||||
|
indent: 2
|
||||||
|
|
@ -35,6 +35,7 @@
|
||||||
parted
|
parted
|
||||||
tmux
|
tmux
|
||||||
nano
|
nano
|
||||||
|
ssh-to-age
|
||||||
tcpdump
|
tcpdump
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
min-port = 49200;
|
min-port = 49200;
|
||||||
max-port = 49500;
|
max-port = 49500;
|
||||||
use-auth-secret = true;
|
use-auth-secret = true;
|
||||||
static-auth-secret-file = "/secrets/static-auth-secret.secret";
|
static-auth-secret-file = "/run/secrets/static-auth-secret";
|
||||||
realm = "turn.nekover.se";
|
realm = "turn.nekover.se";
|
||||||
cert = "${config.security.acme.certs."turn.nekover.se".directory}/fullchain.pem";
|
cert = "${config.security.acme.certs."turn.nekover.se".directory}/fullchain.pem";
|
||||||
pkey = "${config.security.acme.certs."turn.nekover.se".directory}/key.pem";
|
pkey = "${config.security.acme.certs."turn.nekover.se".directory}/key.pem";
|
||||||
|
|
@ -42,4 +42,11 @@
|
||||||
total-quota=1200
|
total-quota=1200
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sops.secrets."static-auth-secret" = {
|
||||||
|
mode = "0440";
|
||||||
|
owner = "turnserver";
|
||||||
|
group = "turnserver";
|
||||||
|
restartUnits = [ "coturn.service" ];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,5 +4,6 @@
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./acme.nix
|
./acme.nix
|
||||||
./coturn.nix
|
./coturn.nix
|
||||||
|
./sops.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{ keyCommandEnv,... }:
|
|
||||||
{
|
|
||||||
deployment.keys."static-auth-secret.secret" = {
|
|
||||||
keyCommand = keyCommandEnv ++ [ "pass" "coturn/static-auth-secret" ];
|
|
||||||
destDir = "/secrets";
|
|
||||||
user = "turnserver";
|
|
||||||
group = "turnserver";
|
|
||||||
permissions = "0640";
|
|
||||||
uploadAt = "pre-activation";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
25
config/hosts/coturn/secrets.yaml
Normal file
25
config/hosts/coturn/secrets.yaml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
static-auth-secret: ENC[AES256_GCM,data:af5cjUSeiCEtYki85h+XoJW5FKY4X18i6zOBZnH64Ju/LwA/yUemA8co17TG5cQnc/sw1pz6LySL2DOq/Gj42g==,iv:Yne84/VLN0jCSulA5OQ0UKbQWkqWBmHYogDuAngAp48=,tag:wJ/4yGnbypjTo/akV3P9ZA==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLMXRScDR1NzhzZGRXYUZQ
|
||||||
|
ZGpRYUlOUWZTVHQvdUlrSG5SRWM2ME9sdUVZCldCZkZ0SXdqUjBVNlRnckg3N0dS
|
||||||
|
S0s2NkRnQys2SGJKSTdiUWlnbTg1dkEKLS0tIGthb0FESjAyMjlEbnV4S0lPOHda
|
||||||
|
S1ZBOWdTSmNRQXMvUGJnd05sK1Q2Qk0KHseEBDVLeSWHdgrYyITRuJyp3orrjwwS
|
||||||
|
04ORMniHR7ymHzRPvm3oX/jkFD0iJEmk8clgm/Gcn2AQ7xXeJO7Vnw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1tf38ae8yzzzmtjp5cjyemf0a8cksq62dz0x0hsntyhsjk5pq6s6q3v9nm7
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmemxWRnFLMFVEcVZCb3BT
|
||||||
|
MStWU21kcnF5enpleWt3dFdaMHo3RzJGaENNClU2M2tmdE0zd2pXWUJHQkV5Mkhi
|
||||||
|
a0lIbHJmWDN6UXhVeTZId3RhcEd5TWcKLS0tIFRlSUNQN0pGYmtiOGxJS0pJY0tQ
|
||||||
|
YjFzS205QklRZWdPbklIRzVzbFFPT2sKCXra+DUchbomy9pe2HJAbhAF1mstgUcv
|
||||||
|
NalettWmuLXe2B0WjC9fAy2AAJS6kysEbUh960suzSPLTqTce0MGfA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1vnrtarxwmqxflh2sxe2s49ldfzkve268hx62x4ltv38h3emv8dqspu028l
|
||||||
|
lastmodified: "2026-05-16T23:13:15Z"
|
||||||
|
mac: ENC[AES256_GCM,data:PxX20JAaYhj3DE1KjakVmVucL7jjZU0vh5vnSNmKLgqedJiV2ZqEXpF4s1WPgYTY723aLiWDLw/8kTF/VmvMs8zOdGSkIhojWIWFE6I2yq1MjlawXuUhGpe6C1XGQ+w0KTqzyJLxyIsUSH24GqPHmLRMStE7bYdr0a4lRBHEyqE=,iv:6tXoqhG1XqDAz4SZSIxFCi01Be76/dV4vFPwv3lkcps=,tag:ytLoh7gJ+Iuqv5AwhDElrw==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.13.0
|
||||||
6
config/hosts/coturn/sops.nix
Normal file
6
config/hosts/coturn/sops.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
sops = {
|
||||||
|
defaultSopsFile = ./secrets.yaml;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
boot = {
|
|
||||||
loader.grub = {
|
|
||||||
enable = true;
|
|
||||||
device = "/dev/vda";
|
|
||||||
};
|
|
||||||
|
|
||||||
binfmt.emulatedSystems = [
|
|
||||||
"armv6l-linux"
|
|
||||||
"armv7l-linux"
|
|
||||||
"aarch64-linux"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
hostName = "hydra";
|
|
||||||
firewall = {
|
|
||||||
enable = true;
|
|
||||||
allowedTCPPorts = [ 8443 ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.builder = {
|
|
||||||
isNormalUser = true;
|
|
||||||
openssh.authorizedKeys.keys = [
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK/plZfxF/RtB+pJsUYx9HUgRcB56EoO0uj+j3AGzZta root@cherry"
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKeIiHkHA5c6/jZx+BB28c5wchdzlFI7R1gbvNmPyoOg root@kiara"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
nix = {
|
|
||||||
settings = {
|
|
||||||
trusted-users = [ "builder" ];
|
|
||||||
allowed-uris = "http:// https://";
|
|
||||||
};
|
|
||||||
buildMachines = [
|
|
||||||
{
|
|
||||||
hostName = "localhost";
|
|
||||||
systems = [
|
|
||||||
"x86_64-linux"
|
|
||||||
"armv6l-linux"
|
|
||||||
"armv7l-linux"
|
|
||||||
"aarch64-linux"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
system.stateVersion = "23.05";
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./configuration.nix
|
|
||||||
./hydra.nix
|
|
||||||
./nix-serve.nix
|
|
||||||
./nginx.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services.hydra = {
|
|
||||||
enable = true;
|
|
||||||
hydraURL = "https://hydra.nekover.se";
|
|
||||||
listenHost = "localhost";
|
|
||||||
port = 3001;
|
|
||||||
useSubstitutes = true;
|
|
||||||
notificationSender = "hydra@robot.grzb.de";
|
|
||||||
extraConfig = "
|
|
||||||
binary_cache_public_uri = https://nix-cache.nekover.se
|
|
||||||
";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services.nginx = {
|
|
||||||
enable = true;
|
|
||||||
virtualHosts = {
|
|
||||||
"hydra.nekover.se" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME = true;
|
|
||||||
listen = [{
|
|
||||||
addr = "0.0.0.0";
|
|
||||||
port = 80;
|
|
||||||
}];
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:3001";
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
listen 0.0.0.0:8443 http2 ssl proxy_protocol;
|
|
||||||
|
|
||||||
set_real_ip_from 10.202.41.100; # IPv4 from web-public-2
|
|
||||||
set_real_ip_from 10.203.10.3; # IPv6 from valkyrie
|
|
||||||
real_ip_header proxy_protocol;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
"nix-cache.nekover.se" = {
|
|
||||||
forceSSL = true;
|
|
||||||
enableACME = true;
|
|
||||||
listen = [ {
|
|
||||||
addr = "0.0.0.0";
|
|
||||||
port = 80;
|
|
||||||
}];
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:5005";
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
listen 0.0.0.0:8443 http2 ssl proxy_protocol;
|
|
||||||
|
|
||||||
set_real_ip_from 10.202.41.100; # IPv4 from web-public-2
|
|
||||||
set_real_ip_from 10.203.10.3; # IPv6 from valkyrie
|
|
||||||
real_ip_header proxy_protocol;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services.nix-serve = {
|
|
||||||
enable = true;
|
|
||||||
port = 5005;
|
|
||||||
bindAddress = "localhost";
|
|
||||||
secretKeyFile = "/secrets/signing-key.secret";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{ keyCommandEnv, ... }:
|
|
||||||
{
|
|
||||||
deployment.keys."signing-key.secret" = {
|
|
||||||
keyCommand = keyCommandEnv ++ [ "pass" "hydra/signing-key" ];
|
|
||||||
destDir = "/secrets";
|
|
||||||
user = "root";
|
|
||||||
group = "root";
|
|
||||||
permissions = "0640";
|
|
||||||
uploadAt = "pre-activation";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -4,5 +4,6 @@
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
./ikiwiki.nix
|
./ikiwiki.nix
|
||||||
./nginx.nix
|
./nginx.nix
|
||||||
|
./sops.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ in
|
||||||
tryFiles = "$uri $uri/ =404";
|
tryFiles = "$uri $uri/ =404";
|
||||||
};
|
};
|
||||||
"~ .cgi" = {
|
"~ .cgi" = {
|
||||||
basicAuthFile = "/secrets/ikiwiki-auth-file.secret";
|
basicAuthFile = "/run/secrets/auth_file";
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
gzip off;
|
gzip off;
|
||||||
fastcgi_pass unix:${config.services.fcgiwrap.instances."ikiwiki".socket.address};
|
fastcgi_pass unix:${config.services.fcgiwrap.instances."ikiwiki".socket.address};
|
||||||
|
|
@ -45,4 +45,11 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sops.secrets."auth_file" = {
|
||||||
|
mode = "0440";
|
||||||
|
owner = "nginx";
|
||||||
|
group = "nginx";
|
||||||
|
restartUnits = [ "nginx.service" ];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
{ keyCommandEnv, ... }:
|
|
||||||
{
|
|
||||||
deployment.keys."ikiwiki-auth-file.secret" = {
|
|
||||||
keyCommand = keyCommandEnv ++ [ "pass" "ikiwiki/auth-file" ];
|
|
||||||
destDir = "/secrets";
|
|
||||||
user = "nginx";
|
|
||||||
group = "nginx";
|
|
||||||
permissions = "0640";
|
|
||||||
uploadAt = "pre-activation";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
25
config/hosts/ikiwiki/secrets.yaml
Normal file
25
config/hosts/ikiwiki/secrets.yaml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
auth_file: ENC[AES256_GCM,data:5/uT1sIOI95LNA9YFWh3I9J2PCZmz/J38YxVsKVWFHfJdZUOQpSW6ekjX7StP/svtv6Tp0AonnvcKfRcyPYn,iv:NKdWae+EihasTMV24Hk+dKJG8032mWu+RWItWs0b6RE=,tag:WBM6pXlKaDXOMnBWGBLJWg==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArNDZLcEFGRHczMHg3S0w3
|
||||||
|
eTNvNGI5TXBWTTc1eXAzZStlSmZTQ3NkdTA4CmlYVEF1NWhldVZuZmwzTUU0NG5j
|
||||||
|
UFhvU3Q3Q1BvVHhrODJWc296UUo0TmMKLS0tIFFlUGRYVDNNYm40cXhlZ004eFk5
|
||||||
|
b3BnLzBjZFpjVDN2clZaTGlWV29NVUEKsdK4V5Og+bK26Gl6HTkOBtFrHfr1RFYu
|
||||||
|
zWNGQ3skkvATO/ypa0zFf3+qnupCTTO5emwscoRK8ZZFVgSswdnbIA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1tf38ae8yzzzmtjp5cjyemf0a8cksq62dz0x0hsntyhsjk5pq6s6q3v9nm7
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPOUJXWW95OXlEZFFwbHlp
|
||||||
|
RzJJMDFJU2pUTjltZ1JaWjE5c0xPY0hvNUdZCk5uWk9kdlRWNTNVUUVmT3VVeE9j
|
||||||
|
ajNNeVlZcEw4WFdqZ2QwTXl2MlhVZ2cKLS0tIFVVUXJtWkhtREFsdXp5ODZkOTA1
|
||||||
|
b1h3THFYSU1yblM0WmdxTUVtZG1OYVUK5tmcOX+jOdbSD1YCPqcAeoGF8ny61lWY
|
||||||
|
xwguejMeVZ/pCjO/qf3tb+MUlInPMXva59FelGd3nz6cbVqbeWtxSQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1st5axcrn2s09effsjp6gl89rnwd967y007pzpzamlqydrpf7yeeqjwtnx0
|
||||||
|
lastmodified: "2026-05-16T22:13:21Z"
|
||||||
|
mac: ENC[AES256_GCM,data:McAN1DueAhDBAY8kloB5l8M0pLIeswtnCxBtMYFyzBaY2Z43gNetBwdpzs5sL4nEmAZGPJ9AjXJVSmjb1tOn3BF8X5n6/9F7DzvHT7ukpIjumGC0KeB0QfaIGgKJyo7koISIVlGFZAwgcf1fQwaKZsYzfOGelj7UNrzFCjArK+Y=,iv:oZUmzcEr08jROw24J2fXQ4EjEJH3vzYysdy51vEtUNM=,tag:QJjNb/YvuZrZtQD9QE1Z3g==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.13.0
|
||||||
6
config/hosts/ikiwiki/sops.nix
Normal file
6
config/hosts/ikiwiki/sops.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
sops = {
|
||||||
|
defaultSopsFile = ./secrets.yaml;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -41,7 +41,6 @@
|
||||||
element-admin.nekover.se 10.202.41.100:8443;
|
element-admin.nekover.se 10.202.41.100:8443;
|
||||||
fi.nekover.se 10.202.41.125:8443;
|
fi.nekover.se 10.202.41.125:8443;
|
||||||
git.nekover.se 10.202.41.106:8443;
|
git.nekover.se 10.202.41.106:8443;
|
||||||
hydra.nekover.se 10.202.41.121:8443;
|
|
||||||
id.nekover.se 10.202.41.124:8443;
|
id.nekover.se 10.202.41.124:8443;
|
||||||
mas.nekover.se 10.202.41.112:8443;
|
mas.nekover.se 10.202.41.112:8443;
|
||||||
matrix.nekover.se 10.202.41.112:8443;
|
matrix.nekover.se 10.202.41.112:8443;
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@
|
||||||
element-admin.nekover.se 10.202.41.100:8443;
|
element-admin.nekover.se 10.202.41.100:8443;
|
||||||
fi.nekover.se 10.202.41.125:8443;
|
fi.nekover.se 10.202.41.125:8443;
|
||||||
git.nekover.se 10.202.41.106:8443;
|
git.nekover.se 10.202.41.106:8443;
|
||||||
hydra.nekover.se 10.202.41.121:8443;
|
|
||||||
id.nekover.se 10.202.41.124:8443;
|
id.nekover.se 10.202.41.124:8443;
|
||||||
mas.nekover.se 10.202.41.112:8443;
|
mas.nekover.se 10.202.41.112:8443;
|
||||||
matrix.nekover.se 10.202.41.112:8443;
|
matrix.nekover.se 10.202.41.112:8443;
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue