#!/bin/bash set -ex cd "$(dirname "$0")" LATEST_GIT_COMMIT="$(cat ../../.git/refs/heads/master)" export LATEST_GIT_COMMIT="$LATEST_GIT_COMMIT" # check to ensure dependencies are met. for cmd in wait-for-it dig rsync sshfs lxc; do if ! command -v "$cmd" >/dev/null 2>&1; then echo "This script requires \"${cmd}\" to be installed. Please run 'install.sh'." exit 1 fi done # do a spot check; if we are on production warn. if lxc remote get-default | grep -q "production"; then echo "WARNING: You are running command against a production system!" echo "" # check if there are any uncommited changes. It's dangerous to # alter production systems when you have commits to make or changes to stash. if git update-index --refresh | grep -q "needs update"; then echo "ERROR: You have uncommited changes! You MUST commit or stash all changes to continue." exit 1 fi RESPONSE= read -r -p " Are you sure you want to continue (y) ": RESPONSE if [ "$RESPONSE" != "y" ]; then echo "STOPPING." exit 1 fi fi DOMAIN_NAME= RUN_CERT_RENEWAL=true SKIP_WWW=false RESTORE_WWW=false BACKUP_CERTS=true BACKUP_APPS=true BACKUP_BTCPAY=true BACKUP_BTCPAY_ARCHIVE_PATH= RESTORE_BTCPAY=false SKIP_BTCPAY=false UPDATE_BTCPAY=false RECONFIGURE_BTCPAY_SERVER=false CLUSTER_NAME="$(lxc remote get-default)" STOP_SERVICES=false USER_SAYS_YES=false RESTART_FRONT_END=true # grab any modifications from the command line. for i in "$@"; do case $i in --restore-www) RESTORE_WWW=true BACKUP_APPS=false RUN_CERT_RENEWAL=false RESTART_FRONT_END=true shift ;; --restore-btcpay) RESTORE_BTCPAY=true BACKUP_BTCPAY=false RUN_CERT_RENEWAL=false shift ;; --backup-certs) BACKUP_CERTS=true shift ;; --no-backup-www) BACKUP_CERTS=false BACKUP_APPS=false shift ;; --stop) STOP_SERVICES=true RESTART_FRONT_END=true shift ;; --restart-front-end) RESTART_FRONT_END=true shift ;; --domain=*) DOMAIN_NAME="${i#*=}" shift ;; --backup-archive-path=*) BACKUP_BTCPAY_ARCHIVE_PATH="${i#*=}" shift ;; --update-btcpay) UPDATE_BTCPAY=true shift ;; --skip-www) SKIP_WWW=true shift ;; --skip-btcpay) SKIP_BTCPAY=true shift ;; --backup-ghost) BACKUP_APPS=true shift ;; --no-cert-renew) RUN_CERT_RENEWAL=false shift ;; --reconfigure-btcpay) RECONFIGURE_BTCPAY_SERVER=true shift ;; -y) USER_SAYS_YES=true shift ;; *) echo "Unexpected option: $1" exit 1 ;; esac done if [ "$RESTORE_BTCPAY" = true ] && [ -z "$BACKUP_BTCPAY_ARCHIVE_PATH" ]; then echo "ERROR: BACKUP_BTCPAY_ARCHIVE_PATH was not set event when the RESTORE_BTCPAY = true. " exit 1 fi # set up our default paths. source ../../defaults.sh export DOMAIN_NAME="$DOMAIN_NAME" export REGISTRY_DOCKER_IMAGE="registry:2" export RESTORE_WWW="$RESTORE_WWW" export STOP_SERVICES="$STOP_SERVICES" export BACKUP_CERTS="$BACKUP_CERTS" export BACKUP_APPS="$BACKUP_APPS" export RESTORE_BTCPAY="$RESTORE_BTCPAY" export BACKUP_BTCPAY="$BACKUP_BTCPAY" export RUN_CERT_RENEWAL="$RUN_CERT_RENEWAL" export CLUSTER_NAME="$CLUSTER_NAME" export CLUSTER_PATH="$CLUSTERS_DIR/$CLUSTER_NAME" export USER_SAYS_YES="$USER_SAYS_YES" export BACKUP_BTCPAY_ARCHIVE_PATH="$BACKUP_BTCPAY_ARCHIVE_PATH" export RESTART_FRONT_END="$RESTART_FRONT_END" # todo convert this to Trezor-T SSH_PUBKEY_PATH="$SSH_HOME/id_rsa.pub" export SSH_PUBKEY_PATH="$SSH_PUBKEY_PATH" if [ ! -f "$SSH_PUBKEY_PATH" ]; then # generate a new SSH key for the base vm image. ssh-keygen -f "$SSH_HOME/id_rsa" -t ecdsa -b 521 -N "" fi # ensure our cluster path is created. mkdir -p "$CLUSTER_PATH" CLUSTER_DEFINITION="$CLUSTER_PATH/cluster_definition" export CLUSTER_DEFINITION="$CLUSTER_DEFINITION" ######################################### if [ ! -f "$CLUSTER_DEFINITION" ]; then echo "ERROR: The cluster definition could not be found. You may need to re-run 'ss-cluster'." exit 1 fi source "$CLUSTER_DEFINITION" # this is our password generation mechanism. Relying on GPG for secure password generation function new_pass { gpg --gen-random --armor 1 25 } function stub_site_definition { mkdir -p "$SITE_PATH" "$PROJECT_PATH/sites" # create a symlink from the CLUSTERPATH/sites/DOMAIN_NAME to the ss-sites/domain name if [ ! -d "$PROJECT_PATH/sites/$DOMAIN_NAME" ]; then ln -s "$SITE_PATH" "$PROJECT_PATH/sites/$DOMAIN_NAME" fi if [ ! -f "$SITE_PATH/site_definition" ]; then # check to see if the enf file exists. exist if not. SITE_DEFINITION_PATH="$SITE_PATH/site_definition" if [ ! -f "$SITE_DEFINITION_PATH" ]; then # stub out a site_definition with new passwords. cat >"$SITE_DEFINITION_PATH" <"$PROJECT_DEFINITION_PATH" < /home/ubuntu/.ss-githead" fi export DOMAIN_NAME="$PRIMARY_DOMAIN" export SITE_PATH="$SITES_PATH/$DOMAIN_NAME" if [ "$SKIP_BTCPAY" = false ]; then ./btcpayserver/go.sh ssh ubuntu@"$BTCPAY_FQDN" "echo $LATEST_GIT_COMMIT > /home/ubuntu/.ss-githead" fi