commit afc9ee12f8c4b55f2a806f065a76467af4213bb5 Author: Nic Becroft Date: Mon Aug 3 22:56:18 2026 +1000 Initial Pantheon infrastructure diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..4257b9d --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# The Pantheon + +Infrastructure as Code for the Pantheon homelab. + +## Components + +- Caddy reverse proxy +- Homepage dashboard +- Cloudflare DNS +- Infrastructure inventory +- Deployment scripts +- Documentation + +The repository is the source of truth for all infrastructure. diff --git a/caddy/Caddyfile b/caddy/Caddyfile new file mode 100644 index 0000000..0fd795e --- /dev/null +++ b/caddy/Caddyfile @@ -0,0 +1,5 @@ +{ + email n.becroft@hotmail.com +} + +import sites/*.caddy diff --git a/caddy/sites/ai.caddy b/caddy/sites/ai.caddy new file mode 100644 index 0000000..6a868bc --- /dev/null +++ b/caddy/sites/ai.caddy @@ -0,0 +1,23 @@ +zeus.mrredportal.com { + reverse_proxy 192.168.1.219:8080 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +fitness.mrredportal.com { + reverse_proxy 192.168.1.167:80 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +friends.mrredportal.com { + reverse_proxy 192.168.1.183:80 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} diff --git a/caddy/sites/home.caddy b/caddy/sites/home.caddy new file mode 100644 index 0000000..af09483 --- /dev/null +++ b/caddy/sites/home.caddy @@ -0,0 +1,7 @@ +home.mrredportal.com { + reverse_proxy 192.168.1.136:8123 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} diff --git a/caddy/sites/infrastructure.caddy b/caddy/sites/infrastructure.caddy new file mode 100644 index 0000000..6511bcc --- /dev/null +++ b/caddy/sites/infrastructure.caddy @@ -0,0 +1,19 @@ +proxmox.mrredportal.com { + reverse_proxy 192.168.1.20:8006 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +dashboard.mrredportal.com { + reverse_proxy 192.168.1.122:3000 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +router.mrredportal.com { + reverse_proxy 192.168.1.1:8443 +} diff --git a/caddy/sites/media.caddy b/caddy/sites/media.caddy new file mode 100644 index 0000000..d61c2cc --- /dev/null +++ b/caddy/sites/media.caddy @@ -0,0 +1,71 @@ +radarr.mrredportal.com { + reverse_proxy 192.168.1.126:7878 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +sonarr.mrredportal.com { + reverse_proxy 192.168.1.203:8989 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +prowlarr.mrredportal.com { + reverse_proxy 192.168.1.231:9696 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +jellyseerr.mrredportal.com { + reverse_proxy 192.168.1.49:5055 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +qbit.mrredportal.com { + reverse_proxy 192.168.1.154:8090 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +nzb.mrredportal.com { + reverse_proxy 192.168.1.144:6789 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +tautulli.mrredportal.com { + reverse_proxy 192.168.1.243:8181 +} + +unmanic.mrredportal.com { + reverse_proxy 192.168.1.215:8888 +} + +books.mrredportal.com { + reverse_proxy 192.168.1.115:6060 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +comics.mrredportal.com { + reverse_proxy 192.168.1.191:25600 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} diff --git a/caddy/sites/tools.caddy b/caddy/sites/tools.caddy new file mode 100644 index 0000000..d11fc86 --- /dev/null +++ b/caddy/sites/tools.caddy @@ -0,0 +1,27 @@ +db.mrredportal.com { + reverse_proxy 192.168.1.191:5984 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +tools.mrredportal.com { + reverse_proxy 192.168.1.190:80 +} + +project.mrredportal.com { + reverse_proxy 192.168.1.168:80 +} + +vtt.mrredportal.com { + reverse_proxy 192.168.1.47:30000 + + handle_errors { + respond file:/var/www/fallback/index.html 503 + } +} + +mrredportal.com, www.mrredportal.com { + redir https://zeus.mrredportal.com{uri} +} diff --git a/cloudflare/.env b/cloudflare/.env new file mode 100644 index 0000000..69faf45 --- /dev/null +++ b/cloudflare/.env @@ -0,0 +1,2 @@ +CF_API_TOKEN=cfut_p4hWdOv6P1Nc2DmHh9O7xrK7khEkiPjqdyVouhSJ394992fd +CF_ZONE_ID=a5f19a5579d9ddffcedeb28a0ece94fe diff --git a/cloudflare/backups/2026-08-03_20-07-47.yaml b/cloudflare/backups/2026-08-03_20-07-47.yaml new file mode 100644 index 0000000..eb75963 --- /dev/null +++ b/cloudflare/backups/2026-08-03_20-07-47.yaml @@ -0,0 +1,300 @@ +- id: 91a7d6398a8f967dde8f4b7b7fa95a28 + name: auth.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:16.563426Z' + modified_on: '2026-03-26T10:41:10.478435Z' +- id: a093fc7b6e3e2c1a9cb8368c74ae4fec + name: books.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T09:09:43.553774Z' + modified_on: '2026-04-10T04:45:08.837853Z' +- id: ef957f83f77dafc3eeb308ac18121bf4 + name: db.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:03.819178Z' + modified_on: '2026-03-26T10:41:44.909804Z' +- id: 35058682f9090cc1a7889d076fd3dee0 + name: fitness.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:49:31.563407Z' + modified_on: '2026-03-26T10:41:55.280784Z' +- id: 82b0782c7ef5347b579391bbe89a9b20 + name: home.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-12T02:13:20.046799Z' + modified_on: '2026-03-26T10:43:38.947413Z' +- id: b2812e047360af993fb0649868df76f3 + name: jellyseerr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:18.443428Z' + modified_on: '2026-03-26T10:43:32.181004Z' +- id: 4e0c57a85b1fd4a078e936d172362b6f + name: mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-14T23:55:47.48035Z' + modified_on: '2026-03-26T10:43:24.983012Z' +- id: 8f23bd4e5e77280be2b7369f7032fd23 + name: nzb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:05.89645Z' + modified_on: '2026-03-26T10:43:12.726662Z' +- id: f6bace69cd402fdf235a5fb1a30ded3f + name: obsidian.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:18.219878Z' + modified_on: '2026-03-26T10:43:05.533843Z' +- id: 8677effeb772cac0d37b74c2511b908b + name: project.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-29T04:02:51.497823Z' + modified_on: '2026-05-29T04:02:51.497823Z' +- id: 2af8e6471832f9118263df52d4a9799f + name: prox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: Proxmox + tags: [] + created_on: '2026-04-14T11:51:51.115388Z' + modified_on: '2026-04-14T11:51:51.115388Z' + comment_modified_on: '2026-04-14T11:51:51.115388Z' +- id: e081205f1f8f5d174b71fc6b9222c840 + name: qbit.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:05.790266Z' + modified_on: '2026-03-26T10:42:52.880424Z' +- id: 4ff9de7c5e2ca56004ebeeb36f7ff55c + name: radarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:51.471038Z' + modified_on: '2026-03-26T10:42:44.850313Z' +- id: 67172cc7bd03f79f25fb4a8d8c55b601 + name: sonarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:42.940104Z' + modified_on: '2026-03-26T10:42:37.101932Z' +- id: 05512387382b0a7c2eb28623879cfd4a + name: tautulli.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-12T08:35:34.974425Z' + modified_on: '2026-05-12T08:35:34.974425Z' +- id: b383e9010b9727bebcc5217e36d6d533 + name: tools.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-08T06:51:25.157083Z' + modified_on: '2026-05-08T06:56:44.116742Z' +- id: a8998fe5a1c32638723c9d62f50b1501 + name: unmanic.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-06-29T08:05:31.608152Z' + modified_on: '2026-06-29T08:05:31.608152Z' +- id: f2b0fcb9fec7ef41b8bb18fe4ac381d8 + name: vtt.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-29T03:16:42.402465Z' + modified_on: '2026-03-26T10:42:28.428258Z' +- id: 0d5d8cc1fe624ef3ca8a9f6543f76f2f + name: www.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-22T01:56:42.71505Z' + modified_on: '2026-03-26T10:42:19.67278Z' +- id: d2fec98c06427998174036197656514d + name: zeus.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-11-01T14:17:31.752835Z' + modified_on: '2026-03-26T10:42:11.842047Z' +- id: e962cfd2937cf121bdc6aa26eef6e2da + name: _dmarc.mrredportal.com + type: TXT + content: '"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.530016Z' + modified_on: '2026-01-20T10:23:46.530016Z' +- id: 4a088551b87f6ceb9f060146886ad4b1 + name: '*._domainkey.mrredportal.com' + type: TXT + content: '"v=DKIM1; p="' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.541681Z' + modified_on: '2026-01-20T10:23:46.541681Z' +- id: b6c04abf609661051c7ea99ac7b871fc + name: mrredportal.com + type: TXT + content: '"v=spf1 -all"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.543435Z' + modified_on: '2026-01-20T10:23:46.543435Z' diff --git a/cloudflare/backups/2026-08-03_20-11-32.yaml b/cloudflare/backups/2026-08-03_20-11-32.yaml new file mode 100644 index 0000000..6ee787b --- /dev/null +++ b/cloudflare/backups/2026-08-03_20-11-32.yaml @@ -0,0 +1,560 @@ +- id: 91a7d6398a8f967dde8f4b7b7fa95a28 + name: auth.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:16.563426Z' + modified_on: '2026-03-26T10:41:10.478435Z' +- id: f7c4c0763b2eac9d6c058880d9bf9219 + name: bazarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.184528Z' + modified_on: '2026-08-03T10:08:09.184528Z' +- id: a093fc7b6e3e2c1a9cb8368c74ae4fec + name: books.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T09:09:43.553774Z' + modified_on: '2026-04-10T04:45:08.837853Z' +- id: 8d174c9e32d69ebd87780f23702ad25e + name: caddy.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.522675Z' + modified_on: '2026-08-03T10:08:06.522675Z' +- id: ef957f83f77dafc3eeb308ac18121bf4 + name: couchdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:03.819178Z' + modified_on: '2026-08-03T10:08:12.587057Z' +- id: 45dd4ae503b142b8f2487dc4b7beb0ff + name: dashboard.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:05.833224Z' + modified_on: '2026-08-03T10:08:05.833224Z' +- id: a265dedf0bb1211e1e6f9de16c58b24e + name: ersatztv.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.728397Z' + modified_on: '2026-08-03T10:08:09.728397Z' +- id: 35058682f9090cc1a7889d076fd3dee0 + name: fitness.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:49:31.563407Z' + modified_on: '2026-03-26T10:41:55.280784Z' +- id: f2b0fcb9fec7ef41b8bb18fe4ac381d8 + name: foundry.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-29T03:16:42.402465Z' + modified_on: '2026-08-03T10:08:12.917627Z' +- id: 57f4bac5373311b4afd060a88f184237 + name: frigate.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.148551Z' + modified_on: '2026-08-03T10:08:11.148551Z' +- id: 3690c0576f3ec545230cd476726176dc + name: gitea.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.034438Z' + modified_on: '2026-08-03T10:08:08.034438Z' +- id: 2b74fa18d7d1e8037a95f5f0f02a0ae5 + name: homebox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.015238Z' + modified_on: '2026-08-03T10:08:10.015238Z' +- id: 82b0782c7ef5347b579391bbe89a9b20 + name: home.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-12T02:13:20.046799Z' + modified_on: '2026-03-26T10:43:38.947413Z' +- id: b383e9010b9727bebcc5217e36d6d533 + name: ittools.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-08T06:51:25.157083Z' + modified_on: '2026-08-03T10:08:13.203949Z' +- id: d5c13a780fbf1408d79aa2b1f19ea43a + name: jellyfin.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.598315Z' + modified_on: '2026-08-03T10:08:08.598315Z' +- id: b2812e047360af993fb0649868df76f3 + name: jellyseerr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:18.443428Z' + modified_on: '2026-03-26T10:43:32.181004Z' +- id: 1984631f10c2487c09353444c2ff170f + name: kometa.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.451334Z' + modified_on: '2026-08-03T10:08:09.451334Z' +- id: 7b675e12ff7f0c91dc8160079ad8f532 + name: monica.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.289503Z' + modified_on: '2026-08-03T10:08:10.289503Z' +- id: 4e0c57a85b1fd4a078e936d172362b6f + name: mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-14T23:55:47.48035Z' + modified_on: '2026-03-26T10:43:24.983012Z' +- id: ee31af5817de70b9ef2e88d1a5c87b54 + name: n8n.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.068063Z' + modified_on: '2026-08-03T10:08:07.068063Z' +- id: 8f23bd4e5e77280be2b7369f7032fd23 + name: nzbget.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:05.89645Z' + modified_on: '2026-08-03T10:08:12.280841Z' +- id: f6bace69cd402fdf235a5fb1a30ded3f + name: obsidian.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:18.219878Z' + modified_on: '2026-03-26T10:43:05.533843Z' +- id: 28f39901dd3e69150be9504b6ac5531a + name: ollama.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.792784Z' + modified_on: '2026-08-03T10:08:06.792784Z' +- id: 13dec81f30a26841c8bd8f88390ac2fb + name: partdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.567725Z' + modified_on: '2026-08-03T10:08:10.567725Z' +- id: c98c40e97d3416cb3dd2659f4cd7bec6 + name: plex.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.299045Z' + modified_on: '2026-08-03T10:08:08.299045Z' +- id: 8677effeb772cac0d37b74c2511b908b + name: project.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-29T04:02:51.497823Z' + modified_on: '2026-05-29T04:02:51.497823Z' +- id: d942460798f913b3c419201c5506a80d + name: prowlarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.863697Z' + modified_on: '2026-08-03T10:08:08.863697Z' +- id: 2af8e6471832f9118263df52d4a9799f + name: proxmox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: Proxmox + tags: [] + created_on: '2026-04-14T11:51:51.115388Z' + modified_on: '2026-08-03T10:08:11.700432Z' + comment_modified_on: '2026-04-14T11:51:51.115388Z' +- id: e081205f1f8f5d174b71fc6b9222c840 + name: qbittorrent.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:05.790266Z' + modified_on: '2026-08-03T10:08:11.986824Z' +- id: 0718ebca15f828a0079c21d986653ef3 + name: qdrant.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.484788Z' + modified_on: '2026-08-03T10:08:07.484788Z' +- id: 4ff9de7c5e2ca56004ebeeb36f7ff55c + name: radarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:51.471038Z' + modified_on: '2026-03-26T10:42:44.850313Z' +- id: d20da3d7f1101cfb7c560d633d1735d5 + name: romm.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.414735Z' + modified_on: '2026-08-03T10:08:11.414735Z' +- id: b0cd2234ab977e884bedc2f63193e825 + name: router.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.134524Z' + modified_on: '2026-08-03T10:08:06.134524Z' +- id: 11a042da363d2bf6fa50c2cdca4a3765 + name: searx.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.76787Z' + modified_on: '2026-08-03T10:08:07.76787Z' +- id: 67172cc7bd03f79f25fb4a8d8c55b601 + name: sonarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:42.940104Z' + modified_on: '2026-03-26T10:42:37.101932Z' +- id: 05512387382b0a7c2eb28623879cfd4a + name: tautulli.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-12T08:35:34.974425Z' + modified_on: '2026-05-12T08:35:34.974425Z' +- id: a8998fe5a1c32638723c9d62f50b1501 + name: unmanic.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-06-29T08:05:31.608152Z' + modified_on: '2026-06-29T08:05:31.608152Z' +- id: 310497dedba98dcd872e9fa8aae457ed + name: vault.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.861587Z' + modified_on: '2026-08-03T10:08:10.861587Z' +- id: 0d5d8cc1fe624ef3ca8a9f6543f76f2f + name: www.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-22T01:56:42.71505Z' + modified_on: '2026-03-26T10:42:19.67278Z' +- id: d2fec98c06427998174036197656514d + name: zeus.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-11-01T14:17:31.752835Z' + modified_on: '2026-03-26T10:42:11.842047Z' +- id: e962cfd2937cf121bdc6aa26eef6e2da + name: _dmarc.mrredportal.com + type: TXT + content: '"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.530016Z' + modified_on: '2026-01-20T10:23:46.530016Z' +- id: 4a088551b87f6ceb9f060146886ad4b1 + name: '*._domainkey.mrredportal.com' + type: TXT + content: '"v=DKIM1; p="' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.541681Z' + modified_on: '2026-01-20T10:23:46.541681Z' +- id: b6c04abf609661051c7ea99ac7b871fc + name: mrredportal.com + type: TXT + content: '"v=spf1 -all"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.543435Z' + modified_on: '2026-01-20T10:23:46.543435Z' diff --git a/cloudflare/backups/2026-08-03_20-12-33.yaml b/cloudflare/backups/2026-08-03_20-12-33.yaml new file mode 100644 index 0000000..6ee787b --- /dev/null +++ b/cloudflare/backups/2026-08-03_20-12-33.yaml @@ -0,0 +1,560 @@ +- id: 91a7d6398a8f967dde8f4b7b7fa95a28 + name: auth.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:16.563426Z' + modified_on: '2026-03-26T10:41:10.478435Z' +- id: f7c4c0763b2eac9d6c058880d9bf9219 + name: bazarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.184528Z' + modified_on: '2026-08-03T10:08:09.184528Z' +- id: a093fc7b6e3e2c1a9cb8368c74ae4fec + name: books.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T09:09:43.553774Z' + modified_on: '2026-04-10T04:45:08.837853Z' +- id: 8d174c9e32d69ebd87780f23702ad25e + name: caddy.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.522675Z' + modified_on: '2026-08-03T10:08:06.522675Z' +- id: ef957f83f77dafc3eeb308ac18121bf4 + name: couchdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:03.819178Z' + modified_on: '2026-08-03T10:08:12.587057Z' +- id: 45dd4ae503b142b8f2487dc4b7beb0ff + name: dashboard.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:05.833224Z' + modified_on: '2026-08-03T10:08:05.833224Z' +- id: a265dedf0bb1211e1e6f9de16c58b24e + name: ersatztv.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.728397Z' + modified_on: '2026-08-03T10:08:09.728397Z' +- id: 35058682f9090cc1a7889d076fd3dee0 + name: fitness.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:49:31.563407Z' + modified_on: '2026-03-26T10:41:55.280784Z' +- id: f2b0fcb9fec7ef41b8bb18fe4ac381d8 + name: foundry.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-29T03:16:42.402465Z' + modified_on: '2026-08-03T10:08:12.917627Z' +- id: 57f4bac5373311b4afd060a88f184237 + name: frigate.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.148551Z' + modified_on: '2026-08-03T10:08:11.148551Z' +- id: 3690c0576f3ec545230cd476726176dc + name: gitea.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.034438Z' + modified_on: '2026-08-03T10:08:08.034438Z' +- id: 2b74fa18d7d1e8037a95f5f0f02a0ae5 + name: homebox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.015238Z' + modified_on: '2026-08-03T10:08:10.015238Z' +- id: 82b0782c7ef5347b579391bbe89a9b20 + name: home.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-12T02:13:20.046799Z' + modified_on: '2026-03-26T10:43:38.947413Z' +- id: b383e9010b9727bebcc5217e36d6d533 + name: ittools.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-08T06:51:25.157083Z' + modified_on: '2026-08-03T10:08:13.203949Z' +- id: d5c13a780fbf1408d79aa2b1f19ea43a + name: jellyfin.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.598315Z' + modified_on: '2026-08-03T10:08:08.598315Z' +- id: b2812e047360af993fb0649868df76f3 + name: jellyseerr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:18.443428Z' + modified_on: '2026-03-26T10:43:32.181004Z' +- id: 1984631f10c2487c09353444c2ff170f + name: kometa.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.451334Z' + modified_on: '2026-08-03T10:08:09.451334Z' +- id: 7b675e12ff7f0c91dc8160079ad8f532 + name: monica.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.289503Z' + modified_on: '2026-08-03T10:08:10.289503Z' +- id: 4e0c57a85b1fd4a078e936d172362b6f + name: mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-14T23:55:47.48035Z' + modified_on: '2026-03-26T10:43:24.983012Z' +- id: ee31af5817de70b9ef2e88d1a5c87b54 + name: n8n.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.068063Z' + modified_on: '2026-08-03T10:08:07.068063Z' +- id: 8f23bd4e5e77280be2b7369f7032fd23 + name: nzbget.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:05.89645Z' + modified_on: '2026-08-03T10:08:12.280841Z' +- id: f6bace69cd402fdf235a5fb1a30ded3f + name: obsidian.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:18.219878Z' + modified_on: '2026-03-26T10:43:05.533843Z' +- id: 28f39901dd3e69150be9504b6ac5531a + name: ollama.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.792784Z' + modified_on: '2026-08-03T10:08:06.792784Z' +- id: 13dec81f30a26841c8bd8f88390ac2fb + name: partdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.567725Z' + modified_on: '2026-08-03T10:08:10.567725Z' +- id: c98c40e97d3416cb3dd2659f4cd7bec6 + name: plex.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.299045Z' + modified_on: '2026-08-03T10:08:08.299045Z' +- id: 8677effeb772cac0d37b74c2511b908b + name: project.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-29T04:02:51.497823Z' + modified_on: '2026-05-29T04:02:51.497823Z' +- id: d942460798f913b3c419201c5506a80d + name: prowlarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.863697Z' + modified_on: '2026-08-03T10:08:08.863697Z' +- id: 2af8e6471832f9118263df52d4a9799f + name: proxmox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: Proxmox + tags: [] + created_on: '2026-04-14T11:51:51.115388Z' + modified_on: '2026-08-03T10:08:11.700432Z' + comment_modified_on: '2026-04-14T11:51:51.115388Z' +- id: e081205f1f8f5d174b71fc6b9222c840 + name: qbittorrent.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:05.790266Z' + modified_on: '2026-08-03T10:08:11.986824Z' +- id: 0718ebca15f828a0079c21d986653ef3 + name: qdrant.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.484788Z' + modified_on: '2026-08-03T10:08:07.484788Z' +- id: 4ff9de7c5e2ca56004ebeeb36f7ff55c + name: radarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:51.471038Z' + modified_on: '2026-03-26T10:42:44.850313Z' +- id: d20da3d7f1101cfb7c560d633d1735d5 + name: romm.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.414735Z' + modified_on: '2026-08-03T10:08:11.414735Z' +- id: b0cd2234ab977e884bedc2f63193e825 + name: router.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.134524Z' + modified_on: '2026-08-03T10:08:06.134524Z' +- id: 11a042da363d2bf6fa50c2cdca4a3765 + name: searx.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.76787Z' + modified_on: '2026-08-03T10:08:07.76787Z' +- id: 67172cc7bd03f79f25fb4a8d8c55b601 + name: sonarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:42.940104Z' + modified_on: '2026-03-26T10:42:37.101932Z' +- id: 05512387382b0a7c2eb28623879cfd4a + name: tautulli.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-12T08:35:34.974425Z' + modified_on: '2026-05-12T08:35:34.974425Z' +- id: a8998fe5a1c32638723c9d62f50b1501 + name: unmanic.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-06-29T08:05:31.608152Z' + modified_on: '2026-06-29T08:05:31.608152Z' +- id: 310497dedba98dcd872e9fa8aae457ed + name: vault.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.861587Z' + modified_on: '2026-08-03T10:08:10.861587Z' +- id: 0d5d8cc1fe624ef3ca8a9f6543f76f2f + name: www.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-22T01:56:42.71505Z' + modified_on: '2026-03-26T10:42:19.67278Z' +- id: d2fec98c06427998174036197656514d + name: zeus.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-11-01T14:17:31.752835Z' + modified_on: '2026-03-26T10:42:11.842047Z' +- id: e962cfd2937cf121bdc6aa26eef6e2da + name: _dmarc.mrredportal.com + type: TXT + content: '"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.530016Z' + modified_on: '2026-01-20T10:23:46.530016Z' +- id: 4a088551b87f6ceb9f060146886ad4b1 + name: '*._domainkey.mrredportal.com' + type: TXT + content: '"v=DKIM1; p="' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.541681Z' + modified_on: '2026-01-20T10:23:46.541681Z' +- id: b6c04abf609661051c7ea99ac7b871fc + name: mrredportal.com + type: TXT + content: '"v=spf1 -all"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.543435Z' + modified_on: '2026-01-20T10:23:46.543435Z' diff --git a/cloudflare/backups/2026-08-03_20-15-39.yaml b/cloudflare/backups/2026-08-03_20-15-39.yaml new file mode 100644 index 0000000..6ee787b --- /dev/null +++ b/cloudflare/backups/2026-08-03_20-15-39.yaml @@ -0,0 +1,560 @@ +- id: 91a7d6398a8f967dde8f4b7b7fa95a28 + name: auth.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:16.563426Z' + modified_on: '2026-03-26T10:41:10.478435Z' +- id: f7c4c0763b2eac9d6c058880d9bf9219 + name: bazarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.184528Z' + modified_on: '2026-08-03T10:08:09.184528Z' +- id: a093fc7b6e3e2c1a9cb8368c74ae4fec + name: books.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T09:09:43.553774Z' + modified_on: '2026-04-10T04:45:08.837853Z' +- id: 8d174c9e32d69ebd87780f23702ad25e + name: caddy.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.522675Z' + modified_on: '2026-08-03T10:08:06.522675Z' +- id: ef957f83f77dafc3eeb308ac18121bf4 + name: couchdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:03.819178Z' + modified_on: '2026-08-03T10:08:12.587057Z' +- id: 45dd4ae503b142b8f2487dc4b7beb0ff + name: dashboard.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:05.833224Z' + modified_on: '2026-08-03T10:08:05.833224Z' +- id: a265dedf0bb1211e1e6f9de16c58b24e + name: ersatztv.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.728397Z' + modified_on: '2026-08-03T10:08:09.728397Z' +- id: 35058682f9090cc1a7889d076fd3dee0 + name: fitness.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:49:31.563407Z' + modified_on: '2026-03-26T10:41:55.280784Z' +- id: f2b0fcb9fec7ef41b8bb18fe4ac381d8 + name: foundry.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-29T03:16:42.402465Z' + modified_on: '2026-08-03T10:08:12.917627Z' +- id: 57f4bac5373311b4afd060a88f184237 + name: frigate.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.148551Z' + modified_on: '2026-08-03T10:08:11.148551Z' +- id: 3690c0576f3ec545230cd476726176dc + name: gitea.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.034438Z' + modified_on: '2026-08-03T10:08:08.034438Z' +- id: 2b74fa18d7d1e8037a95f5f0f02a0ae5 + name: homebox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.015238Z' + modified_on: '2026-08-03T10:08:10.015238Z' +- id: 82b0782c7ef5347b579391bbe89a9b20 + name: home.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-12T02:13:20.046799Z' + modified_on: '2026-03-26T10:43:38.947413Z' +- id: b383e9010b9727bebcc5217e36d6d533 + name: ittools.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-08T06:51:25.157083Z' + modified_on: '2026-08-03T10:08:13.203949Z' +- id: d5c13a780fbf1408d79aa2b1f19ea43a + name: jellyfin.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.598315Z' + modified_on: '2026-08-03T10:08:08.598315Z' +- id: b2812e047360af993fb0649868df76f3 + name: jellyseerr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:18.443428Z' + modified_on: '2026-03-26T10:43:32.181004Z' +- id: 1984631f10c2487c09353444c2ff170f + name: kometa.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.451334Z' + modified_on: '2026-08-03T10:08:09.451334Z' +- id: 7b675e12ff7f0c91dc8160079ad8f532 + name: monica.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.289503Z' + modified_on: '2026-08-03T10:08:10.289503Z' +- id: 4e0c57a85b1fd4a078e936d172362b6f + name: mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-14T23:55:47.48035Z' + modified_on: '2026-03-26T10:43:24.983012Z' +- id: ee31af5817de70b9ef2e88d1a5c87b54 + name: n8n.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.068063Z' + modified_on: '2026-08-03T10:08:07.068063Z' +- id: 8f23bd4e5e77280be2b7369f7032fd23 + name: nzbget.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:05.89645Z' + modified_on: '2026-08-03T10:08:12.280841Z' +- id: f6bace69cd402fdf235a5fb1a30ded3f + name: obsidian.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:18.219878Z' + modified_on: '2026-03-26T10:43:05.533843Z' +- id: 28f39901dd3e69150be9504b6ac5531a + name: ollama.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.792784Z' + modified_on: '2026-08-03T10:08:06.792784Z' +- id: 13dec81f30a26841c8bd8f88390ac2fb + name: partdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.567725Z' + modified_on: '2026-08-03T10:08:10.567725Z' +- id: c98c40e97d3416cb3dd2659f4cd7bec6 + name: plex.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.299045Z' + modified_on: '2026-08-03T10:08:08.299045Z' +- id: 8677effeb772cac0d37b74c2511b908b + name: project.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-29T04:02:51.497823Z' + modified_on: '2026-05-29T04:02:51.497823Z' +- id: d942460798f913b3c419201c5506a80d + name: prowlarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.863697Z' + modified_on: '2026-08-03T10:08:08.863697Z' +- id: 2af8e6471832f9118263df52d4a9799f + name: proxmox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: Proxmox + tags: [] + created_on: '2026-04-14T11:51:51.115388Z' + modified_on: '2026-08-03T10:08:11.700432Z' + comment_modified_on: '2026-04-14T11:51:51.115388Z' +- id: e081205f1f8f5d174b71fc6b9222c840 + name: qbittorrent.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:05.790266Z' + modified_on: '2026-08-03T10:08:11.986824Z' +- id: 0718ebca15f828a0079c21d986653ef3 + name: qdrant.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.484788Z' + modified_on: '2026-08-03T10:08:07.484788Z' +- id: 4ff9de7c5e2ca56004ebeeb36f7ff55c + name: radarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:51.471038Z' + modified_on: '2026-03-26T10:42:44.850313Z' +- id: d20da3d7f1101cfb7c560d633d1735d5 + name: romm.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.414735Z' + modified_on: '2026-08-03T10:08:11.414735Z' +- id: b0cd2234ab977e884bedc2f63193e825 + name: router.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.134524Z' + modified_on: '2026-08-03T10:08:06.134524Z' +- id: 11a042da363d2bf6fa50c2cdca4a3765 + name: searx.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.76787Z' + modified_on: '2026-08-03T10:08:07.76787Z' +- id: 67172cc7bd03f79f25fb4a8d8c55b601 + name: sonarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:42.940104Z' + modified_on: '2026-03-26T10:42:37.101932Z' +- id: 05512387382b0a7c2eb28623879cfd4a + name: tautulli.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-12T08:35:34.974425Z' + modified_on: '2026-05-12T08:35:34.974425Z' +- id: a8998fe5a1c32638723c9d62f50b1501 + name: unmanic.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-06-29T08:05:31.608152Z' + modified_on: '2026-06-29T08:05:31.608152Z' +- id: 310497dedba98dcd872e9fa8aae457ed + name: vault.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.861587Z' + modified_on: '2026-08-03T10:08:10.861587Z' +- id: 0d5d8cc1fe624ef3ca8a9f6543f76f2f + name: www.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-22T01:56:42.71505Z' + modified_on: '2026-03-26T10:42:19.67278Z' +- id: d2fec98c06427998174036197656514d + name: zeus.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-11-01T14:17:31.752835Z' + modified_on: '2026-03-26T10:42:11.842047Z' +- id: e962cfd2937cf121bdc6aa26eef6e2da + name: _dmarc.mrredportal.com + type: TXT + content: '"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.530016Z' + modified_on: '2026-01-20T10:23:46.530016Z' +- id: 4a088551b87f6ceb9f060146886ad4b1 + name: '*._domainkey.mrredportal.com' + type: TXT + content: '"v=DKIM1; p="' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.541681Z' + modified_on: '2026-01-20T10:23:46.541681Z' +- id: b6c04abf609661051c7ea99ac7b871fc + name: mrredportal.com + type: TXT + content: '"v=spf1 -all"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.543435Z' + modified_on: '2026-01-20T10:23:46.543435Z' diff --git a/cloudflare/backups/2026-08-03_20-18-12.yaml b/cloudflare/backups/2026-08-03_20-18-12.yaml new file mode 100644 index 0000000..6ee787b --- /dev/null +++ b/cloudflare/backups/2026-08-03_20-18-12.yaml @@ -0,0 +1,560 @@ +- id: 91a7d6398a8f967dde8f4b7b7fa95a28 + name: auth.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:16.563426Z' + modified_on: '2026-03-26T10:41:10.478435Z' +- id: f7c4c0763b2eac9d6c058880d9bf9219 + name: bazarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.184528Z' + modified_on: '2026-08-03T10:08:09.184528Z' +- id: a093fc7b6e3e2c1a9cb8368c74ae4fec + name: books.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T09:09:43.553774Z' + modified_on: '2026-04-10T04:45:08.837853Z' +- id: 8d174c9e32d69ebd87780f23702ad25e + name: caddy.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.522675Z' + modified_on: '2026-08-03T10:08:06.522675Z' +- id: ef957f83f77dafc3eeb308ac18121bf4 + name: couchdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:03.819178Z' + modified_on: '2026-08-03T10:08:12.587057Z' +- id: 45dd4ae503b142b8f2487dc4b7beb0ff + name: dashboard.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:05.833224Z' + modified_on: '2026-08-03T10:08:05.833224Z' +- id: a265dedf0bb1211e1e6f9de16c58b24e + name: ersatztv.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.728397Z' + modified_on: '2026-08-03T10:08:09.728397Z' +- id: 35058682f9090cc1a7889d076fd3dee0 + name: fitness.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:49:31.563407Z' + modified_on: '2026-03-26T10:41:55.280784Z' +- id: f2b0fcb9fec7ef41b8bb18fe4ac381d8 + name: foundry.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-29T03:16:42.402465Z' + modified_on: '2026-08-03T10:08:12.917627Z' +- id: 57f4bac5373311b4afd060a88f184237 + name: frigate.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.148551Z' + modified_on: '2026-08-03T10:08:11.148551Z' +- id: 3690c0576f3ec545230cd476726176dc + name: gitea.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.034438Z' + modified_on: '2026-08-03T10:08:08.034438Z' +- id: 2b74fa18d7d1e8037a95f5f0f02a0ae5 + name: homebox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.015238Z' + modified_on: '2026-08-03T10:08:10.015238Z' +- id: 82b0782c7ef5347b579391bbe89a9b20 + name: home.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-12T02:13:20.046799Z' + modified_on: '2026-03-26T10:43:38.947413Z' +- id: b383e9010b9727bebcc5217e36d6d533 + name: ittools.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-08T06:51:25.157083Z' + modified_on: '2026-08-03T10:08:13.203949Z' +- id: d5c13a780fbf1408d79aa2b1f19ea43a + name: jellyfin.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.598315Z' + modified_on: '2026-08-03T10:08:08.598315Z' +- id: b2812e047360af993fb0649868df76f3 + name: jellyseerr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:18.443428Z' + modified_on: '2026-03-26T10:43:32.181004Z' +- id: 1984631f10c2487c09353444c2ff170f + name: kometa.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.451334Z' + modified_on: '2026-08-03T10:08:09.451334Z' +- id: 7b675e12ff7f0c91dc8160079ad8f532 + name: monica.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.289503Z' + modified_on: '2026-08-03T10:08:10.289503Z' +- id: 4e0c57a85b1fd4a078e936d172362b6f + name: mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-14T23:55:47.48035Z' + modified_on: '2026-03-26T10:43:24.983012Z' +- id: ee31af5817de70b9ef2e88d1a5c87b54 + name: n8n.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.068063Z' + modified_on: '2026-08-03T10:08:07.068063Z' +- id: 8f23bd4e5e77280be2b7369f7032fd23 + name: nzbget.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:05.89645Z' + modified_on: '2026-08-03T10:08:12.280841Z' +- id: f6bace69cd402fdf235a5fb1a30ded3f + name: obsidian.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:18.219878Z' + modified_on: '2026-03-26T10:43:05.533843Z' +- id: 28f39901dd3e69150be9504b6ac5531a + name: ollama.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.792784Z' + modified_on: '2026-08-03T10:08:06.792784Z' +- id: 13dec81f30a26841c8bd8f88390ac2fb + name: partdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.567725Z' + modified_on: '2026-08-03T10:08:10.567725Z' +- id: c98c40e97d3416cb3dd2659f4cd7bec6 + name: plex.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.299045Z' + modified_on: '2026-08-03T10:08:08.299045Z' +- id: 8677effeb772cac0d37b74c2511b908b + name: project.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-29T04:02:51.497823Z' + modified_on: '2026-05-29T04:02:51.497823Z' +- id: d942460798f913b3c419201c5506a80d + name: prowlarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.863697Z' + modified_on: '2026-08-03T10:08:08.863697Z' +- id: 2af8e6471832f9118263df52d4a9799f + name: proxmox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: Proxmox + tags: [] + created_on: '2026-04-14T11:51:51.115388Z' + modified_on: '2026-08-03T10:08:11.700432Z' + comment_modified_on: '2026-04-14T11:51:51.115388Z' +- id: e081205f1f8f5d174b71fc6b9222c840 + name: qbittorrent.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:05.790266Z' + modified_on: '2026-08-03T10:08:11.986824Z' +- id: 0718ebca15f828a0079c21d986653ef3 + name: qdrant.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.484788Z' + modified_on: '2026-08-03T10:08:07.484788Z' +- id: 4ff9de7c5e2ca56004ebeeb36f7ff55c + name: radarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:51.471038Z' + modified_on: '2026-03-26T10:42:44.850313Z' +- id: d20da3d7f1101cfb7c560d633d1735d5 + name: romm.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.414735Z' + modified_on: '2026-08-03T10:08:11.414735Z' +- id: b0cd2234ab977e884bedc2f63193e825 + name: router.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.134524Z' + modified_on: '2026-08-03T10:08:06.134524Z' +- id: 11a042da363d2bf6fa50c2cdca4a3765 + name: searx.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.76787Z' + modified_on: '2026-08-03T10:08:07.76787Z' +- id: 67172cc7bd03f79f25fb4a8d8c55b601 + name: sonarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:42.940104Z' + modified_on: '2026-03-26T10:42:37.101932Z' +- id: 05512387382b0a7c2eb28623879cfd4a + name: tautulli.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-12T08:35:34.974425Z' + modified_on: '2026-05-12T08:35:34.974425Z' +- id: a8998fe5a1c32638723c9d62f50b1501 + name: unmanic.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-06-29T08:05:31.608152Z' + modified_on: '2026-06-29T08:05:31.608152Z' +- id: 310497dedba98dcd872e9fa8aae457ed + name: vault.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.861587Z' + modified_on: '2026-08-03T10:08:10.861587Z' +- id: 0d5d8cc1fe624ef3ca8a9f6543f76f2f + name: www.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-22T01:56:42.71505Z' + modified_on: '2026-03-26T10:42:19.67278Z' +- id: d2fec98c06427998174036197656514d + name: zeus.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-11-01T14:17:31.752835Z' + modified_on: '2026-03-26T10:42:11.842047Z' +- id: e962cfd2937cf121bdc6aa26eef6e2da + name: _dmarc.mrredportal.com + type: TXT + content: '"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.530016Z' + modified_on: '2026-01-20T10:23:46.530016Z' +- id: 4a088551b87f6ceb9f060146886ad4b1 + name: '*._domainkey.mrredportal.com' + type: TXT + content: '"v=DKIM1; p="' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.541681Z' + modified_on: '2026-01-20T10:23:46.541681Z' +- id: b6c04abf609661051c7ea99ac7b871fc + name: mrredportal.com + type: TXT + content: '"v=spf1 -all"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.543435Z' + modified_on: '2026-01-20T10:23:46.543435Z' diff --git a/cloudflare/backups/2026-08-03_20-33-33.yaml b/cloudflare/backups/2026-08-03_20-33-33.yaml new file mode 100644 index 0000000..6ee787b --- /dev/null +++ b/cloudflare/backups/2026-08-03_20-33-33.yaml @@ -0,0 +1,560 @@ +- id: 91a7d6398a8f967dde8f4b7b7fa95a28 + name: auth.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:16.563426Z' + modified_on: '2026-03-26T10:41:10.478435Z' +- id: f7c4c0763b2eac9d6c058880d9bf9219 + name: bazarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.184528Z' + modified_on: '2026-08-03T10:08:09.184528Z' +- id: a093fc7b6e3e2c1a9cb8368c74ae4fec + name: books.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T09:09:43.553774Z' + modified_on: '2026-04-10T04:45:08.837853Z' +- id: 8d174c9e32d69ebd87780f23702ad25e + name: caddy.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.522675Z' + modified_on: '2026-08-03T10:08:06.522675Z' +- id: ef957f83f77dafc3eeb308ac18121bf4 + name: couchdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:01:03.819178Z' + modified_on: '2026-08-03T10:08:12.587057Z' +- id: 45dd4ae503b142b8f2487dc4b7beb0ff + name: dashboard.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:05.833224Z' + modified_on: '2026-08-03T10:08:05.833224Z' +- id: a265dedf0bb1211e1e6f9de16c58b24e + name: ersatztv.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.728397Z' + modified_on: '2026-08-03T10:08:09.728397Z' +- id: 35058682f9090cc1a7889d076fd3dee0 + name: fitness.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-15T04:49:31.563407Z' + modified_on: '2026-03-26T10:41:55.280784Z' +- id: f2b0fcb9fec7ef41b8bb18fe4ac381d8 + name: foundry.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-29T03:16:42.402465Z' + modified_on: '2026-08-03T10:08:12.917627Z' +- id: 57f4bac5373311b4afd060a88f184237 + name: frigate.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.148551Z' + modified_on: '2026-08-03T10:08:11.148551Z' +- id: 3690c0576f3ec545230cd476726176dc + name: gitea.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.034438Z' + modified_on: '2026-08-03T10:08:08.034438Z' +- id: 2b74fa18d7d1e8037a95f5f0f02a0ae5 + name: homebox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.015238Z' + modified_on: '2026-08-03T10:08:10.015238Z' +- id: 82b0782c7ef5347b579391bbe89a9b20 + name: home.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-02-12T02:13:20.046799Z' + modified_on: '2026-03-26T10:43:38.947413Z' +- id: b383e9010b9727bebcc5217e36d6d533 + name: ittools.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-08T06:51:25.157083Z' + modified_on: '2026-08-03T10:08:13.203949Z' +- id: d5c13a780fbf1408d79aa2b1f19ea43a + name: jellyfin.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.598315Z' + modified_on: '2026-08-03T10:08:08.598315Z' +- id: b2812e047360af993fb0649868df76f3 + name: jellyseerr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:18.443428Z' + modified_on: '2026-03-26T10:43:32.181004Z' +- id: 1984631f10c2487c09353444c2ff170f + name: kometa.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:09.451334Z' + modified_on: '2026-08-03T10:08:09.451334Z' +- id: 7b675e12ff7f0c91dc8160079ad8f532 + name: monica.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.289503Z' + modified_on: '2026-08-03T10:08:10.289503Z' +- id: 4e0c57a85b1fd4a078e936d172362b6f + name: mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-14T23:55:47.48035Z' + modified_on: '2026-03-26T10:43:24.983012Z' +- id: ee31af5817de70b9ef2e88d1a5c87b54 + name: n8n.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.068063Z' + modified_on: '2026-08-03T10:08:07.068063Z' +- id: 8f23bd4e5e77280be2b7369f7032fd23 + name: nzbget.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:05.89645Z' + modified_on: '2026-08-03T10:08:12.280841Z' +- id: f6bace69cd402fdf235a5fb1a30ded3f + name: obsidian.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-21T00:54:18.219878Z' + modified_on: '2026-03-26T10:43:05.533843Z' +- id: 28f39901dd3e69150be9504b6ac5531a + name: ollama.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.792784Z' + modified_on: '2026-08-03T10:08:06.792784Z' +- id: 13dec81f30a26841c8bd8f88390ac2fb + name: partdb.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.567725Z' + modified_on: '2026-08-03T10:08:10.567725Z' +- id: c98c40e97d3416cb3dd2659f4cd7bec6 + name: plex.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.299045Z' + modified_on: '2026-08-03T10:08:08.299045Z' +- id: 8677effeb772cac0d37b74c2511b908b + name: project.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-29T04:02:51.497823Z' + modified_on: '2026-05-29T04:02:51.497823Z' +- id: d942460798f913b3c419201c5506a80d + name: prowlarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:08.863697Z' + modified_on: '2026-08-03T10:08:08.863697Z' +- id: 2af8e6471832f9118263df52d4a9799f + name: proxmox.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: Proxmox + tags: [] + created_on: '2026-04-14T11:51:51.115388Z' + modified_on: '2026-08-03T10:08:11.700432Z' + comment_modified_on: '2026-04-14T11:51:51.115388Z' +- id: e081205f1f8f5d174b71fc6b9222c840 + name: qbittorrent.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:48:05.790266Z' + modified_on: '2026-08-03T10:08:11.986824Z' +- id: 0718ebca15f828a0079c21d986653ef3 + name: qdrant.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.484788Z' + modified_on: '2026-08-03T10:08:07.484788Z' +- id: 4ff9de7c5e2ca56004ebeeb36f7ff55c + name: radarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:51.471038Z' + modified_on: '2026-03-26T10:42:44.850313Z' +- id: d20da3d7f1101cfb7c560d633d1735d5 + name: romm.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:11.414735Z' + modified_on: '2026-08-03T10:08:11.414735Z' +- id: b0cd2234ab977e884bedc2f63193e825 + name: router.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:06.134524Z' + modified_on: '2026-08-03T10:08:06.134524Z' +- id: 11a042da363d2bf6fa50c2cdca4a3765 + name: searx.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:07.76787Z' + modified_on: '2026-08-03T10:08:07.76787Z' +- id: 67172cc7bd03f79f25fb4a8d8c55b601 + name: sonarr.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-07-19T08:47:42.940104Z' + modified_on: '2026-03-26T10:42:37.101932Z' +- id: 05512387382b0a7c2eb28623879cfd4a + name: tautulli.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-05-12T08:35:34.974425Z' + modified_on: '2026-05-12T08:35:34.974425Z' +- id: a8998fe5a1c32638723c9d62f50b1501 + name: unmanic.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-06-29T08:05:31.608152Z' + modified_on: '2026-06-29T08:05:31.608152Z' +- id: 310497dedba98dcd872e9fa8aae457ed + name: vault.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-08-03T10:08:10.861587Z' + modified_on: '2026-08-03T10:08:10.861587Z' +- id: 0d5d8cc1fe624ef3ca8a9f6543f76f2f + name: www.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2024-08-22T01:56:42.71505Z' + modified_on: '2026-03-26T10:42:19.67278Z' +- id: d2fec98c06427998174036197656514d + name: zeus.mrredportal.com + type: A + content: 157.211.240.160 + proxiable: true + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2025-11-01T14:17:31.752835Z' + modified_on: '2026-03-26T10:42:11.842047Z' +- id: e962cfd2937cf121bdc6aa26eef6e2da + name: _dmarc.mrredportal.com + type: TXT + content: '"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.530016Z' + modified_on: '2026-01-20T10:23:46.530016Z' +- id: 4a088551b87f6ceb9f060146886ad4b1 + name: '*._domainkey.mrredportal.com' + type: TXT + content: '"v=DKIM1; p="' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.541681Z' + modified_on: '2026-01-20T10:23:46.541681Z' +- id: b6c04abf609661051c7ea99ac7b871fc + name: mrredportal.com + type: TXT + content: '"v=spf1 -all"' + proxiable: false + proxied: false + ttl: 1 + settings: {} + meta: {} + comment: null + tags: [] + created_on: '2026-01-20T10:23:46.543435Z' + modified_on: '2026-01-20T10:23:46.543435Z' diff --git a/cloudflare/diff.py b/cloudflare/diff.py new file mode 100644 index 0000000..3b101de --- /dev/null +++ b/cloudflare/diff.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 + +import json +import os + +import requests +import yaml +from dotenv import load_dotenv + +load_dotenv() + + +TOKEN = os.getenv("CF_API_TOKEN") +ZONE = os.getenv("CF_ZONE_ID") + +HEADERS = { + "Authorization": f"Bearer {TOKEN}", + "Content-Type": "application/json", +} + +def dns_key(record_type: str, name: str) -> str: + return f"{record_type}:{name}" + +# ------------------------------------------------------------ +# Load desired configuration +# ------------------------------------------------------------ + +with open("dns.yaml", "r") as f: + config = yaml.safe_load(f) + +zone = config["zone"] + +defaults = config.get("defaults", {}) +aliases = config.get("aliases", {}) +ignore = set(config.get("ignore", [])) + +default_type = defaults.get("type", "A") +default_content = defaults.get("content") +default_ttl = defaults.get("ttl", 1) +default_proxied = defaults.get("proxied", False) + +desired = {} + +for name, record in config.get("records", {}).items(): + + fqdn = zone if name == "@" else f"{name}.{zone}" + + rtype = record.get("type", default_type) + # Only manage A records for now + if rtype != "A": + continue + key = dns_key(rtype, fqdn) + + desired[key] = { + "name": key, + "type": rtype, + "content": record.get("content", default_content), + "ttl": record.get("ttl", default_ttl), + "proxied": record.get("proxied", default_proxied), + } + +# ------------------------------------------------------------ +# Download Cloudflare records +# ------------------------------------------------------------ + +url = f"https://api.cloudflare.com/client/v4/zones/{ZONE}/dns_records" + +response = requests.get(url, headers=HEADERS) +response.raise_for_status() + +current = {} + +for r in response.json()["result"]: + + if r["type"] != "A": + continue + + key = f"{r['type']}:{r['name']}" + + current[key] = { + "id": r["id"], + "type": r["type"], + "content": r["content"], + "ttl": r["ttl"], + "proxied": r.get("proxied", False), + } + +# ------------------------------------------------------------ +# Build execution plan +# ------------------------------------------------------------ + +plan = { + "create": [], + "update": [], + "rename": [], + "delete": [], +} + +handled_current = set() + +# ------------------------------------------------------------ +# Creates / Updates / Renames +# ------------------------------------------------------------ + +for key, wanted in desired.items(): + + fqdn = wanted["name"] + short = fqdn.replace(f".{zone}", "") + + # + # Existing record? + # + + if key in current: + + handled_current.add(key) + + existing = current[key] + + changed = False + + for key in ("type", "content", "ttl", "proxied"): + if existing[key] != wanted[key]: + print(f"\nDifference: {fqdn}") + print(f" {key}") + print(f" Current : {existing[key]!r}") + print(f" Wanted : {wanted[key]!r}") + changed = True + + if changed: + plan["update"].append({ + "name": key, + "id": existing["id"], + "desired": wanted, + }) + + continue + + # + # Alias? + # + + old = None + + for alias, target in aliases.items(): + + if target != short: + continue + + alias_key = dns_key(wanted["type"], f"{alias}.{zone}") + + if alias_key in current: + + handled_current.add(alias_key) + + plan["rename"].append({ + "old": alias_fqdn, + "new": fqdn, + "id": current[alias_key]["id"], + "desired": wanted, + }) + + old = alias_key + break + + if old: + continue + + # + # Create + # + + plan["create"].append({ + "name": key, + "desired": wanted, + }) + +# ------------------------------------------------------------ +# Deletes +# ------------------------------------------------------------ + +for key, existing in current.items(): + + _, fqdn = key.split(":", 1) + + short = fqdn.replace(f".{zone}", "") + + if short in ignore: + continue + + if key in handled_current: + continue + + if key in desired: + continue + + plan["delete"].append({ + "name": key, + "id": existing["id"], + }) + +# ------------------------------------------------------------ +# Print +# ------------------------------------------------------------ + +def heading(title): + print() + print("=" * 70) + print(title) + print("=" * 70) + +heading(f"CREATE ({len(plan['create'])})") + +for item in sorted(plan["create"], key=lambda x: x["name"]): + print(item["name"]) + +heading(f"RENAME ({len(plan['rename'])})") + +for item in sorted(plan["rename"], key=lambda x: x["old"]): + print(f"{item['old']} -> {item['new']}") + +heading(f"UPDATE ({len(plan['update'])})") + +for item in sorted(plan["update"], key=lambda x: x["name"]): + print(item["name"]) + +heading(f"DELETE ({len(plan['delete'])})") + +for item in sorted(plan["delete"], key=lambda x: x["name"]): + print(item["name"]) + +# ------------------------------------------------------------ +# Save plan +# ------------------------------------------------------------ + +with open("plan.json", "w") as f: + json.dump(plan, f, indent=4) + +print() +print("Execution plan written to plan.json") diff --git a/cloudflare/dns.yaml b/cloudflare/dns.yaml new file mode 100644 index 0000000..e869764 --- /dev/null +++ b/cloudflare/dns.yaml @@ -0,0 +1,143 @@ +zone: mrredportal.com + +defaults: + ttl: 1 + proxied: false + content: 157.211.240.160 + +ignore: + + - _dmarc + - "*._domainkey" + +aliases: + + prox: proxmox + qbit: qbittorrent + db: couchdb + nzb: nzbget + tools: ittools + vtt: foundry +records: + + "@": + type: A + + www: + type: A + + dashboard: + type: A + + books: + type: A + + proxmox: + type: A + + router: + type: A + + caddy: + type: A + + home: + type: A + + zeus: + type: A + + ollama: + type: A + + n8n: + type: A + + qdrant: + type: A + + searx: + type: A + + gitea: + type: A + + plex: + type: A + + jellyfin: + type: A + + jellyseerr: + type: A + + sonarr: + type: A + + radarr: + type: A + + prowlarr: + type: A + + qbit: + type: A + + nzb: + type: A + + bazarr: + type: A + + kometa: + type: A + + tautulli: + type: A + + unmanic: + type: A + + ersatztv: + type: A + + homebox: + type: A + + monica: + type: A + + partdb: + type: A + + couchdb: + type: A + + vault: + type: A + + frigate: + type: A + + fitness: + type: A + + foundry: + type: A + + romm: + type: A + + ittools: + type: A + +txt: + + _dmarc: + value: "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;" + + "*._domainkey": + value: "v=DKIM1; p=" + + "@": + value: "v=spf1 -all" diff --git a/cloudflare/import.py b/cloudflare/import.py new file mode 100644 index 0000000..64a0bda --- /dev/null +++ b/cloudflare/import.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import os +import yaml +import requests +from dotenv import load_dotenv + +load_dotenv() + +TOKEN = os.getenv("CF_API_TOKEN") +ZONE = os.getenv("CF_ZONE_ID") + +headers = { + "Authorization": f"Bearer {TOKEN}", + "Content-Type": "application/json", +} + +url = f"https://api.cloudflare.com/client/v4/zones/{ZONE}/dns_records" + +records = requests.get(url, headers=headers).json()["result"] + +data = { + "zone": "mrredportal.com", + "defaults": { + "ttl": 1, + "proxied": False, + }, + "records": {}, +} + +for r in records: + name = r["name"].replace(".mrredportal.com", "") + + data["records"][name] = { + "type": r["type"], + "content": r["content"], + "proxied": r["proxied"], + "ttl": r["ttl"], + } + +with open("dns.yaml", "w") as f: + yaml.dump(data, f, sort_keys=True) + +print("dns.yaml written.") + diff --git a/cloudflare/list.py b/cloudflare/list.py new file mode 100644 index 0000000..9ca9afa --- /dev/null +++ b/cloudflare/list.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import os +import requests +from dotenv import load_dotenv + +load_dotenv() + +TOKEN = os.getenv("CF_API_TOKEN") +ZONE = os.getenv("CF_ZONE_ID") + +headers = { + "Authorization": f"Bearer {TOKEN}", + "Content-Type": "application/json", +} + +url = f"https://api.cloudflare.com/client/v4/zones/{ZONE}/dns_records" + +response = requests.get(url, headers=headers) +response.raise_for_status() + +for record in response.json()["result"]: + print( + f"{record['type']:4} " + f"{record['name']:35} " + f"{record['content']}" + ) diff --git a/cloudflare/plan.json b/cloudflare/plan.json new file mode 100644 index 0000000..f5c487a --- /dev/null +++ b/cloudflare/plan.json @@ -0,0 +1,19 @@ +{ + "create": [], + "update": [], + "rename": [], + "delete": [ + { + "name": "A:auth.mrredportal.com", + "id": "91a7d6398a8f967dde8f4b7b7fa95a28" + }, + { + "name": "A:obsidian.mrredportal.com", + "id": "f6bace69cd402fdf235a5fb1a30ded3f" + }, + { + "name": "A:project.mrredportal.com", + "id": "8677effeb772cac0d37b74c2511b908b" + } + ] +} \ No newline at end of file diff --git a/cloudflare/records.yaml b/cloudflare/records.yaml new file mode 100644 index 0000000..e69de29 diff --git a/cloudflare/requirements.txt b/cloudflare/requirements.txt new file mode 100644 index 0000000..d62d792 --- /dev/null +++ b/cloudflare/requirements.txt @@ -0,0 +1,4 @@ +requests +PyYAML +python-dotenv +rich diff --git a/cloudflare/sync.py b/cloudflare/sync.py new file mode 100644 index 0000000..9079b67 --- /dev/null +++ b/cloudflare/sync.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python3 + +import json +import os +from datetime import datetime +from pathlib import Path + +import requests +import yaml +from dotenv import load_dotenv + +load_dotenv(Path(__file__).with_name(".env")) + +TOKEN = os.getenv("CF_API_TOKEN") +ZONE = os.getenv("CF_ZONE_ID") + +if not TOKEN: + raise RuntimeError("CF_API_TOKEN missing") + +if not ZONE: + raise RuntimeError("CF_ZONE_ID missing") + +HEADERS = { + "Authorization": f"Bearer {TOKEN}", + "Content-Type": "application/json", +} + +API = f"https://api.cloudflare.com/client/v4/zones/{ZONE}/dns_records" + +# ----------------------------------------------------- +# Backup current DNS +# ----------------------------------------------------- + +print("Backing up current Cloudflare zone...") + +records = requests.get(API, headers=HEADERS).json()["result"] + +backup_dir = Path("backups") +backup_dir.mkdir(exist_ok=True) + +backup_file = backup_dir / f"{datetime.now():%Y-%m-%d_%H-%M-%S}.yaml" + +yaml.safe_dump(records, open(backup_file, "w"), sort_keys=False) + +print(f"Backup saved to {backup_file}") + +# ----------------------------------------------------- +# Load execution plan +# ----------------------------------------------------- + +plan = json.load(open("plan.json")) + +def print_section(title, symbol, items): + + print() + print("=" * 70) + print(title) + print("=" * 70) + + if not items: + print(" None") + return + + for item in items: + + if "name" in item: + print(f" {symbol} {item['name']}") + + elif "old" in item: + print(f" {symbol} {item['old']} -> {item['new']}") + + +print("\nExecution Plan") +print("=" * 70) + +print_section( + f"CREATE ({len(plan['create'])})", + "+", + sorted(plan["create"], key=lambda x: x["name"]) +) + +print_section( + f"RENAME ({len(plan['rename'])})", + "~", + sorted(plan["rename"], key=lambda x: x["old"]) +) + +print_section( + f"UPDATE ({len(plan['update'])})", + "*", + sorted(plan["update"], key=lambda x: x["name"]) +) + +print_section( + f"DELETE ({len(plan['delete'])})", + "-", + sorted(plan["delete"], key=lambda x: x["name"]) +) + +print() +answer = input("Apply these changes to Cloudflare? [y/N]: ").strip().lower() + +if answer not in ("y", "yes"): + print("\nAborted.") + raise SystemExit + +if answer != "y": + print("Cancelled.") + raise SystemExit + +# ----------------------------------------------------- +# CREATE +# ----------------------------------------------------- + +print("\nCreating records...") + +for item in plan["create"]: + + body = { + "type": item["desired"]["type"], + "name": item["name"], + "content": item["desired"]["content"], + "ttl": item["desired"]["ttl"], + "proxied": item["desired"]["proxied"], + } + + r = requests.post(API, headers=HEADERS, json=body) + r.raise_for_status() + + print(f" + {item['name']}") + +# ----------------------------------------------------- +# RENAME +# ----------------------------------------------------- + +print("\nRenaming records...") + +for item in plan["rename"]: + + body = { + "type": item["desired"]["type"], + "name": item["new"], + "content": item["desired"]["content"], + "ttl": item["desired"]["ttl"], + "proxied": item["desired"]["proxied"], + } + + r = requests.patch( + f"{API}/{item['id']}", + headers=HEADERS, + json=body, + ) + + r.raise_for_status() + + print(f" ~ {item['old']} -> {item['new']}") + +# ----------------------------------------------------- +# UPDATE +# ----------------------------------------------------- + +print("\nUpdating records...") + +for item in plan["update"]: + + body = { + "type": item["desired"]["type"], + "name": item["name"], + "content": item["desired"]["content"], + "ttl": item["desired"]["ttl"], + "proxied": item["desired"]["proxied"], + } + + r = requests.patch( + f"{API}/{item['id']}", + headers=HEADERS, + json=body, + ) + + r = requests.patch( + f"{API}/{item['id']}", + headers=HEADERS, + json=body, +) + + if not r.ok: + print(f"\nERROR updating {item['name']}") + print(r.status_code) + print(r.text) + raise SystemExit + + print(f" * {item['name']}") + + +# ----------------------------------------------------- +# DELETE +# ----------------------------------------------------- + +print("\nDeleting records...") + +for item in plan["delete"]: + + r = requests.delete( + f"{API}/{item['id']}", + headers=HEADERS, + ) + + r.raise_for_status() + + print(f" - {item['name']}") + +print("\nDone.") diff --git a/config.py b/config.py new file mode 100644 index 0000000..d31c40f --- /dev/null +++ b/config.py @@ -0,0 +1,6 @@ +from pathlib import Path +from dotenv import load_dotenv + +ROOT = Path(__file__).resolve().parent.parent + +load_dotenv(ROOT / "inventory" / ".env") diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/network.md b/docs/network.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/pantheon.md b/docs/pantheon.md new file mode 100644 index 0000000..e69de29 diff --git a/inventory/.env b/inventory/.env new file mode 100644 index 0000000..54b3b27 --- /dev/null +++ b/inventory/.env @@ -0,0 +1,4 @@ +PVE_URL=https://192.168.1.20:8006 +PVE_TOKEN_ID=homepage@pve!homepage +PVE_TOKEN_SECRET=e342ae4d-6c58-41a8-af9c-0916677646aa +VERIFY_SSL=false diff --git a/inventory/inventory.yaml b/inventory/inventory.yaml new file mode 100644 index 0000000..3262789 --- /dev/null +++ b/inventory/inventory.yaml @@ -0,0 +1,318 @@ +--- +domain: mrredportal.com + +defaults: + public: true + homepage: true + caddy: true + protocol: http + +services: + + # ========================================================== + # Infrastructure + # ========================================================== + + proxmox: + vmid: 104 + hostname: proxmox + name: Proxmox + category: Infrastructure + node: hermes-satchel + ip: 192.168.1.20 + port: 8006 + protocol: https + icon: proxmox.png + + caddy: + vmid: 104 + hostname: caddy + name: Caddy + category: Infrastructure + node: hermes-satchel + ip: 192.168.1.152 + + homepage: + vmid: 136 + hostname: dashboard + name: Homepage + category: Infrastructure + node: hera + ip: 192.168.1.122 + + mqtt: + vmid: 116 + hostname: mqtt + name: MQTT + category: Infrastructure + node: hera + ip: 192.168.1.112 + + unbound: + vmid: 117 + hostname: unbound + name: Unbound + category: Infrastructure + node: hera + ip: 192.168.1.111 + + # ========================================================== + # AI + # ========================================================== + + zeus: + vmid: 108 + hostname: zeus + name: Open WebUI + category: AI + node: hermes + ip: 192.168.1.219 + port: 8080 + + ollama: + vmid: 126 + hostname: ollama + name: Ollama + category: AI + node: dionysus + ip: 192.168.1.160 + port: 11434 + public: false + + qdrant: + vmid: 123 + hostname: qdrant + name: Qdrant + category: AI + node: hermes + ip: 192.168.1.158 + port: 6333 + public: false + + n8n: + vmid: 124 + hostname: n8n + name: n8n + category: AI + node: hermes + ip: 192.168.1.159 + port: 5678 + + searx: + vmid: 127 + hostname: searx + name: SearXNG + category: AI + node: hera + ip: 192.168.1.161 + port: 8080 + + # ========================================================== + # Media + # ========================================================== + + radarr: + vmid: 100 + hostname: radarr + category: Media + node: hermes-satchel + ip: 192.168.1.126 + port: 7878 + + sonarr: + vmid: 101 + hostname: sonarr + category: Media + node: hermes-satchel + ip: 192.168.1.203 + port: 8989 + + prowlarr: + vmid: 102 + hostname: prowlarr + category: Media + node: hermes-satchel + ip: 192.168.1.231 + port: 9696 + + jellyseerr: + vmid: 103 + hostname: jellyseerr + category: Media + node: hermes-satchel + ip: 192.168.1.49 + port: 5055 + + qbittorrent: + vmid: 105 + hostname: qbittorrent + category: Media + node: hermes-satchel + ip: 192.168.1.154 + port: 8090 + + nzbget: + vmid: 106 + hostname: nzbget + category: Media + node: hermes-satchel + ip: 192.168.1.144 + port: 6789 + + bazarr: + vmid: 109 + hostname: bazarr + category: Media + node: hermes-satchel + ip: 192.168.1.164 + port: 6767 + + plex: + vmid: 118 + hostname: plex + category: Media + node: dionysus + ip: 192.168.1.175 + port: 32400 + + jellyfin: + vmid: 119 + hostname: jellyfin + category: Media + node: dionysus + ip: 192.168.1.188 + port: 8096 + + ersatztv: + vmid: 120 + hostname: ersatztv + category: Media + node: dionysus + ip: 192.168.1.206 + port: 8409 + + tautulli: + vmid: 112 + hostname: tautulli + category: Media + node: hera + ip: 192.168.1.243 + port: 8181 + + unmanic: + vmid: 115 + hostname: unmanic + category: Media + node: hermes + ip: 192.168.1.114 + port: 8888 + + kometa: + vmid: 131 + hostname: kometa + category: Media + node: hermes + ip: 192.168.1.178 + + romm: + vmid: 129 + hostname: romm + category: Media + node: hermes + ip: 192.168.1.199 + + # ========================================================== + # Productivity + # ========================================================== + + monica: + vmid: 133 + hostname: monica + category: Productivity + node: hera + ip: 192.168.1.183 + + homebox: + vmid: 132 + hostname: homebox + category: Productivity + node: hera + ip: 192.168.1.182 + + grimmory: + vmid: 110 + hostname: books + category: Productivity + node: hermes-satchel + ip: 192.168.1.115 + aliases: + - grimmory + + partdb: + vmid: 134 + hostname: partdb + category: Productivity + node: hera + ip: 192.168.1.169 + + vault: + vmid: 114 + hostname: vault + category: Productivity + node: hera + ip: 192.168.1.232 + + couchdb: + vmid: 113 + hostname: couchdb + category: Productivity + node: hera + ip: 192.168.1.191 + + gitea: + vmid: 125 + hostname: gitea + category: Development + node: dionysus + ip: 192.168.1.181 + + # ========================================================== + # Home Automation + # ========================================================== + + sparkyfitness: + vmid: 130 + hostname: fitness + category: Home + node: dionysus + ip: 192.168.1.167 + + frigate: + vmid: 135 + hostname: frigate + category: Home + node: dionysus + ip: 192.168.1.177 + + foundry: + vmid: 107 + hostname: vtt + category: Gaming + node: dionysus + ip: 192.168.1.47 + aliases: + - foundry + + calliope: + vmid: 121 + hostname: calliope + category: Gaming + node: hermes + ip: 192.168.1.120 + + ittools: + vmid: 128 + hostname: ittools + category: Utilities + node: hermes + ip: 192.168.1.121 diff --git a/inventory/nodes.yaml b/inventory/nodes.yaml new file mode 100644 index 0000000..344e795 --- /dev/null +++ b/inventory/nodes.yaml @@ -0,0 +1,13 @@ +nodes: + + hermes: + ip: 192.168.1.117 + + hermes-satchel: + ip: 192.168.1.20 + + hera: + ip: 192.168.1.197 + + dionysus: + ip: 192.168.1.72 diff --git a/inventory/pct ip.txt b/inventory/pct ip.txt new file mode 100644 index 0000000..189b3b7 --- /dev/null +++ b/inventory/pct ip.txt @@ -0,0 +1,36 @@ +100 radarr 192.168.1.126 +101 sonarr 192.168.1.203 +102 prowlarr 192.168.1.231 +103 seerr 192.168.1.49 +104 caddy 192.168.1.152 +105 qbittorrent 192.168.1.154 +106 nzbget 192.168.1.144 +109 bazarr 192.168.1.164 +110 docker 192.168.1.115 +108 openwebui 192.168.1.219 +115 unmanic 192.168.1.114 +121 calliope 192.168.1.120 +122 heimdall-dashboard 192.168.1.156 +123 qdrant 192.168.1.158 +124 n8n 192.168.1.159 +128 alpine-it-tools 192.168.1.121 +129 romm 192.168.1.199 +131 kometa 192.168.1.178 +112 tautulli 192.168.1.243 +113 apache-couchdb 192.168.1.191 +114 vaultwarden 192.168.1.232 +116 mqtt 192.168.1.112 +117 unbound 192.168.1.111 +127 searxng 192.168.1.161 +132 homebox 192.168.1.182 +133 monica 192.168.1.183 +134 part-db 192.168.1.169 +136 homepage 192.168.1.122 +107 FoundryVTT 192.168.1.47 +118 plex 192.168.1.175 +119 jellyfin 192.168.1.188 +120 ersatztv 192.168.1.206 +125 gitea 192.168.1.181 +126 ollama 192.168.1.160 +130 sparkyfitness 192.168.1.167 +135 frigate 192.168.1.177 diff --git a/inventory/pct list.txt b/inventory/pct list.txt new file mode 100644 index 0000000..96caeb0 --- /dev/null +++ b/inventory/pct list.txt @@ -0,0 +1,44 @@ +root@dionysus:~# pct list +VMID Status Lock Name +107 running FoundryVTT +118 running plex +119 running jellyfin +120 running ersatztv +125 running gitea +126 running ollama +130 running sparkyfitness +135 running frigate +root@hera:~# pct list +VMID Status Lock Name +112 running tautulli +113 running apache-couchdb +114 running vaultwarden +116 running mqtt +117 running unbound +127 running searxng +132 running homebox +133 running monica +134 running part-db +136 running homepage +root@hermes:~# pct list +VMID Status Lock Name +108 running openwebui +115 running unmanic +121 running calliope +122 running heimdall-dashboard +123 running qdrant +124 running n8n +128 running alpine-it-tools +129 running romm +131 running kometa +root@hermes-satchel:~# pct list +VMID Status Lock Name +100 running radarr +101 running sonarr +102 running prowlarr +103 running seerr +104 running caddy +105 running qbittorrent +106 running nzbget +109 stopped bazarr +110 running docker diff --git a/inventory/proxmox.py b/inventory/proxmox.py new file mode 100644 index 0000000..e45cdac --- /dev/null +++ b/inventory/proxmox.py @@ -0,0 +1,8 @@ +from proxmoxer import ProxmoxAPI + +proxmox = ProxmoxAPI( + host, + token_name=token_id, + token_value=secret, + verify_ssl=False, +) diff --git a/scripts/deploy-caddy.sh b/scripts/deploy-caddy.sh new file mode 100755 index 0000000..5d7acc7 --- /dev/null +++ b/scripts/deploy-caddy.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -e + +HOST="192.168.1.152" +USER="mrredportal" + +echo "==> Creating temporary directory..." +ssh ${USER}@${HOST} "rm -rf /tmp/pantheon-caddy && mkdir -p /tmp/pantheon-caddy" + +echo "==> Uploading configuration..." +scp -r caddy/* ${USER}@${HOST}:/tmp/pantheon-caddy/ + +echo "==> Installing configuration..." +ssh -t ${USER}@${HOST} <<'EOF' +sudo rsync -a --delete /tmp/pantheon-caddy/ /etc/caddy/ +sudo caddy validate --config /etc/caddy/Caddyfile +sudo systemctl reload caddy +rm -rf /tmp/pantheon-caddy +EOF + +echo "Done!" diff --git a/scripts/deploy-homepage.sh b/scripts/deploy-homepage.sh new file mode 100755 index 0000000..e69de29 diff --git a/scripts/validate.sh b/scripts/validate.sh new file mode 100755 index 0000000..e69de29