spec(eientei): migrate library configuration
This commit is contained in:
parent
b2fb07b698
commit
2bfec2508d
10 changed files with 52 additions and 103 deletions
11
spec/eientei/acme.nix
Normal file
11
spec/eientei/acme.nix
Normal 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
59
spec/eientei/coturn.nix
Normal 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";
|
||||
}
|
|
@ -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
36
spec/eientei/forgejo.nix
Normal 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
50
spec/eientei/matrix.nix
Normal 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";
|
||||
}
|
42
spec/eientei/nextcloud.nix
Normal file
42
spec/eientei/nextcloud.nix
Normal 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
36
spec/eientei/nginx.nix
Normal 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 ];
|
||||
}
|
12
spec/eientei/postgresql.nix
Normal file
12
spec/eientei/postgresql.nix
Normal 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";
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue