Skip to content

Commit

Permalink
Improve README
Browse files Browse the repository at this point in the history
Mention a few alternatives
  • Loading branch information
alcroito committed Mar 1, 2021
1 parent 1b49d9c commit 372c752
Showing 1 changed file with 51 additions and 9 deletions.
60 changes: 51 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Dynamic DNS using DigitalOcean's DNS API

![](./docs/logo.png)
![Logo](./docs/logo.png)

[![GitHub Source](https://img.shields.io/badge/github-source-ffb64c?style=flat-square&logo=github&logoColor=white&labelColor=757575)](https://github.com/alcroito/digitalocean-dyndns)
[![GitHub Registry](https://img.shields.io/badge/github-registry-ffb64c?style=flat-square&logo=github&logoColor=white&labelColor=757575)](https://github.com/users/alcroito/packages/container/package/digitalocean-dyndns)
Expand All @@ -11,13 +11,15 @@
A Unix daemon that periodically updates a DigitalOcean domain record with the current machine's public IP address.

## How it works

The daemon periodically runs the following steps:

* finds the current machine's public IPv4 by sending a DNS request to an OpenDNS resolver
* queries the domain records using DO's API to find the configured subdomain. If the subdomain IP
is different from the current public API, it updates the subdomain record to point to the new IP
* finds the current machine's public IPv4 by sending a DNS request to an OpenDNS resolver
* queries the domain records using DO's API to find the configured subdomain. If the subdomain IP
is different from the current public API, it updates the subdomain record to point to the new IP

## Setup

* A Unix (Linux / macOS) server to run the daemon
* A DigitalOcean account with your domain associated to it
* An existing `A` record for the subdomain to be updated
Expand All @@ -30,19 +32,59 @@ See [do_ddns.sample.toml](./do_ddns.sample.toml) for a sample configuration file

Run `do_ddns -h` to see the available command line options as well as available
environment variables.

## Build requirements

To build the application you need a recent enough version of the Rust compiler (1.45+).
Build using `cargo build`. The executable will be placed into `$PWD/target[/target-arch]/do_ddns`.

# Docker images and docker-compose
## Docker images and docker-compose

Docker images based on Alpine Linux (~7MB) are available for your server-y needs.

Docker images (built using Github Actions) for the following platforms `linux/amd64`, `linux/arm64`, `linux/arm/v7`
are published to [DockerHub](https://hub.docker.com/r/alcroito/digitalocean-dyndns)
and the [Github Container registry](https://github.com/users/alcroito/packages/container/package/digitalocean-dyndns).
They are regularly built using Github Actions for the following platforms:

A sample [docker-compose.yaml](./docker/docker-compose.yaml) file to run the daemon as a docker container is provided.
* `linux/amd64`
* `linux/arm64`
* `linux/arm/v7`

They can be downloaded from [DockerHub](https://hub.docker.com/r/alcroito/digitalocean-dyndns) and the [Github Container registry](https://github.com/users/alcroito/packages/container/package/digitalocean-dyndns).

An easy way to use them is via the sample [docker-compose.yaml](./docker/docker-compose.yaml) file.

## LICENSE

MIT

## Alternative implementations

* [tunix/digitalocean-dyndns](https://github.com/tunix/digitalocean-dyndns)
* written in `Bash`
* provides `amd64` alpine-based docker image `~5MB`
* uses `curl`/`HTTP` for IP resolving (3 possible services)
* appears to be maintained πŸ‘
* [skibish/ddns](https://github.com/skibish/ddns)
* written in `Golang`
* provides `amd64` alpine-based docker image `~8MB`
* uses `HTTP` for IP resolving (3 possible services)
* supports update notification via SMTP and Telegram
* supports resolving `IPv6` addresses
* supports updating multiple domain records of different types (`A`, `CNAME`, `TXT`)
* provides standalone binaries for `darwin/amd64`, `linux/armv7`, `linux/amd64`, `windows/amd64`
* appears to be maintained πŸ‘
* [KyleLilly/do-dyndns](https://github.com/KyleLilly/do-dyndns)
* written in `Javascript/NodeJS`
* runs as a server expecting `PUT` requests
* provides `Dockerfile`, but no image
* doesn't resolve the public ip
* appears unmaintained πŸ‘Ž
* [creltek/digitalocean-dyndns](https://github.com/creltek/digitalocean-dyndns)
* written in `Python`
* uses one `HTTP` based service for IP resolving
* provides `Dockerfile`, but no image
* appears unmaintained πŸ‘Ž
* [FMCorz/digitalocean-dyndns](https://github.com/FMCorz/digitalocean-dyndns)
* written in `Python`
* uses one `HTTP` based service for IP resolving
* appears unmaintained πŸ‘Ž
* Many others that appear unmaintained or don't provide docker images

0 comments on commit 372c752

Please sign in to comment.