diff --git a/deploy.sh b/deploy.sh index 4b0252b..18d8988 100755 --- a/deploy.sh +++ b/deploy.sh @@ -284,186 +284,179 @@ BTCPAYSERVER_MAC_ADDRESS= EOL - chmod 0744 "$PROJECT_DEFINITION_PATH" - echo "INFO: we stubbed a new project.conf for you at '$PROJECT_DEFINITION_PATH'. Go update it!" - echo "INFO: Learn more at https://www.sovereign-stack.org/ss-deploy/" + chmod 0744 "$PROJECT_DEFINITION_PATH" + echo "INFO: we stubbed a new project.conf for you at '$PROJECT_DEFINITION_PATH'. Go update it!" + echo "INFO: Learn more at https://www.sovereign-stack.org/ss-deploy/" - exit 1 - fi + exit 1 +fi - # source project defition. - source "$PROJECT_DEFINITION_PATH" +. ../project_env.sh - if [ -z "$PRIMARY_DOMAIN" ]; then - echo "ERROR: The PRIMARY_DOMAIN is not specified. Check your project.conf." - exit 1 - fi +if [ -z "$PRIMARY_DOMAIN" ]; then + echo "ERROR: The PRIMARY_DOMAIN is not specified. Check your project.conf." + exit 1 +fi - if [ -z "$WWW_SERVER_MAC_ADDRESS" ]; then - echo "ERROR: the WWW_SERVER_MAC_ADDRESS is not specified. Check your project.conf." - exit 1 - fi +if [ -z "$WWW_SERVER_MAC_ADDRESS" ]; then + echo "ERROR: the WWW_SERVER_MAC_ADDRESS is not specified. Check your project.conf." + exit 1 +fi - if [ -z "$BTCPAYSERVER_MAC_ADDRESS" ]; then - echo "ERROR: the BTCPAYSERVER_MAC_ADDRESS is not specified. Check your project.conf." - exit 1 - fi +if [ -z "$BTCPAYSERVER_MAC_ADDRESS" ]; then + echo "ERROR: the BTCPAYSERVER_MAC_ADDRESS is not specified. Check your project.conf." + exit 1 +fi - # the DOMAIN_LIST is a complete list of all our domains. We often iterate over this list. - DOMAIN_LIST="${PRIMARY_DOMAIN}" - if [ -n "$OTHER_SITES_LIST" ]; then - DOMAIN_LIST="${DOMAIN_LIST},${OTHER_SITES_LIST}" - fi +# the DOMAIN_LIST is a complete list of all our domains. We often iterate over this list. +DOMAIN_LIST="${PRIMARY_DOMAIN}" +if [ -n "$OTHER_SITES_LIST" ]; then + DOMAIN_LIST="${DOMAIN_LIST},${OTHER_SITES_LIST}" +fi - export DOMAIN_LIST="$DOMAIN_LIST" - export DOMAIN_COUNT=$(("$(echo "$DOMAIN_LIST" | tr -cd , | wc -c)"+1)) +export DOMAIN_LIST="$DOMAIN_LIST" +export DOMAIN_COUNT=$(("$(echo "$DOMAIN_LIST" | tr -cd , | wc -c)"+1)) - # let's provision our primary domain first. - export DOMAIN_NAME="$PRIMARY_DOMAIN" +# let's provision our primary domain first. +export DOMAIN_NAME="$PRIMARY_DOMAIN" + +export SITE_PATH="$SITES_PATH/$DOMAIN_NAME" +export PRIMARY_WWW_FQDN="$WWW_HOSTNAME.$DOMAIN_NAME" + + + + +stub_site_definition + +# bring the VMs up under the primary domain name. + +export UPDATE_BTCPAY="$UPDATE_BTCPAY" +export RECONFIGURE_BTCPAY_SERVER="$RECONFIGURE_BTCPAY_SERVER" + +# iterate over all our server endpoints and provision them if needed. +# www +VPS_HOSTNAME= + +if ! lxc image list --format csv | grep -q "$DOCKER_BASE_IMAGE_NAME"; then + # create the lxd base image. + ./create_lxc_base.sh +fi + +for VIRTUAL_MACHINE in www btcpayserver; do + export VIRTUAL_MACHINE="$VIRTUAL_MACHINE" + FQDN= export SITE_PATH="$SITES_PATH/$DOMAIN_NAME" - export PRIMARY_WWW_FQDN="$WWW_HOSTNAME.$DOMAIN_NAME" - stub_site_definition + source "$SITE_PATH/site.conf" + source ./domain_env.sh - # bring the VMs up under the primary domain name. - - export UPDATE_BTCPAY="$UPDATE_BTCPAY" - export RECONFIGURE_BTCPAY_SERVER="$RECONFIGURE_BTCPAY_SERVER" - - # iterate over all our server endpoints and provision them if needed. - # www - VPS_HOSTNAME= - - if ! lxc image list --format csv | grep -q "$DOCKER_BASE_IMAGE_NAME"; then - # create the lxd base image. - ./create_lxc_base.sh + # VALIDATE THE INPUT from the ENVFILE + if [ -z "$DOMAIN_NAME" ]; then + echo "ERROR: DOMAIN_NAME not specified in your site.conf." + exit 1 fi - for VIRTUAL_MACHINE in www btcpayserver; do - export VIRTUAL_MACHINE="$VIRTUAL_MACHINE" - FQDN= + # Goal is to get the macvlan interface. + LXD_SS_CONFIG_LINE= + if lxc network list --format csv --project=default | grep lxdbr0 | grep -q "ss-config"; then + LXD_SS_CONFIG_LINE="$(lxc network list --format csv --project=default | grep lxdbr0 | grep ss-config)" + fi - export SITE_PATH="$SITES_PATH/$DOMAIN_NAME" + if [ -z "$LXD_SS_CONFIG_LINE" ]; then + echo "ERROR: the MACVLAN interface has not been specified. You may need to run 'ss-remote' again." + exit 1 + fi - source "$SITE_PATH/site.conf" - source ./domain_env.sh - - # VALIDATE THE INPUT from the ENVFILE - if [ -z "$DOMAIN_NAME" ]; then - echo "ERROR: DOMAIN_NAME not specified in your site.conf." - exit 1 - fi - - # create the lxc project as specified by PROJECT_NAME - if ! lxc project list | grep -q "$PROJECT_NAME"; then - lxc project create "$PROJECT_NAME" - lxc project set "$PROJECT_NAME" features.networks=true features.images=false features.storage.volumes=false - fi - - # Goal is to get the macvlan interface. - LXD_SS_CONFIG_LINE= - if lxc network list --format csv --project=default | grep lxdbr0 | grep -q "ss-config"; then - LXD_SS_CONFIG_LINE="$(lxc network list --format csv --project=default | grep lxdbr0 | grep ss-config)" - fi - - if [ -z "$LXD_SS_CONFIG_LINE" ]; then - echo "ERROR: the MACVLAN interface has not been specified. You may need to run 'ss-remote' again." - exit 1 - fi - - CONFIG_ITEMS="$(echo "$LXD_SS_CONFIG_LINE" | awk -F'"' '{print $2}')" - DATA_PLANE_MACVLAN_INTERFACE="$(echo "$CONFIG_ITEMS" | cut -d ',' -f2)" - export DATA_PLANE_MACVLAN_INTERFACE="$DATA_PLANE_MACVLAN_INTERFACE" + CONFIG_ITEMS="$(echo "$LXD_SS_CONFIG_LINE" | awk -F'"' '{print $2}')" + DATA_PLANE_MACVLAN_INTERFACE="$(echo "$CONFIG_ITEMS" | cut -d ',' -f2)" + export DATA_PLANE_MACVLAN_INTERFACE="$DATA_PLANE_MACVLAN_INTERFACE" - # Now let's switch to the new project to ensure new resources are created under the project scope. - if ! lxc info | grep "project:" | grep -q "$PROJECT_NAME"; then - echo "INFO: switch to lxd project '$PROJECT_NAME'." - lxc project switch "$PROJECT_NAME" - fi + # Now let's switch to the new project to ensure new resources are created under the project scope. + if ! lxc info | grep "project:" | grep -q "$PROJECT_NAME"; then + lxc project switch "$PROJECT_NAME" + fi - # check if the OVN network exists in this project. - if ! lxc network list | grep -q "ss-ovn"; then - lxc network create ss-ovn --type=ovn network=lxdbr1 ipv6.address=none - fi + # check if the OVN network exists in this project. + if ! lxc network list | grep -q "ss-ovn"; then + lxc network create ss-ovn --type=ovn network=lxdbr1 ipv6.address=none + fi - export MAC_ADDRESS_TO_PROVISION= - export VPS_HOSTNAME="$VPS_HOSTNAME" - export FQDN="$VPS_HOSTNAME.$DOMAIN_NAME" + export MAC_ADDRESS_TO_PROVISION= + export VPS_HOSTNAME="$VPS_HOSTNAME" + export FQDN="$VPS_HOSTNAME.$DOMAIN_NAME" - if [ "$VIRTUAL_MACHINE" = www ]; then - if [ "$SKIP_WWW" = true ]; then - echo "INFO: Skipping WWW due to command line argument." - continue - fi - - FQDN="$WWW_HOSTNAME.$DOMAIN_NAME" - VPS_HOSTNAME="$WWW_HOSTNAME" - MAC_ADDRESS_TO_PROVISION="$WWW_SERVER_MAC_ADDRESS" - ROOT_DISK_SIZE_GB="$((ROOT_DISK_SIZE_GB + NEXTCLOUD_SPACE_GB))" - - elif [ "$VIRTUAL_MACHINE" = btcpayserver ] || [ "$SKIP_BTCPAY" = true ]; then - FQDN="$BTCPAY_HOSTNAME.$DOMAIN_NAME" - VPS_HOSTNAME="$BTCPAY_HOSTNAME" - MAC_ADDRESS_TO_PROVISION="$BTCPAYSERVER_MAC_ADDRESS" - if [ "$BITCOIN_CHAIN" = mainnet ]; then - ROOT_DISK_SIZE_GB=150 - elif [ "$BITCOIN_CHAIN" = testnet ]; then - ROOT_DISK_SIZE_GB=70 - fi - - elif [ "$VIRTUAL_MACHINE" = "$BASE_IMAGE_VM_NAME" ]; then - export FQDN="$BASE_IMAGE_VM_NAME" - ROOT_DISK_SIZE_GB=8 - else - echo "ERROR: VIRTUAL_MACHINE not within allowable bounds." - exit - fi - - export FQDN="$FQDN" - export LXD_VM_NAME="${FQDN//./-}" - export REMOTE_CERT_DIR="$REMOTE_CERT_BASE_DIR/$FQDN" - export MAC_ADDRESS_TO_PROVISION="$MAC_ADDRESS_TO_PROVISION" - export PROJECT_PATH="$PROJECT_PATH" - - ./deploy_vm.sh - - if [ "$VIRTUAL_MACHINE" = www ]; then - # this tells our local docker client to target the remote endpoint via SSH - export DOCKER_HOST="ssh://ubuntu@$PRIMARY_WWW_FQDN" - - # enable docker swarm mode so we can support docker stacks. - if docker info | grep -q "Swarm: inactive"; then - docker swarm init --advertise-addr enp6s0 - fi + if [ "$VIRTUAL_MACHINE" = www ]; then + if [ "$SKIP_WWW" = true ]; then + echo "INFO: Skipping WWW due to command line argument." + continue fi - done + FQDN="$WWW_HOSTNAME.$DOMAIN_NAME" + VPS_HOSTNAME="$WWW_HOSTNAME" + MAC_ADDRESS_TO_PROVISION="$WWW_SERVER_MAC_ADDRESS" + ROOT_DISK_SIZE_GB="$((ROOT_DISK_SIZE_GB + NEXTCLOUD_SPACE_GB))" - # let's stub out the rest of our site definitions, if any. - for DOMAIN_NAME in ${OTHER_SITES_LIST//,/ }; do - export DOMAIN_NAME="$DOMAIN_NAME" - export SITE_PATH="$SITES_PATH/$DOMAIN_NAME" + elif [ "$VIRTUAL_MACHINE" = btcpayserver ] || [ "$SKIP_BTCPAY" = true ]; then + FQDN="$BTCPAY_HOSTNAME.$DOMAIN_NAME" + VPS_HOSTNAME="$BTCPAY_HOSTNAME" + MAC_ADDRESS_TO_PROVISION="$BTCPAYSERVER_MAC_ADDRESS" + if [ "$BITCOIN_CHAIN" = mainnet ]; then + ROOT_DISK_SIZE_GB=150 + elif [ "$BITCOIN_CHAIN" = testnet ]; then + ROOT_DISK_SIZE_GB=70 + fi - # stub out the site_defition if it's doesn't exist. - stub_site_definition - done - - - # now let's run the www and btcpay-specific provisioning scripts. - if [ "$SKIP_WWW" = false ]; then - ./www/go.sh - ssh ubuntu@"$PRIMARY_WWW_FQDN" "echo $LATEST_GIT_COMMIT > /home/ubuntu/.ss-githead" + elif [ "$VIRTUAL_MACHINE" = "$BASE_IMAGE_VM_NAME" ]; then + export FQDN="$BASE_IMAGE_VM_NAME" + ROOT_DISK_SIZE_GB=8 + else + echo "ERROR: VIRTUAL_MACHINE not within allowable bounds." + exit fi - export DOMAIN_NAME="$PRIMARY_DOMAIN" + export FQDN="$FQDN" + export LXD_VM_NAME="${FQDN//./-}" + export MAC_ADDRESS_TO_PROVISION="$MAC_ADDRESS_TO_PROVISION" + export PROJECT_PATH="$PROJECT_PATH" + export ROOT_DISK_SIZE_GB="$ROOT_DISK_SIZE_GB" + + ./deploy_vm.sh + + if [ "$VIRTUAL_MACHINE" = www ]; then + # this tells our local docker client to target the remote endpoint via SSH + export DOCKER_HOST="ssh://ubuntu@$PRIMARY_WWW_FQDN" + + # enable docker swarm mode so we can support docker stacks. + if docker info | grep -q "Swarm: inactive"; then + docker swarm init --advertise-addr enp6s0 + fi + fi + +done + +# let's stub out the rest of our site definitions, if any. +for DOMAIN_NAME in ${OTHER_SITES_LIST//,/ }; do + export DOMAIN_NAME="$DOMAIN_NAME" 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 + # stub out the site_defition if it's doesn't exist. + stub_site_definition +done -done \ No newline at end of file + +# now let's run the www and btcpay-specific provisioning scripts. +if [ "$SKIP_WWW" = false ]; then + ./www/go.sh + ssh ubuntu@"$PRIMARY_WWW_FQDN" "echo $LATEST_GIT_COMMIT > /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 \ No newline at end of file