From 4db360a2bdd53b27f3ee05797d8a40023ceb96a7 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Sat, 30 Dec 2023 19:02:53 +0100 Subject: [PATCH] [NEW APP] Cloudflare DDNS (#1921) --- apps/cloudflare-ddns/config.json | 40 +++++++++++++++++++ apps/cloudflare-ddns/docker-compose.yml | 16 ++++++++ apps/cloudflare-ddns/metadata/description.md | 5 +++ apps/cloudflare-ddns/metadata/logo.jpg | Bin 0 -> 28294 bytes 4 files changed, 61 insertions(+) create mode 100644 apps/cloudflare-ddns/config.json create mode 100644 apps/cloudflare-ddns/docker-compose.yml create mode 100644 apps/cloudflare-ddns/metadata/description.md create mode 100644 apps/cloudflare-ddns/metadata/logo.jpg diff --git a/apps/cloudflare-ddns/config.json b/apps/cloudflare-ddns/config.json new file mode 100644 index 00000000..395c3ec4 --- /dev/null +++ b/apps/cloudflare-ddns/config.json @@ -0,0 +1,40 @@ +{ + "$schema": "../schema.json", + "name": "Cloudflare DDNS", + "available": true, + "exposable": false, + "port": 22222, + "no_gui": true, + "id": "cloudflare-ddns", + "tipi_version": 1, + "version": "3.3.0", + "categories": [ + "network" + ], + "description": "Cloudflare DDNS is a Docker image that update DNS records on Cloudflare on schedule.", + "short_desc": "Update DNS records on Cloudflare.", + "author": "Joshua Avalon", + "source": "https://github.com/joshuaavalon/docker-cloudflare", + "form_fields": [ + { + "type": "fqdn", + "label": "Domain", + "max": 50, + "min": 3, + "required": true, + "env_variable": "CF_DNS__DOMAINS_0__NAME" + }, + { + "type": "password", + "label": "Token", + "max": 40, + "min": 40, + "required": true, + "env_variable": "CF_DNS__AUTH__SCOPED_TOKEN" + } + ], + "supported_architectures": [ + "arm64", + "amd64" + ] +} \ No newline at end of file diff --git a/apps/cloudflare-ddns/docker-compose.yml b/apps/cloudflare-ddns/docker-compose.yml new file mode 100644 index 00000000..56419e1a --- /dev/null +++ b/apps/cloudflare-ddns/docker-compose.yml @@ -0,0 +1,16 @@ +version: "3.9" +services: + cloudflare-ddns: + container_name: cloudflare-ddns + image: ghcr.io/joshuaavalon/cloudflare-ddns:3.3.0 + environment: + - CF_DNS__AUTH__SCOPED_TOKEN=${CF_DNS__AUTH__SCOPED_TOKEN} + #- CF_DNS__CRON="*/5 * * * *" + - CF_DNS__DOMAINS_0__NAME=${CF_DNS__DOMAINS_0__NAME} + - CF_DNS__DOMAINS_0__PROXIED=false #true + #- CF_DNS__LOG_LEVEL=info + - CF_DNS__LOG_TYPE=json #Set to json for JSON log output. + #- CF_DNS__TIMEOUT 5000 #Timeout for network request. Disable if timeout <= 0. + restart: unless-stopped + networks: + - tipi_main_network diff --git a/apps/cloudflare-ddns/metadata/description.md b/apps/cloudflare-ddns/metadata/description.md new file mode 100644 index 00000000..9e04e34b --- /dev/null +++ b/apps/cloudflare-ddns/metadata/description.md @@ -0,0 +1,5 @@ +# Cloudflare DDNS + +Cloudflare DDNS is a Docker image that update DNS records on Cloudflare on schedule. + + diff --git a/apps/cloudflare-ddns/metadata/logo.jpg b/apps/cloudflare-ddns/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f3b16fa825cba2d7178e32443f9cf373eddd248 GIT binary patch literal 28294 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