Add per-domain Namecheap DDNS env setup

This commit is contained in:
alexandrev-tibco
2026-02-01 14:56:25 +01:00
parent 84e0d3cb15
commit f86425e668
4 changed files with 100 additions and 12 deletions
+25
View File
@@ -56,3 +56,28 @@ Note: some Namecheap setups require enabling Dynamic DNS per host in their panel
- Place your real Namecheap Dynamic DNS token in `/etc/ddclient/ddclient.conf`.
- Do not commit real API tokens to this repo. Use the template at `templates/ddclient/ddclient.conf.template` as a reference.
- The Namecheap **Dynamic DNS Password** (not the API key) is required for each domain.
## Environment variable list (per domain)
These are used by the installer when it writes `/etc/ddclient/ddclient.conf`:
- `NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_CLOUD`
- `NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_COM`
- `NAMECHEAP_DDNS_PASSWORD_PORTFOLIOJOURNAL_APP`
- `NAMECHEAP_DDNS_PASSWORD_XSLTPLAYGROUND_COM`
- `NAMECHEAP_DDNS_PASSWORD_OLALLALAB_ORG`
## Simple shell setup for Alpine (root login shell)
This helper script appends the exports to `/root/.profile` for the default `ash` login shell:
```sh
./scripts/setup-ddclient-env-alpine.sh
```
Edit the `REPLACE_ME` values in `/root/.profile`, then re-login or run:
```sh
. /root/.profile
```
+39 -6
View File
@@ -5,7 +5,11 @@ ALPINE_RELEASE_FILE="/etc/alpine-release"
REPO_FILE="/etc/apk/repositories"
DDCLIENT_DIR="/etc/ddclient"
DDCLIENT_CONF="${DDCLIENT_DIR}/ddclient.conf"
NAMECHEAP_TOKEN="${NAMECHEAP_API_TOKEN:-API_TOKEN_NAMECHEAP}"
TOKEN_AV_CLOUD="${NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_CLOUD:-NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_CLOUD}"
TOKEN_AV_COM="${NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_COM:-NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_COM}"
TOKEN_PJ_APP="${NAMECHEAP_DDNS_PASSWORD_PORTFOLIOJOURNAL_APP:-NAMECHEAP_DDNS_PASSWORD_PORTFOLIOJOURNAL_APP}"
TOKEN_XSLT_COM="${NAMECHEAP_DDNS_PASSWORD_XSLTPLAYGROUND_COM:-NAMECHEAP_DDNS_PASSWORD_XSLTPLAYGROUND_COM}"
TOKEN_OLALLA_ORG="${NAMECHEAP_DDNS_PASSWORD_OLALLALAB_ORG:-NAMECHEAP_DDNS_PASSWORD_OLALLALAB_ORG}"
if [ ! -f "$ALPINE_RELEASE_FILE" ]; then
echo "Error: $ALPINE_RELEASE_FILE not found. This script is for Alpine Linux." >&2
@@ -28,8 +32,9 @@ mkdir -p "$DDCLIENT_DIR"
if [ ! -f "$DDCLIENT_CONF" ]; then
umask 077
cat <<CONF > "$DDCLIENT_CONF"
# ddclient.conf placeholder. Replace API_TOKEN_NAMECHEAP with your real token
# or set NAMECHEAP_API_TOKEN in the environment before running this script.
# ddclient.conf placeholder. Replace values below with your real Namecheap
# Dynamic DNS Passwords, or set per-domain environment variables before
# running this script (see docs/dyndns-namecheap-alpine.md).
# See templates/ddclient/ddclient.conf.template in this repo for full example.
daemon=300
@@ -40,10 +45,38 @@ web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=example.com
password=${NAMECHEAP_TOKEN}
login=alexandre-vazquez.cloud
password=${TOKEN_AV_CLOUD}
dyn.example.com
dyn.alexandre-vazquez.cloud
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=alexandre-vazquez.com
password=${TOKEN_AV_COM}
dyn.alexandre-vazquez.com
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=portfoliojournal.app
password=${TOKEN_PJ_APP}
dyn.portfoliojournal.app
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=xsltplayground.com
password=${TOKEN_XSLT_COM}
dyn.xsltplayground.com
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=olallalab.org
password=${TOKEN_OLALLA_ORG}
dyn.olallalab.org
CONF
chmod 600 "$DDCLIENT_CONF"
echo "Created $DDCLIENT_CONF with placeholder values."
+29
View File
@@ -0,0 +1,29 @@
#!/bin/sh
set -eu
PROFILE_FILE="/root/.profile"
MARKER_START="# Namecheap DDNS env (ddclient)"
MARKER_END="# End Namecheap DDNS env"
if [ ! -f "$PROFILE_FILE" ]; then
touch "$PROFILE_FILE"
fi
if grep -q "$MARKER_START" "$PROFILE_FILE"; then
echo "Env block already present in $PROFILE_FILE. Edit it there if needed."
exit 0
fi
cat <<'CONF' >> "$PROFILE_FILE"
# Namecheap DDNS env (ddclient)
export NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_CLOUD="REPLACE_ME"
export NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_COM="REPLACE_ME"
export NAMECHEAP_DDNS_PASSWORD_PORTFOLIOJOURNAL_APP="REPLACE_ME"
export NAMECHEAP_DDNS_PASSWORD_XSLTPLAYGROUND_COM="REPLACE_ME"
export NAMECHEAP_DDNS_PASSWORD_OLALLALAB_ORG="REPLACE_ME"
# End Namecheap DDNS env
CONF
echo "Added Namecheap DDNS env placeholders to $PROFILE_FILE."
echo "Edit the REPLACE_ME values, then re-login or run: . $PROFILE_FILE"
+7 -6
View File
@@ -1,5 +1,6 @@
# ddclient.conf template for Namecheap Dynamic DNS (multi-domain).
# Replace API_TOKEN_NAMECHEAP with your real token.
# Replace the placeholders with your Namecheap Dynamic DNS Passwords
# (not the Namecheap API key).
daemon=300
syslog=yes
@@ -10,34 +11,34 @@ web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=alexandre-vazquez.cloud
password=API_TOKEN_NAMECHEAP
password=NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_CLOUD
dyn.alexandre-vazquez.cloud
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=alexandre-vazquez.com
password=API_TOKEN_NAMECHEAP
password=NAMECHEAP_DDNS_PASSWORD_ALEXANDRE_VAZQUEZ_COM
dyn.alexandre-vazquez.com
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=portfoliojournal.app
password=API_TOKEN_NAMECHEAP
password=NAMECHEAP_DDNS_PASSWORD_PORTFOLIOJOURNAL_APP
dyn.portfoliojournal.app
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=xsltplayground.com
password=API_TOKEN_NAMECHEAP
password=NAMECHEAP_DDNS_PASSWORD_XSLTPLAYGROUND_COM
dyn.xsltplayground.com
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=olallalab.org
password=API_TOKEN_NAMECHEAP
password=NAMECHEAP_DDNS_PASSWORD_OLALLALAB_ORG
dyn.olallalab.org