diff options
Diffstat (limited to 'hosts/surtr/etebase')
| -rw-r--r-- | hosts/surtr/etebase/default.nix | 128 | ||||
| -rw-r--r-- | hosts/surtr/etebase/secret.txt | 26 |
2 files changed, 154 insertions, 0 deletions
diff --git a/hosts/surtr/etebase/default.nix b/hosts/surtr/etebase/default.nix new file mode 100644 index 00000000..3c71bed0 --- /dev/null +++ b/hosts/surtr/etebase/default.nix | |||
| @@ -0,0 +1,128 @@ | |||
| 1 | { config, pkgs, ... }: | ||
| 2 | |||
| 3 | { | ||
| 4 | config = { | ||
| 5 | services.etebase-server = { | ||
| 6 | enable = true; | ||
| 7 | port = null; | ||
| 8 | unixSocket = "/run/etebase-server/etebase-server.sock"; | ||
| 9 | user = "etebase"; | ||
| 10 | settings = { | ||
| 11 | allowed_hosts.allowed_host1 = "etesync.yggdrasil.li"; | ||
| 12 | global.secret_file = config.sops.secrets."etebase-server-secret.txt".path; | ||
| 13 | database = { | ||
| 14 | engine = "django.db.backends.postgresql"; | ||
| 15 | name = "etebase"; | ||
| 16 | user = "etebase"; | ||
| 17 | }; | ||
| 18 | }; | ||
| 19 | }; | ||
| 20 | |||
| 21 | systemd.services.etebase-server = { | ||
| 22 | serviceConfig = { | ||
| 23 | RuntimeDirectory = "etebase-server"; | ||
| 24 | }; | ||
| 25 | }; | ||
| 26 | |||
| 27 | sops.secrets."etebase-server-secret.txt" = { | ||
| 28 | format = "binary"; | ||
| 29 | sopsFile = ./secret.txt; | ||
| 30 | owner = config.services.etebase-server.user; | ||
| 31 | group = config.services.etebase-server.user; | ||
| 32 | restartUnits = ["etebase-server.service"]; | ||
| 33 | }; | ||
| 34 | |||
| 35 | security.acme.domains = { | ||
| 36 | "etesync.yggdrasil.li".certCfg = { | ||
| 37 | postRun = '' | ||
| 38 | ${pkgs.systemd}/bin/systemctl try-restart nginx.service | ||
| 39 | ''; | ||
| 40 | }; | ||
| 41 | "app.etesync.yggdrasil.li".certCfg = { | ||
| 42 | postRun = '' | ||
| 43 | ${pkgs.systemd}/bin/systemctl try-restart nginx.service | ||
| 44 | ''; | ||
| 45 | }; | ||
| 46 | }; | ||
| 47 | |||
| 48 | services.nginx = { | ||
| 49 | upstreams."etebase" = { | ||
| 50 | servers = { | ||
| 51 | "unix://${config.services.etebase-server.unixSocket}" = {}; | ||
| 52 | }; | ||
| 53 | }; | ||
| 54 | |||
| 55 | virtualHosts = { | ||
| 56 | "etesync.yggdrasil.li" = { | ||
| 57 | forceSSL = true; | ||
| 58 | sslCertificate = "/run/credentials/nginx.service/etesync.yggdrasil.li.pem"; | ||
| 59 | sslCertificateKey = "/run/credentials/nginx.service/etesync.yggdrasil.li.key.pem"; | ||
| 60 | sslTrustedCertificate = "/run/credentials/nginx.service/etesync.yggdrasil.li.chain.pem"; | ||
| 61 | extraConfig = '' | ||
| 62 | client_max_body_size 100M; | ||
| 63 | charset utf-8; | ||
| 64 | ''; | ||
| 65 | |||
| 66 | locations = { | ||
| 67 | "/static/" = { | ||
| 68 | alias = "${config.services.etebase-server.settings.global.static_root}/"; | ||
| 69 | }; | ||
| 70 | "= /".return = "301 https://app.etesync.yggdrasil.li"; | ||
| 71 | "/".extraConfig = '' | ||
| 72 | proxy_pass http://etebase; | ||
| 73 | |||
| 74 | proxy_http_version 1.1; | ||
| 75 | proxy_set_header Upgrade $http_upgrade; | ||
| 76 | proxy_set_header Connection "upgrade"; | ||
| 77 | |||
| 78 | proxy_redirect off; | ||
| 79 | proxy_set_header Host $host; | ||
| 80 | proxy_set_header X-Real-IP $remote_addr; | ||
| 81 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| 82 | proxy_set_header X-Forwarded-Host $server_name; | ||
| 83 | ''; | ||
| 84 | }; | ||
| 85 | }; | ||
| 86 | |||
| 87 | "app.etesync.yggdrasil.li" = { | ||
| 88 | forceSSL = true; | ||
| 89 | sslCertificate = "/run/credentials/nginx.service/app.etesync.yggdrasil.li.pem"; | ||
| 90 | sslCertificateKey = "/run/credentials/nginx.service/app.etesync.yggdrasil.li.key.pem"; | ||
| 91 | sslTrustedCertificate = "/run/credentials/nginx.service/app.etesync.yggdrasil.li.chain.pem"; | ||
| 92 | |||
| 93 | locations."/".alias = "${pkgs.etesync-web}/"; | ||
| 94 | }; | ||
| 95 | }; | ||
| 96 | }; | ||
| 97 | |||
| 98 | systemd.services.nginx = { | ||
| 99 | serviceConfig = { | ||
| 100 | ReadPaths = [ | ||
| 101 | config.services.etebase-server.settings.global.static_root | ||
| 102 | pkgs.etesync-web | ||
| 103 | ]; | ||
| 104 | LoadCredential = [ | ||
| 105 | "etesync.yggdrasil.li.key.pem:${config.security.acme.certs."etesync.yggdrasil.li".directory}/key.pem" | ||
| 106 | "etesync.yggdrasil.li.pem:${config.security.acme.certs."etesync.yggdrasil.li".directory}/fullchain.pem" | ||
| 107 | "etesync.yggdrasil.li.chain.pem:${config.security.acme.certs."etesync.yggdrasil.li".directory}/chain.pem" | ||
| 108 | |||
| 109 | "app.etesync.yggdrasil.li.key.pem:${config.security.acme.certs."app.etesync.yggdrasil.li".directory}/key.pem" | ||
| 110 | "app.etesync.yggdrasil.li.pem:${config.security.acme.certs."app.etesync.yggdrasil.li".directory}/fullchain.pem" | ||
| 111 | "app.etesync.yggdrasil.li.chain.pem:${config.security.acme.certs."app.etesync.yggdrasil.li".directory}/chain.pem" | ||
| 112 | ]; | ||
| 113 | }; | ||
| 114 | }; | ||
| 115 | |||
| 116 | users = { | ||
| 117 | users.${config.services.etebase-server.user} = { | ||
| 118 | isSystemUser = true; | ||
| 119 | group = config.services.etebase-server.user; | ||
| 120 | home = config.services.etebase-server.dataDir; | ||
| 121 | }; | ||
| 122 | |||
| 123 | groups.${config.services.etebase-server.user} = { | ||
| 124 | members = [ "nginx" ]; | ||
| 125 | }; | ||
| 126 | }; | ||
| 127 | }; | ||
| 128 | } | ||
diff --git a/hosts/surtr/etebase/secret.txt b/hosts/surtr/etebase/secret.txt new file mode 100644 index 00000000..acedb549 --- /dev/null +++ b/hosts/surtr/etebase/secret.txt | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | { | ||
| 2 | "data": "ENC[AES256_GCM,data:0iCyumWJXIVl/YnDZPCVeGM9FP4mGJ8A6Kp8nTXCZQfNOfXzvHRlJVXKlPtYuYD3/sXb,iv:gKJoiuXJIvL0/Eu48OM/7YPnX4p/3Bi8u/GvvNNSeg8=,tag:7XKIlfZ7ZimZ3wE0qVqU5w==,type:str]", | ||
| 3 | "sops": { | ||
| 4 | "kms": null, | ||
| 5 | "gcp_kms": null, | ||
| 6 | "azure_kv": null, | ||
| 7 | "hc_vault": null, | ||
| 8 | "age": null, | ||
| 9 | "lastmodified": "2022-11-09T15:30:57Z", | ||
| 10 | "mac": "ENC[AES256_GCM,data:zb9S3tgUEja6IfCvrh6AJkzoiqAj5RyBtEvHHV7RkANGHxRer79YdDJW39I4qrg2WC8odr5CyJF3sVqw4fUeUeeq0QAJYupJVmINBqIaFcy6f5XtFDpHRNPmHT1WwrN6t5o8pqb4cv8H7JRfjySxlwFNmItgrQIQn6QBqE2ZkEc=,iv:BTzROI/DxqCmRYzsRkMrj+kTG3KTLP+nAF4z0l/dRbU=,tag:S+w0+XL55PBiHWkUKtDggQ==,type:str]", | ||
| 11 | "pgp": [ | ||
| 12 | { | ||
| 13 | "created_at": "2022-11-09T14:03:17Z", | ||
| 14 | "enc": "-----BEGIN PGP MESSAGE-----\n\nhF4DXxoViZlp6dISAQdAfsNj4UmCNc1Qo5hi1YLaRjoeoudRZwNgVfaQTMsOPA8w\nfuIRUgq9Mybq4Frp4U/l86LwekOIwiF5tk1hPcK2HrmHG2z/ewr6WnrhczjFy+Qi\n0lwBMEtZWrD4h8GdTwan7E/jDLytEZYjDmXK72Ep5PubyO86H1BKy4Da5YIZw4Bc\nq3RaJ65wcp1EwIJ7gbEvG7a1a00AjFhXIwtsT/DhKTBy/OwPj9w4mFJ5rka8FQ==\n=2FIT\n-----END PGP MESSAGE-----\n", | ||
| 15 | "fp": "30D3453B8CD02FE2A3E7C78C0FB536FB87AE8F51" | ||
| 16 | }, | ||
| 17 | { | ||
| 18 | "created_at": "2022-11-09T14:03:17Z", | ||
| 19 | "enc": "-----BEGIN PGP MESSAGE-----\n\nhF4DyFKFNkTVG5oSAQdATs6pQrq07RGgFTTrNTI26pt3WSSF8tg9ywhepFvxfyUw\nItZrRfQUi42Yj6UC0GuxNmVYcS/Ogv7SngtM+22kofS476gfhkHT45/9gMhqve0D\n0lwBPaW0UHfU8Z3tbA6aRpMSYF20Srvvqfs2Q+PFSEWDFXx06RqpmH72LrhI3uYm\nbK9LykI7ucQAGJSSkHJQEbvEqyv1CMFGdDHkI1LyAetmcqgPZH8JRPx3LDagyg==\n=EsHC\n-----END PGP MESSAGE-----\n", | ||
| 20 | "fp": "7ED22F4AA7BB55728B643DC5471B7D88E4EF66F8" | ||
| 21 | } | ||
| 22 | ], | ||
| 23 | "unencrypted_suffix": "_unencrypted", | ||
| 24 | "version": "3.7.3" | ||
| 25 | } | ||
| 26 | } \ No newline at end of file | ||
