fail2banana.ru.nix 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. { config, pkgs, inputs, ... }:
  2. let
  3. dns = "regru";
  4. host = "fail2banana";
  5. domain = "${host}.ru";
  6. email = "padimych@gmail.com";
  7. in {
  8. roles.server = {
  9. inherit domain;
  10. adguardhome.enable = true;
  11. coturn = {
  12. enable = true;
  13. extraConfig = ''
  14. external-ip=37.194.158.176
  15. '';
  16. sharedSecretFile = config.age.secrets."coturn-${host}".path;
  17. };
  18. nextcloud = {
  19. enable = true;
  20. adminpassFile = config.age.secrets."nextcloud-${host}".path;
  21. home = "/data/nextcloud";
  22. };
  23. nginx.enable = true;
  24. synapse = {
  25. enable = true;
  26. dataDir = "/data/matrix-synapse";
  27. # element = true;
  28. registrationSharedSecretFile = config.age.secrets."synapse-${host}".path;
  29. };
  30. vaultwarden = {
  31. enable = true;
  32. environmentFile = "/data/secrets/vaultwarden";
  33. };
  34. };
  35. age.secrets = with inputs.self.modules; {
  36. "${dns}-${host}".file = secrets."${dns}-${host}";
  37. "coturn-${host}" = {
  38. file = secrets."synapse-${host}";
  39. group = "turnserver";
  40. mode = "440";
  41. owner = "turnserver";
  42. };
  43. "nextcloud-${host}" = {
  44. file = secrets."nextcloud-${host}";
  45. group = "nextcloud";
  46. owner = "nextcloud";
  47. };
  48. "synapse-${host}" = {
  49. file = secrets."synapse-${host}";
  50. group = "matrix-synapse";
  51. owner = "matrix-synapse";
  52. };
  53. };
  54. security.acme.certs.${domain} = {
  55. credentialFiles.REGRU_PASSWORD_FILE = config.age.secrets."${dns}-${host}".path;
  56. environmentFile = pkgs.writeText "${dns}-env" ''
  57. REGRU_USERNAME=${email}
  58. REGRU_POLLING_INTERVAL=600
  59. REGRU_PROPAGATION_TIMEOUT=3600
  60. '';
  61. domain = "*." + domain;
  62. dnsPropagationCheck = true;
  63. dnsProvider = dns;
  64. dnsResolver = "ns1.reg.ru:53";
  65. inherit email;
  66. extraDomainNames = [ domain ];
  67. inherit (config.security.acme.defaults) group;
  68. # server = "https://acme-staging-v02.api.letsencrypt.org/directory";
  69. };
  70. services.nginx.virtualHosts = {
  71. ${domain} = {
  72. forceSSL = true;
  73. enableACME = true;
  74. acmeRoot = null;
  75. extraConfig = ''
  76. add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
  77. '';
  78. };
  79. "*.${domain}" = {
  80. default = true;
  81. forceSSL = true;
  82. useACMEHost = domain;
  83. globalRedirect = domain;
  84. };
  85. };
  86. }