refactor(eientei)!: migrate library configuration

This commit is contained in:
514fpv 2024-02-02 04:39:50 +08:00
parent d3dfa29add
commit 825a909f51
Signed by: koishi
SSH key fingerprint: SHA256:axz0uIzzY+5W19i7QOUuiw5LSqhKfCBKPf3L4xFRxLw
10 changed files with 52 additions and 103 deletions

11
spec/eientei/acme.nix Normal file
View file

@ -0,0 +1,11 @@
{
security.acme.certs = let
cloudflare = {
dnsProvider = "cloudflare";
credentialsFile = "/nix/persist/secret/cloudflare";
};
in {
"514fpv.io" = cloudflare;
".514fpv.io" = cloudflare // { domain = "*.514fpv.io"; };
};
}

59
spec/eientei/coturn.nix Normal file
View file

@ -0,0 +1,59 @@
{ config
, ... }: let
host = "514fpv.io";
in {
services.coturn = rec {
enable = true;
no-cli = true;
no-tcp-relay = true;
min-port = 49000;
max-port = 50000;
use-auth-secret = true;
static-auth-secret-file = "/nix/persist/service/coturn/secret";
realm = "edge.${host}";
cert = "${config.security.acme.certs.".${host}".directory}/full.pem";
pkey = "${config.security.acme.certs.".${host}".directory}/key.pem";
extraConfig = ''
# for debugging
#verbose
# ban private IP ranges
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
'';
};
networking.firewall = let
range = with config.services.coturn; [ {
from = min-port;
to = max-port;
} ];
in {
allowedUDPPortRanges = range;
allowedUDPPorts = [ 3478 5349 ];
allowedTCPPortRanges = range;
allowedTCPPorts = [ 3478 5349 ];
};
global.fs.zfs.mountpoints."/nix/persist/service/coturn" = "service/coturn";
}

View file

@ -1,4 +1,5 @@
{ lib
, pkgs
, ... }: {
global = {
id = "ff96c05be13e44f681292205370eed1a";
@ -13,6 +14,7 @@
fs.cryptsetup.allowDiscards = false;
fs.cryptsetup.uuids.secret = "c33c9b18-a280-42d7-8740-3f8d3f60dc43";
boot.lanzaboote = true;
acme.enable = true;
};
services.fstrim.enable = true;
@ -45,4 +47,7 @@
boot.initrd.kernelModules = [ "i915" ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
networking.firewall.allowedTCPPorts = [ 25565 ];
environment.systemPackages = with pkgs; [ python3 ];
}

36
spec/eientei/forgejo.nix Normal file
View file

@ -0,0 +1,36 @@
{ pkgs
, config
, ...}: let
host = "src.514fpv.io";
in {
services.forgejo = {
enable = true;
lfs.enable = true;
stateDir = "/nix/persist/service/forgejo";
database.type = "postgres";
database.createDatabase = true;
settings = {
server = {
SSH_PORT = 8087;
COOKIE_SECURE = true;
LANDING_PAGE = "explore";
DOMAIN = host;
PROTOCOL = "http+unix";
ROOT_URL = "https://${host}:2096/";
};
DEFAULT.APP_NAME = "Forgejo";
service.DISABLE_REGISTRATION = true;
};
};
users.users.forgejo.uid = 1023;
users.groups.forgejo.gid = 1023;
services.nginx.virtualHosts.${host} = {
useACMEHost = ".514fpv.io";
addSSL = true;
locations."/".proxyPass = "http://unix:/run/forgejo/forgejo.sock";
};
global.fs.zfs.mountpoints."/nix/persist/service/forgejo" = "service/forgejo";
}

50
spec/eientei/matrix.nix Normal file
View file

@ -0,0 +1,50 @@
{ config
, ... }: let
host = "514fpv.io";
in {
services.matrix-synapse = {
enable = true;
withJemalloc = true;
dataDir = "/nix/persist/service/matrix";
extraConfigFiles = [ "/nix/persist/service/matrix/secrets.yml" ];
settings = {
server_name = host;
public_baseurl = "https://${host}:8448/";
listeners = [ {
bind_addresses = [ "127.0.0.1" ];
port = 8008;
tls = false;
type = "http";
x_forwarded = true;
resources = [
{ compress = true; names = [ "client" ]; }
{ compress = false; names = [ "federation" ]; }
];
} ];
# turn server configuration
turn_uris = [
"turn:${config.services.coturn.realm}:3478?transport=udp"
"turn:${config.services.coturn.realm}:3478?transport=tcp"
];
turn_user_lifetime = "1h";
};
};
services.nginx.virtualHosts.${host} = {
listen = [{ addr = "0.0.0.0"; port = 8448; ssl = true; }];
useACMEHost = host;
addSSL = true;
locations."/".extraConfig = ''
return 404;
'';
locations."/_matrix".proxyPass = "http://127.0.0.1:8008";
locations."/_synapse/client".proxyPass = "http://127.0.0.1:8008";
};
networking.firewall.allowedTCPPorts = [ 8448 ];
global.fs.zfs.mountpoints."/nix/persist/service/matrix" = "service/matrix";
}

View file

@ -0,0 +1,42 @@
{ pkgs
, ...}: let
host = "cloud.514fpv.io";
in {
services.nextcloud = {
enable = true;
package = pkgs.nextcloud28;
extraApps = {
inherit (pkgs.nextcloud28Packages.apps)
notify_push impersonate spreed
contacts bookmarks deck polls notes forms;
};
home = "/nix/persist/service/nextcloud";
configureRedis = true;
webfinger = true;
maxUploadSize = "128G";
hostName = host;
phpExtraExtensions = all: with all; [ bz2 ];
database.createLocally = true;
config.dbtype = "pgsql";
config.adminuser = "koishi";
config.adminpassFile = builtins.toString (pkgs.writeText "password" "initial_password");
settings.overwriteprotocol = "https";
settings.default_phone_region = "US";
caching.redis = true;
phpOptions.upload_max_filesize = "128G";
phpOptions.post_max_size = "128G";
phpOptions.output_buffering = "0";
phpOptions."opcache.interned_strings_buffer" = "32";
https = true;
};
users.users.nextcloud.uid = 1022;
users.groups.nextcloud.gid = 1022;
services.nginx.virtualHosts.${host} = {
useACMEHost = ".514fpv.io";
addSSL = true;
};
global.fs.zfs.mountpoints."/nix/persist/service/nextcloud" = "service/nextcloud";
}

36
spec/eientei/nginx.nix Normal file
View file

@ -0,0 +1,36 @@
{
services.nginx = {
enable = true;
# enable all recommended settings
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedGzipSettings = true;
recommendedProxySettings = true;
# set a reasonable default
clientMaxBodySize = "64m";
virtualHosts = {
"_" = {
addSSL = true;
useACMEHost = ".514fpv.io";
extraConfig = "return 444;";
};
"home.514fpv.io" = {
useACMEHost = ".514fpv.io";
addSSL = true;
extraConfig = ''
proxy_buffering off;
'';
locations."/" = {
proxyPass = "http://127.0.0.1:8123";
proxyWebsockets = true;
};
};
};
};
networking.firewall.allowedTCPPorts = [ 80 443 ];
}

View file

@ -0,0 +1,12 @@
{ pkgs
, config
, ...}: {
services.postgresql = {
enable = true;
dataDir = "/nix/persist/service/postgresql/${config.services.postgresql.package.psqlSchema}";
package = pkgs.postgresql_15;
};
global.fs.zfs.mountpoints."/nix/persist/service/postgresql" = "service/postgresql";
}