nix-config/hosts/c3d2-web/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

215 lines
5.8 KiB
Nix
Raw Normal View History

2023-03-09 21:47:10 +01:00
{ config, hostRegistry, lib, pkgs, ... }:
2021-10-06 02:55:30 +02:00
let
webroot = "/var/www";
in
{
microvm = {
vcpu = 4;
mem = 2 * 1024; # drone-ssh-runner clones the git repo which requires some RAM
2022-06-18 02:42:41 +02:00
};
c3d2.deployment = {
# /tmp is to small for drone to clone the repo even with depth
2023-02-21 00:14:56 +01:00
mounts = lib.mkOptionDefault [ "tmp" ];
server = "server10";
};
system.stateVersion = "22.05";
2021-10-06 02:55:30 +02:00
networking.hostName = "c3d2-web";
2022-03-04 21:56:34 +01:00
networking.firewall.allowedTCPPorts = [
2022-12-11 02:07:56 +01:00
# telme10
23
# gemini
2022-03-04 21:56:34 +01:00
1965
];
2021-10-06 02:55:30 +02:00
security.acme.certs = {
2023-01-30 00:00:23 +01:00
# agate cannot load modern crypto like "ec256" keys
"www.c3d2.de".keyType = "rsa4096";
};
2021-10-06 02:55:30 +02:00
services.nginx = {
enable = true;
virtualHosts = {
"www.c3d2.de" = {
default = true;
serverAliases = [
"c3d2.de"
2022-04-25 11:02:17 +02:00
"c3dd.de" "www.c3dd.de" "openpgpkey.c3d2.de"
2021-10-06 02:55:30 +02:00
"cccdd.de" "www.cccdd.de"
"dresden.ccc.de" "www.dresden.ccc.de"
2022-03-10 16:25:04 +01:00
"netzbiotop.org" "www.netzbiotop.org"
2021-10-06 02:55:30 +02:00
];
2021-10-06 16:43:36 +02:00
enableACME = true;
forceSSL = true;
2021-10-06 02:55:30 +02:00
root = "${webroot}/c3d2";
extraConfig = ''
2021-10-06 16:43:36 +02:00
index portal.html index.html;
'';
2021-10-06 02:55:30 +02:00
locations = {
2022-12-02 02:11:16 +01:00
# Mastodon
2023-03-25 16:05:01 +01:00
"~ ^/.well-known/webfinger".return = "301 https://c3d2.social/.well-known/webfinger?resource=acct%3ac3d2%40c3d2.social";
2022-12-02 02:11:16 +01:00
# Matrix
"~ ^/.well-known/matrix/server" = {
return = "200 '{\"m.server\": \"matrix.c3d2.de:443\"}'";
extraConfig = ''
2023-07-24 21:30:18 +02:00
default_type application/json;
'';
};
"~ ^/.well-known/matrix/client" = {
return = "200 '{\"m.homeserver\": {\"base_url\": \"https://matrix.c3d2.de\"}}'";
extraConfig = ''
2023-07-24 21:30:18 +02:00
default_type application/json;
add_header "Access-Control-Allow-Origin" *;
'';
};
2021-10-06 02:55:30 +02:00
# SpaceAPI
"/status.png".proxyPass = "http://[${hostRegistry.spaceapi.ip6}]:3000/status.png";
"/spaceapi.json".proxyPass = "http://[${hostRegistry.spaceapi.ip6}]:3000/spaceapi.json";
2022-04-28 13:52:58 +02:00
2022-12-11 01:38:05 +01:00
# WKD: Web Key Directory for PGP Keys
2023-03-25 16:05:01 +01:00
"~ ^/openpgp" = {
2022-04-28 13:52:58 +02:00
extraConfig = ''
autoindex off;
2022-05-31 15:38:30 +02:00
default_type "application/octet-stream";
add_header Access-Control-Allow-Origin "* always";
2022-04-28 13:52:58 +02:00
'';
};
2021-10-06 02:55:30 +02:00
};
};
"datenspuren.de" = {
serverAliases = [
"www.datenspuren.de"
2021-10-06 16:43:36 +02:00
"ds.c3d2.de" "datenspuren.c3d2.de"
];
2021-10-06 16:43:36 +02:00
enableACME = true;
forceSSL = true;
root = "${webroot}/c3d2/datenspuren";
extraConfig = ''
index index.html;
rewrite ^/$ /2023/ redirect;
'';
# Mastodon
2023-03-25 16:05:01 +01:00
locations."~ ^/.well-known/webfinger".return = "301 https://c3d2.social/.well-known/webfinger?resource=acct%3adatenspuren%40c3d2.social";
};
2021-10-06 16:43:36 +02:00
"autotopia.c3d2.de" = {
enableACME = true;
forceSSL = true;
root = "${webroot}/c3d2/autotopia";
extraConfig = ''
index index.html;
rewrite ^/$ /2020/ redirect;
'';
};
# temporary redirects for outdated domains
"dezentrale-jahresendveranstaltungen.fyi" = {
serverAliases = [
"rc3.c3d2.de"
"www.dezentrale-jahresendveranstaltungen.fyi"
];
enableACME = true;
forceSSL = true;
2023-03-25 16:04:23 +01:00
locations."/".return = "301 https://datenspuren.de";
};
2021-10-06 02:55:30 +02:00
};
};
2022-03-04 21:56:34 +01:00
# Gemini server
services.agate = {
2022-03-04 21:56:34 +01:00
enable = true;
addresses = [
# sysctl net.ipv6.bindv6only = 0
"[::]:1965"
];
certificatesDir = "/var/lib/agate/certificates";
2023-07-24 21:30:28 +02:00
contentDir = "/var/www/gemini";
language = "de";
};
2022-12-11 02:07:56 +01:00
2023-06-23 18:13:03 +02:00
systemd = {
packages = with pkgs; [ telme10 ];
services = {
# lets agate access the tls certs
agate = {
requires = [ "agate-keys.service" ];
after = [ "agate-keys.service" ];
serviceConfig = {
Group = "keys";
};
2023-01-30 00:00:23 +01:00
};
2023-06-23 18:13:03 +02:00
agate-keys = {
path = with pkgs; [ openssl ];
script =
let
stateDir = "/var/lib/agate/certificates";
in
''
mkdir -p ${stateDir}
openssl x509 \
-in /var/lib/acme/www.c3d2.de/cert.pem \
-out ${stateDir}/cert.der \
-outform DER
openssl rsa \
-in /var/lib/acme/www.c3d2.de/key.pem \
-out ${stateDir}/key.der \
-outform DER
chown root:keys ${stateDir}/*
chmod 0640 ${stateDir}/*
'';
serviceConfig = {
Type = "oneshot";
};
};
telme10 = {
serviceConfig.AmbientCapabilities = "CAP_NET_BIND_SERVICE";
2023-01-30 00:00:23 +01:00
};
};
2023-06-23 18:13:03 +02:00
sockets.telme10.wantedBy = [ "sockets.target" ];
2022-03-04 21:56:34 +01:00
};
2021-10-06 02:55:30 +02:00
users = {
groups = {
c3d2-web = { };
telme10 = { };
};
users = {
c3d2-web = {
group = "c3d2-web";
home = "/var/lib/c3d2-web";
2023-01-30 00:00:23 +01:00
isSystemUser = true;
openssh.authorizedKeys.keys = [
2023-03-23 01:31:32 +01:00
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHIkIN1gi5cX2wV2WuNph/QzVK7vvYkvqnR/P69s36mZ drone@c3d2"
2023-01-30 00:00:23 +01:00
];
packages = with pkgs; [
libxslt
libxml2
rsync
gnumake
];
# otherwise the the drone ssh runner cannot log in
useDefaultShell = true;
};
telme10 = {
isSystemUser = true;
group = "telme10";
};
};
2022-12-11 02:07:56 +01:00
};
2022-12-04 08:53:28 +01:00
systemd.tmpfiles.rules = with config.users.users.c3d2-web; [
"d ${webroot}/c3d2 0755 c3d2-web ${group} -"
2022-12-26 23:14:54 +01:00
"d ${config.services.agate.contentDir} 0755 c3d2-web ${group} -"
2022-12-04 08:53:28 +01:00
"d ${home} 0700 c3d2-web ${group} -"
2021-10-06 02:55:30 +02:00
];
2022-12-26 23:14:54 +01:00
sops = {
defaultSopsFile = ./secrets.yaml;
secrets."c3d2-web/gitea-token".owner = "c3d2-web";
};
2021-10-06 02:55:30 +02:00
}