Configure Dynamic DNS via Cloudflare using Docker Compose
NetworkServer

Configure Dynamic DNS via Cloudflare using Docker Compose

This article is an upgrade of the guide to update dynamic IP for domain names via Cloudflare that I shared before. Instead of using bash script and setting up cron, I now switch to installing using Docker for quickness.

I use Docker image of author timothymiller shared here: https://github.com/timothymiller/cloudflare-ddns

1. Requirements

  • Already have a domain name and a Cloudflare account.
  • The domain has been transferred to CloudFlare management.
  • Linux Server / virtual machine (Ubuntu / Arch / CentOS / …) with Docker and Docker Compose pre-installed

2. Prepare parameters from Cloudflare

You need to prepare the following parameters from Cloudflare

  • API Token
  • Zone ID
  • Subdomain (A record)

3. Install Cloudflare-ddns

Create a new folder on server

mkdir ~/cloudflare-ddns
cd ~/cloudflare-ddns Code language: Bash (bash)

Create config.json file

nano config.jsonCode language: CSS (css)

And enter the Content as below. Note that the parameters need to be changed:

  • api_token (line 5): Cloudflare API Token.
  • zone_id (line 11): Zone ID of the domain.
  • name (line 14): the submain you use to update IP. For example: subdomain is homeserver.markknow.com then just enter homeserver
{
  "cloudflare": (
    {
      "authentication": {
        "api_token": "So5eFPERxxxxxxxxxxxxxxxx4U4YRwu80Op",
        "api_key": {
          "api_key": "",
          "account_email": ""
        }
      },
      "zone_id": "aeb40exxxxxxxxxxxxxxxxxaf51a0b",
      "subdomains": (
        {
          "name": "homeserver",
          "proxied": false
        }
      )
    }
  ),
  "a": true,
  "aaaa": true,
  "purgeUnknownRecords": false,
  "ttl": 300
}Code language: JSON / JSON with Comments (json)

Create file compose.ymlenter the content below and save

services:
  cloudflare-ddns:
    image: timothyjmiller/cloudflare-ddns:latest
    container_name: cloudflare-ddns
    security_opt:
      - no-new-privileges:true
    network_mode: 'host'
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./config.json:/config.json
    restart: unless-stoppedCode language: YAML (yaml)

Activate by command

docker compose up -d

This application will automatically check the Public IP every 15 minutes and update the new IP to Cloudflare if it detects any change.

It is done.

Related posts

Using Cloudflare Pages as a Reverse Proxy for Cloudinary on WordPress

Mark Lee

[Proxmox] Connect CIFS network hard drive to LXC Container

Mark Lee

[Hackintosh] Install macOS Sonoma 14.5

Mark Lee

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More