forked from ss/sovereign-stack
Various DDNS updates.
Signed-off-by: Derek Smith <derek@farscapian.com>
This commit is contained in:
parent
e5a22e8dc4
commit
7ab9b4c482
@ -102,6 +102,15 @@ export MACVLAN_INTERFACE="$MACVLAN_INTERFACE"
|
|||||||
# shellcheck disable=SC1091
|
# shellcheck disable=SC1091
|
||||||
source ./defaults.sh
|
source ./defaults.sh
|
||||||
|
|
||||||
|
# if there's a ./env file here, let's execute it. Admins can put various deployment-specific things there.
|
||||||
|
if [ -f $(pwd)/env ]; then
|
||||||
|
source $(pwd)/env;
|
||||||
|
else
|
||||||
|
touch "$(pwd)/env"
|
||||||
|
echo "We stubbed out a '$(pwd)/env' file for you. Put any LXD-remote specific information in there."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# iterate over all our server endpoints and provision them if needed.
|
# iterate over all our server endpoints and provision them if needed.
|
||||||
# www
|
# www
|
||||||
VPS_HOSTNAME=
|
VPS_HOSTNAME=
|
||||||
|
@ -35,7 +35,6 @@ if [ "$VPS_HOSTING_TARGET" != lxd ]; then
|
|||||||
./generate_certs.sh
|
./generate_certs.sh
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
|
|
||||||
# restore the certs. If they don't exist in a backup we restore from SITE_PATH
|
# restore the certs. If they don't exist in a backup we restore from SITE_PATH
|
||||||
if [ -f "$SITE_PATH/certs.tar.gz" ]; then
|
if [ -f "$SITE_PATH/certs.tar.gz" ]; then
|
||||||
scp "$SITE_PATH/certs.tar.gz" "ubuntu@$FQDN:$REMOTE_HOME/certs.tar.gz"
|
scp "$SITE_PATH/certs.tar.gz" "ubuntu@$FQDN:$REMOTE_HOME/certs.tar.gz"
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -eu
|
set -eux
|
||||||
|
|
||||||
# check to ensure the admin has specified a MACVLAN interface
|
# check to ensure the admin has specified a MACVLAN interface
|
||||||
if [ -z "$DEV_MACVLAN_INTERFACE" ]; then
|
if [ -z "$MACVLAN_INTERFACE" ]; then
|
||||||
echo "ERROR: DEV_MACVLAN_INTERFACE not defined in project."
|
echo "ERROR: MACVLAN_INTERFACE not defined in project."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -26,12 +26,13 @@ envsubst < ./lxc_profile.yml > "$SITE_PATH/cloud-init.yml"
|
|||||||
# configure the profile with our generated cloud-init.yml file.
|
# configure the profile with our generated cloud-init.yml file.
|
||||||
cat "$SITE_PATH/cloud-init.yml" | lxc profile edit "$LXD_VM_NAME"
|
cat "$SITE_PATH/cloud-init.yml" | lxc profile edit "$LXD_VM_NAME"
|
||||||
|
|
||||||
wait_for_lxc_ip () {
|
function wait_for_lxc_ip {
|
||||||
|
|
||||||
LXC_INSTANCE_NAME="$1"
|
LXC_INSTANCE_NAME="$1"
|
||||||
IP_V4_ADDRESS=
|
IP_V4_ADDRESS=
|
||||||
while true; do
|
while true; do
|
||||||
IP_V4_ADDRESS="$(lxc list "$LXC_INSTANCE_NAME" --format csv --columns=4 | grep enp5s0 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" || true
|
IP_V4_ADDRESS="$(lxc list "$LXC_INSTANCE_NAME" --format csv --columns=4 | grep enp5s0 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" || true
|
||||||
|
export IP_V4_ADDRESS="$IP_V4_ADDRESS"
|
||||||
if [ -n "$IP_V4_ADDRESS" ]; then
|
if [ -n "$IP_V4_ADDRESS" ]; then
|
||||||
# give the machine extra time to spin up.
|
# give the machine extra time to spin up.
|
||||||
wait-for-it -t 300 "$IP_V4_ADDRESS:22"
|
wait-for-it -t 300 "$IP_V4_ADDRESS:22"
|
||||||
@ -44,6 +45,34 @@ done
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function run_ddns {
|
||||||
|
# now that the VM has an IP, we can update the DNS record. TODO add additional DNS providers here; namecheap only atm.
|
||||||
|
DDNS_STRING="$VPS_HOSTNAME"
|
||||||
|
if [ "$VPS_HOSTNAME" = www ]; then
|
||||||
|
# next update our DDNS record. TODO enable local/remote name provider.
|
||||||
|
DDNS_STRING="@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if the DNS record is incorrect, we run DDNS to get it corrected yo.
|
||||||
|
if "$(getent hosts "$FQDN" | awk '{ print $1 }')" != "$IP_V4_ADDRESS"; then
|
||||||
|
curl "https://dynamicdns.park-your-domain.com/update?host=$DDNS_STRING&domain=$DOMAIN_NAME&password=$DDNS_PASSWORD&ip=$IP_V4_ADDRESS"
|
||||||
|
|
||||||
|
DDNS_SLEEP_SECONDS=60
|
||||||
|
while true; do
|
||||||
|
# we test the www CNAME here so we can be assured the underlying has corrected.
|
||||||
|
if [[ "$(getent hosts "$FQDN" | awk '{ print $1 }')" == "$IP_V4_ADDRESS" ]]; then
|
||||||
|
echo ""
|
||||||
|
echo "SUCCESS: The DNS appears to be configured correctly."
|
||||||
|
|
||||||
|
echo "INFO: Waiting $DDNS_SLEEP_SECONDS seconds to allow stale DNS records to expire."
|
||||||
|
sleep "$DDNS_SLEEP_SECONDS";
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "." && sleep 2;
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# create the default storage pool if necessary
|
# create the default storage pool if necessary
|
||||||
if ! lxc storage list --format csv | grep -q default; then
|
if ! lxc storage list --format csv | grep -q default; then
|
||||||
|
36
run_ddns.sh
36
run_ddns.sh
@ -1,18 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -eu
|
set -eux
|
||||||
|
|
||||||
# create the ddclient.conf file
|
DDNS_STRING=
|
||||||
cat >/tmp/ddclient.conf <<EOL
|
|
||||||
### ddclient.conf
|
|
||||||
### namecheap
|
|
||||||
##################
|
|
||||||
use=web, web=checkip.dyndns.com/, web-skip='IP Address'
|
|
||||||
protocol=namecheap
|
|
||||||
server=dynamicdns.park-your-domain.com
|
|
||||||
login=${DOMAIN_NAME}
|
|
||||||
password=${DDNS_PASSWORD}
|
|
||||||
EOL
|
|
||||||
|
|
||||||
# for the www stack, we register only the domain name so our URLs look like https://$DOMAIN_NAME
|
# for the www stack, we register only the domain name so our URLs look like https://$DOMAIN_NAME
|
||||||
if [ "$APP_TO_DEPLOY" = www ] || [ "$APP_TO_DEPLOY" = certonly ]; then
|
if [ "$APP_TO_DEPLOY" = www ] || [ "$APP_TO_DEPLOY" = certonly ]; then
|
||||||
@ -21,22 +11,16 @@ else
|
|||||||
DDNS_STRING="$DDNS_HOST"
|
DDNS_STRING="$DDNS_HOST"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# append the correct DDNS string to ddclient.conf
|
|
||||||
echo "$DDNS_STRING" >> /tmp/ddclient.conf
|
|
||||||
|
|
||||||
cat /tmp/ddclient.conf
|
|
||||||
|
|
||||||
# send the ddclient.conf file to the remote vps.
|
|
||||||
docker-machine scp /tmp/ddclient.conf "$FQDN:$REMOTE_HOME/ddclient.conf"
|
|
||||||
docker-machine ssh "$FQDN" sudo cp "$REMOTE_HOME/ddclient.conf" /etc/ddclient.conf
|
|
||||||
docker-machine ssh "$FQDN" sudo chown root:root /etc/ddclient.conf
|
|
||||||
docker-machine ssh "$FQDN" sudo chmod 0600 /etc/ddclient.conf
|
|
||||||
docker-machine ssh "$FQDN" sudo apt-get -qq install -y ddclient wait-for-it git rsync duplicity sshfs
|
|
||||||
docker-machine ssh "$FQDN" sudo ddclient
|
|
||||||
|
|
||||||
# wait for DNS to get setup. Pass in the IP address of the actual VPS.
|
# wait for DNS to get setup. Pass in the IP address of the actual VPS.
|
||||||
echo "INFO: Verifying correct DNS configuration. This may take a while."
|
|
||||||
MACHINE_IP="$(docker-machine ip "$FQDN")"
|
MACHINE_IP="$(docker-machine ip "$FQDN")"
|
||||||
|
if [ "$VPS_HOSTING_TARGET" = aws ]; then
|
||||||
|
|
||||||
|
# wire DNS entries using namecheap DDNS API (via HTTPS rather than ddclient)
|
||||||
|
curl "https://dynamicdns.park-your-domain.com/update?host=$DDNS_STRING&domain=$DOMAIN_NAME&password=$DDNS_PASSWORD&ip=$MACHINE_IP"
|
||||||
|
|
||||||
|
#install dependencies.
|
||||||
|
docker-machine ssh "$FQDN" sudo apt-get -qq install -y wait-for-it git rsync duplicity sshfs
|
||||||
|
fi
|
||||||
|
|
||||||
DDNS_SLEEP_SECONDS=60
|
DDNS_SLEEP_SECONDS=60
|
||||||
while true; do
|
while true; do
|
||||||
|
Loading…
Reference in New Issue
Block a user