diff --git a/bin/convertdomain b/bin/convertdomain index 6911f26..c529266 100755 --- a/bin/convertdomain +++ b/bin/convertdomain @@ -31,25 +31,25 @@ check_gluerecords() { } do_serviceprep() { # Create DNS records for newdomain - docker exec -it pdns pdnsutil create-zone $DOMAIN_NEW - docker exec -it pdns pdnsutil set-kind $DOMAIN_NEW native - docker exec -it pdns pdnsutil set-meta $DOMAIN_NEW SOA-EDIT-API DEFAULT + docker exec pdns pdnsutil create-zone $DOMAIN_NEW + docker exec pdns pdnsutil set-kind $DOMAIN_NEW native + docker exec pdns pdnsutil set-meta $DOMAIN_NEW SOA-EDIT-API DEFAULT for i in ns1 ns2 powerdns traefik mail www computer panel nextcloud collabora jitsi matrix element listmonk vaultwarden vpn wireguard baserow gitea blog documentation podcasts castopod caddy; do - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW $i A 86400 $EXTERNALIP + docker exec pdns pdnsutil add-record $DOMAIN_NEW $i A 86400 $EXTERNALIP done - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW @ NS ns1.$DOMAIN_NEW - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW @ NS ns2.$DOMAIN_NEW - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW @ MX 86400 "10 mail.$DOMAIN_NEW" - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW @ TXT 86400 "\"v=spf1 mx a:$DOMAIN_NEW ~all\"" - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW \* CNAME 86400 www.$DOMAIN_NEW - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW @ A 86400 $EXTERNALIP + docker exec pdns pdnsutil add-record $DOMAIN_NEW @ NS ns1.$DOMAIN_NEW + docker exec pdns pdnsutil add-record $DOMAIN_NEW @ NS ns2.$DOMAIN_NEW + docker exec pdns pdnsutil add-record $DOMAIN_NEW @ MX 86400 "10 mail.$DOMAIN_NEW" + docker exec pdns pdnsutil add-record $DOMAIN_NEW @ TXT 86400 "\"v=spf1 mx a:$DOMAIN_NEW ~all\"" + docker exec pdns pdnsutil add-record $DOMAIN_NEW \* CNAME 86400 www.$DOMAIN_NEW + docker exec pdns pdnsutil add-record $DOMAIN_NEW @ A 86400 $EXTERNALIP # Other pre-prep service stuff - docker exec -it -u 33 nextcloud /var/www/html/occ -vv ldap:delete-config s01 - docker exec -it -u 33 nextcloud /var/www/html/occ app:disable user_ldap - docker exec -it ldap bash -c "slapcat > /root/convertdomain.ldif" + docker exec -u 33 nextcloud /var/www/html/occ -vv ldap:delete-config s01 + docker exec -u 33 nextcloud /var/www/html/occ app:disable user_ldap + docker exec ldap bash -c "slapcat > /root/convertdomain.ldif" # Remove first lines of ldap config, replace dc= with new domain, replace domain name sed -n '/^dn: ou=people,dc=federatedcomputer,dc=cloud$/,$p' /federated/apps/ldap/data/root/convertdomain.ldif > /federated/apps/ldap/data/root/convertdomain1.ldif @@ -179,7 +179,7 @@ convert_ldap() { start_service_convert "ldap" "nc -z $SERVICE_IP 636 &> /dev/null" # This imports the modified LDAP configuration above - docker exec -it ldap bash -c "slapadd -v -l /root/convertdomain1.ldif" &> /dev/null + docker exec ldap bash -c "slapadd -v -l /root/convertdomain1.ldif" &> /dev/null [ $? -ne 0 ] && failcheck "Couldn't slapadd convertdomain1.ldif inside ldap container" echo -ne "done." @@ -205,17 +205,17 @@ convert_mail() { start_service_convert "mail" "nc -z $SERVICE_IP 25 &> /dev/null" # Generate the DKIM DNS key for new domain - docker exec -it mail setup config dkim keysize 2048 domain $DOMAIN_NEW &> /dev/null + docker exec mail setup config dkim keysize 2048 domain $DOMAIN_NEW &> /dev/null [ $? -ne 0 ] && fail "Couldn't generate DKIM record" # Insert the DKIM DNS TXT entry into /federated/apps/pdns container DKIM_RECORD_STRIP=`cat /federated/apps/mail/data/tmp/docker-mailserver/opendkim/keys/$DOMAIN_NEW/mail.txt | sed 's/.*(//'` DKIM_RECORD=`echo $DKIM_RECORD_STRIP | sed 's/).*//'` - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW mail._domainkey TXT 86400 "$DKIM_RECORD" &> /dev/null + docker exec pdns pdnsutil add-record $DOMAIN_NEW mail._domainkey TXT 86400 "$DKIM_RECORD" &> /dev/null [ $? -ne 0 ] && fail "Couldn't insert DKIM record into /federated/apps/pdns container" # Insert the DMARC DNS TXT entry into /federated/apps/pdns container - docker exec -it pdns pdnsutil add-record $DOMAIN_NEW _dmarc TXT 86400 "\"v=DMARC1; p=quarantine; rua=mailto:admin@$DOMAIN_NEW; ruf=mailto:admin@$DOMAIN_NEW; sp=none; ri=86400\"" &> /dev/null + docker exec pdns pdnsutil add-record $DOMAIN_NEW _dmarc TXT 86400 "\"v=DMARC1; p=quarantine; rua=mailto:admin@$DOMAIN_NEW; ruf=mailto:admin@$DOMAIN_NEW; sp=none; ri=86400\"" &> /dev/null [ $? -ne 0 ] && fail "Couldn't insert DMARC record into /federated/apps/pdns container" echo -ne "done." @@ -481,7 +481,7 @@ fi docker exec -u 33 nextcloud /var/www/html/occ group:list # Config admin email - docker exec -it -u 33 nextcloud bash -c "/var/www/html/occ mail:account:create admin admin admin@$DOMAIN_NEW mail.$DOMAIN_NEW 993 ssl admin@$DOMAIN_NEW $ADMINPASS mail.$DOMAIN_NEW 465 ssl admin@$DOMAIN_NEW $ADMINPASS password" + docker exec -u 33 nextcloud bash -c "/var/www/html/occ mail:account:create admin admin admin@$DOMAIN_NEW mail.$DOMAIN_NEW 993 ssl admin@$DOMAIN_NEW $ADMINPASS mail.$DOMAIN_NEW 465 ssl admin@$DOMAIN_NEW $ADMINPASS password" # Remove configs rm /federated/apps/nextcloud/data/var/www/html/config.sh /federated/apps/nextcloud/data/var/www/html/configs.json @@ -494,11 +494,11 @@ convert_matrix() { # Delete matrix database so we can start from scratch MATRIX_SECRET=$(create_password); - docker exec -it postgresql psql -U postgres -c "drop database matrix" &> /dev/null - docker exec -it postgresql psql -U postgres -c "drop user matrix" &> /dev/null - docker exec -it postgresql psql -U postgres -c "CREATE USER matrix WITH PASSWORD '$MATRIX_SECRET'" - docker exec -it postgresql psql -U postgres -c "CREATE DATABASE matrix" - docker exec -it postgresql psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE matrix TO matrix" + docker exec postgresql psql -U postgres -c "drop database matrix" &> /dev/null + docker exec postgresql psql -U postgres -c "drop user matrix" &> /dev/null + docker exec postgresql psql -U postgres -c "CREATE USER matrix WITH PASSWORD '$MATRIX_SECRET'" + docker exec postgresql psql -U postgres -c "CREATE DATABASE matrix" + docker exec postgresql psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE matrix TO matrix" sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/matrix/docker-compose.yml sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/matrix/.env @@ -614,9 +614,9 @@ convert_listmonk() { start_service_convert "listmonk" "nc -z $SERVICE_IP 9000 &> /dev/null" # Change app.root_url and other settings to our domain - docker exec -it postgresql psql -U listmonk -c "update settings set value='\"http://listmonk.$DOMAIN_NEW\"' where key='app.root_url'" &> /dev/null - docker exec -it postgresql psql -U listmonk -c "update settings set value='\"listmonk \"' where key='app.from_email'" &> /dev/null - docker exec -it postgresql psql -U listmonk -c "update settings set value='[{\"host\": \"mail.$DOMAIN_NEW\", \"port\": 587, \"enabled\": true, \"password\": \"$ADMINPASS\", \"tls_type\": \"STARTTLS\", \"username\": \"admin\", \"max_conns\": 10, \"idle_timeout\": \"15s\", \"wait_timeout\": \"5s\", \"auth_protocol\": \"login\", \"email_headers\": [], \"hello_hostname\": \"\", \"max_msg_retries\": 2, \"tls_skip_verify\": false}, {\"host\": \"smtp.gmail.com\", \"port\": 465, \"enabled\": false, \"password\": \"password\", \"tls_type\": \"TLS\", \"username\": \"username@gmail.com\", \"max_conns\": 10, \"idle_timeout\": \"15s\", \"wait_timeout\": \"5s\", \"auth_protocol\": \"login\", \"email_headers\": [], \"hello_hostname\": \"\", \"max_msg_retries\": 2, \"tls_skip_verify\": false}]' where key='smtp';" &> /dev/null + docker exec postgresql psql -U listmonk -c "update settings set value='\"http://listmonk.$DOMAIN_NEW\"' where key='app.root_url'" &> /dev/null + docker exec postgresql psql -U listmonk -c "update settings set value='\"listmonk \"' where key='app.from_email'" &> /dev/null + docker exec postgresql psql -U listmonk -c "update settings set value='[{\"host\": \"mail.$DOMAIN_NEW\", \"port\": 587, \"enabled\": true, \"password\": \"$ADMINPASS\", \"tls_type\": \"STARTTLS\", \"username\": \"admin\", \"max_conns\": 10, \"idle_timeout\": \"15s\", \"wait_timeout\": \"5s\", \"auth_protocol\": \"login\", \"email_headers\": [], \"hello_hostname\": \"\", \"max_msg_retries\": 2, \"tls_skip_verify\": false}, {\"host\": \"smtp.gmail.com\", \"port\": 465, \"enabled\": false, \"password\": \"password\", \"tls_type\": \"TLS\", \"username\": \"username@gmail.com\", \"max_conns\": 10, \"idle_timeout\": \"15s\", \"wait_timeout\": \"5s\", \"auth_protocol\": \"login\", \"email_headers\": [], \"hello_hostname\": \"\", \"max_msg_retries\": 2, \"tls_skip_verify\": false}]' where key='smtp';" &> /dev/null echo -ne "done." } @@ -696,13 +696,13 @@ convert_baserow() { sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/baserow/docker-compose.yml sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/baserow/.env - docker exec -it postgresql bash -c "psql -U baserow -c \"update auth_user set username='admin@$DOMAIN_NEW' where username='admin@$DOMAIN'\"" &> /dev/null + docker exec postgresql bash -c "psql -U baserow -c \"update auth_user set username='admin@$DOMAIN_NEW' where username='admin@$DOMAIN'\"" &> /dev/null [ $? -ne 0 ] && fail "Couldn't update auth_user table in baserow" - docker exec -it postgresql bash -c "psql -U baserow -c \"update auth_user set email='admin@$DOMAIN_NEW' where email='admin@$DOMAIN'\"" &> /dev/null + docker exec postgresql bash -c "psql -U baserow -c \"update auth_user set email='admin@$DOMAIN_NEW' where email='admin@$DOMAIN'\"" &> /dev/null [ $? -ne 0 ] && fail "Couldn't update auth_user table in baserow" - start_service_convert "baserow" "docker exec -it baserow curl http://localhost:8000 &> /dev/null" + start_service_convert "baserow" "docker exec baserow curl http://localhost:8000 &> /dev/null" echo -ne "done." } @@ -715,10 +715,10 @@ convert_gitea() { sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/gitea/data/data/gitea/conf/app.ini # Replace users in Gitea postgres database with new domain name - for i in `docker exec -it postgresql bash -c "psql -U gitea -t -c 'select * from email_address;' | grep $DOMAIN" | awk -F\@ '{ print $1 }' | awk '{ print $5 }'`; do + for i in `docker exec postgresql bash -c "psql -U gitea -t -c 'select * from email_address;' | grep $DOMAIN" | awk -F\@ '{ print $1 }' | awk '{ print $5 }'`; do USER="$i"; - docker exec -it postgresql bash -c "psql -U gitea -c \"update email_address set email='$USER@$DOMAIN_NEW' where email='$USER@$DOMAIN'\"" - docker exec -it postgresql bash -c "psql -U gitea -c \"update email_address set lower_email='$USER@$DOMAIN_NEW' where lower_email='$USER@$DOMAIN'\"" + docker exec postgresql bash -c "psql -U gitea -c \"update email_address set email='$USER@$DOMAIN_NEW' where email='$USER@$DOMAIN'\"" + docker exec postgresql bash -c "psql -U gitea -c \"update email_address set lower_email='$USER@$DOMAIN_NEW' where lower_email='$USER@$DOMAIN'\"" done # Grab the container IP from docker-compose @@ -763,8 +763,65 @@ convert_castopod() { start_service_convert "castopod" "nc -z $SERVICE_IP 8000 &> /dev/null" MYSQL_ROOTPASSWORD=`cat /federated/apps/pdnsmysql/.env | grep MYSQL_ROOT_PASSWORD | awk -F= '{ print $2 }'` - docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -e \"update cp_auth_identities set secret='admin@$DOMAIN_NEW' where id='1';\"" - docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -e \"update cp_users set username='admin@$DOMAIN_NEW' where id='1';\"" + docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD castopod -e \"update cp_auth_identities set secret='admin@$DOMAIN_NEW' where id='1';\"" + docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD castopod -e \"update cp_users set username='admin@$DOMAIN_NEW' where id='1';\"" + + echo -ne "done." +} +convert_autodiscover() { + #### Convert Autodiscover + echo -ne "\n* Converting autodiscover.." + + sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/autodiscover/docker-compose.yml + sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/autodiscover/.env + sed -i "s#COMPANY_NAME=.*#COMPANY_NAME=$ORG_NEW#g" /federated/apps/autodiscover/.env + + # Add DNS records for auto discovery + docker exec pdns pdnsutil add-record $DOMAIN_NEW autoconfig A 86400 $EXTERNALIP + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW autodiscover A 86400 $EXTERNALIP + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW @ TXT 86400 "\"mailconf=https://autoconfig.$DOMAIN_NEW/mail/config-v1.1.xml\"" + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW _imaps._tcp SRV 86400 "0 0 993 mail.$DOMAIN_NEW" + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW _pop3s._tcp SRV 86400 "0 0 995 mail.$DOMAIN_NEW" + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW _imaps._tcp SRV 86400 "0 0 993 mail.$DOMAIN_NEW" + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW _submission._tcp SRV 86400 "0 0 587 $DOMAIN_NEW" + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW _autodiscover._tcp SRV 86400 "0 0 443 autodiscover.$DOMAIN_NEW" + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + docker exec pdns pdnsutil add-record $DOMAIN_NEW _ldap._tcp SRV 86400 "0 0 636 ldap.$DOMAIN_NEW" + [ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery" + + # Grab the container IP from docker-compose + SERVICE_IP=`grep ipv4_address /federated/apps/autodiscover/docker-compose.yml | awk '{ print $2 }'` + + # Start service with command to make sure it's up before proceeding + start_service_convert "autodiscover" "nc -z $SERVICE_IP 8000 &> /dev/null" + + echo -ne "done." +} +convert_wordpress() { + #### Convert Wordpress + echo -ne "\n* Converting wordpress.." + + sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/wordpress/docker-compose.yml + sed -i "s#$DOMAIN#$DOMAIN_NEW#g" /federated/apps/wordpress/.env + sed -i "s#WORDPRESS_BLOG_NAME=.*#WORDPRESS_BLOG_NAME=$ORG_NEW#g" /federated/apps/wordpress/.env + + docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD wordpress -e \"update wp_users set user_login='admin@$DOMAIN_NEW' where ID='1';\"" + docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD wordpress -e \"update wp_users set user_email='admin@$DOMAIN_NEW' where ID='1';\"" + docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD wordpress -e \"update wp_usermeta set meta_value='admin@$DOMAIN_NEW' where meta_value='admin@$DOMAIN';\"" + docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD wordpress -e \"update wp_users set display_name='admin@$DOMAIN_NEW' where ID='1';\"" + + # Grab the container IP from docker-compose + SERVICE_IP=`grep ipv4_address /federated/apps/wordpress/docker-compose.yml | awk '{ print $2 }'` + + # Start service with command to make sure it's up before proceeding + start_service_convert "wordpress" "nc -z $SERVICE_IP 8080 &> /dev/null" echo -ne "done." } @@ -798,7 +855,7 @@ LDAP_SECRET=`cat /federated/apps/ldap/.ldap.secret` echo -ne "\n\nConverting Federated Core $DOMAIN to $DOMAIN_NEW.\n\n" -#check_gluerecords +check_gluerecords do_serviceprep # Stop all services @@ -822,3 +879,5 @@ convert_baserow convert_gitea convert_caddy convert_castopod +convert_autodiscover +convert_wordpress