117 lines
3.2 KiB
Bash
117 lines
3.2 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Dashboard Service
|
|
|
|
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
get_appvars
|
|
|
|
config_dashboard() {
|
|
echo -ne "* Configuring dashboard container.."
|
|
|
|
if [ ! -d "/federated/apps/dashboard" ]; then
|
|
mkdir -p /federated/apps/dashboard/data
|
|
fi
|
|
|
|
cat > /federated/apps/dashboard/docker-compose.yml <<EOF
|
|
services:
|
|
dashboard:
|
|
image: federatedcomputer/dashboard:\${IMAGE_VERSION}
|
|
container_name: dashboard
|
|
hostname: dashboard.$DOMAIN
|
|
restart: always
|
|
networks:
|
|
core:
|
|
ipv4_address: 192.168.0.41
|
|
env_file:
|
|
- ./.env
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.dashboard.rule=Host(\`dashboard.$DOMAIN\`)"
|
|
- "traefik.http.routers.dashboard.entrypoints=websecure"
|
|
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
|
|
|
|
networks:
|
|
core:
|
|
external: true
|
|
EOF
|
|
|
|
cat > /federated/apps/dashboard/.env <<EOF
|
|
IMAGE_VERSION="latest"
|
|
DOMAIN="$DOMAIN"
|
|
TIER="$TIER"
|
|
EOF
|
|
chmod 600 /federated/apps/dashboard/.env
|
|
|
|
if [[ ! -f "/root/.docker/config.json" ]]; then
|
|
[[ ! -d "/root/.docker" ]] && mkdir /root/.docker
|
|
cat > /root/.docker/config.json <<EOF
|
|
{
|
|
"auths": {
|
|
"https://index.docker.io/v1/": {
|
|
"auth": "ZGF2aWRwYXVseW91bmc6VkdBN2F6ajR5ZXQ1bW5oQGV0eA=="
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
chmod 600 /root/.docker/config.json
|
|
fi
|
|
|
|
echo -ne "done."
|
|
}
|
|
start_dashboard() {
|
|
# Start service with command to make sure it's up before proceeding
|
|
start_service "dashboard" "nc -z 192.168.0.41 8080 &> /dev/null" "7"
|
|
|
|
docker exec pdns pdnsutil add-record $DOMAIN dashboard A 86400 $EXTERNALIP &> /dev/null
|
|
[ $? -ne 0 ] && fail "Couldn't add dns record for dashboard"
|
|
|
|
echo -ne "done."
|
|
}
|
|
uninstall_dashboard() {
|
|
echo -ne "* Uninstalling dashboard container.."
|
|
|
|
# First stop the service
|
|
cd /federated/apps/dashboard && docker compose -f docker-compose.yml -p dashboard down &> /dev/null
|
|
|
|
# Delete the app directory
|
|
rm -rf /federated/apps/dashboard
|
|
|
|
# Delete the image
|
|
docker image rm federatedcomputer/dashboard:$IMAGE_VERSION &> /dev/null
|
|
|
|
# Delete the DNS record
|
|
docker exec pdns pdnsutil delete-rrset $DOMAIN dashboard A
|
|
|
|
echo -ne "done.\n"
|
|
}
|
|
email_dashboard() {
|
|
echo -ne "* Sending email to customer.."
|
|
|
|
cat > /federated/apps/mail/data/root/certs/mailfile <<EOF
|
|
<html>
|
|
<img src="https://www.federated.computer/wp-content/uploads/2023/11/logo.png" alt="" /><br>
|
|
<p>
|
|
<h4>Dashboard is now installed on $DOMAIN</h4>
|
|
<p>
|
|
Dear Customer,<br>
|
|
<br>
|
|
We'd like to introduce you to "Dashboard", a simple application listing all the applications installed on your Federated Core. You can find "Dashboard" at <a href="https://dashboard.$DOMAIN">https://dashboard.$DOMAIN</a>
|
|
<br>
|
|
<br>
|
|
This is the first step in a number of big changes you'll be seeing from Federated Computer in the coming months to improve and enhance your Federated Core. Thank you for being a customer!
|
|
<br>
|
|
<br>
|
|
Best,
|
|
<br>
|
|
Federated Computer
|
|
<p>
|
|
</html>
|
|
EOF
|
|
|
|
# Send out e-mail from mail container with details
|
|
docker exec mail bash -c "mail -r admin@$DOMAIN -a \"Content-type: text/html\" -s \"Application installed on $DOMAIN\" $EMAIL < /root/certs/mailfile"
|
|
rm /federated/apps/mail/data/root/certs/mailfile
|
|
|
|
echo -ne "done.\n"
|
|
}
|