From 95a5828ffb96552491691bfad1b1998544a5508b Mon Sep 17 00:00:00 2001 From: "mike.wooskey" Date: Mon, 23 Dec 2024 08:45:33 -0500 Subject: [PATCH 1/7] Add speedtest-tracker. --- README.md | 1 + speedtest-tracker/.env-dist | 50 ++++++++++++++ speedtest-tracker/Makefile | 40 +++++++++++ speedtest-tracker/README.md | 43 ++++++++++++ .../docker-compose.instance.yaml | 66 +++++++++++++++++++ speedtest-tracker/docker-compose.yaml | 32 +++++++++ speedtest-tracker/traefik-cert.pem | 1 + speedtest-tracker/traefik-key.pem | 1 + 8 files changed, 234 insertions(+) create mode 100644 speedtest-tracker/.env-dist create mode 100644 speedtest-tracker/Makefile create mode 100644 speedtest-tracker/README.md create mode 100644 speedtest-tracker/docker-compose.instance.yaml create mode 100644 speedtest-tracker/docker-compose.yaml create mode 100644 speedtest-tracker/traefik-cert.pem create mode 100644 speedtest-tracker/traefik-key.pem diff --git a/README.md b/README.md index d7b82c25..5c21a11b 100644 --- a/README.md +++ b/README.md @@ -581,6 +581,7 @@ Install these other services at your leisure/preference: * [SFTP](sftp#readme) - a secure file server * [Shaarli](shaarli#readme) - a bookmark manager * [Smokeping](smokeping#readme) - a network latency measurement tool +* [Speedtest Tracker](speedtest-tracker#readme) - a network performance monitor * [Step-CA](step-ca) - a secure, online, self-hosted Certificate Authority (CA) * [Syncthing](syncthing#readme) - a multi-device file synchronization tool * [Sysbox-Systemd](sysbox-systemd#readme) - a traditional service manager for Linux running in an unprivileged container via sysbox-runc diff --git a/speedtest-tracker/.env-dist b/speedtest-tracker/.env-dist new file mode 100644 index 00000000..dd7ae3a3 --- /dev/null +++ b/speedtest-tracker/.env-dist @@ -0,0 +1,50 @@ +# The docker image to use (linuxserver's registry only supports the "latest" tag +# (https://fleet.linuxserver.io/image?name=linuxserver/speedtest-tracker): +SPEEDTEST_TRACKER_IMAGE=lscr.io/linuxserver/speedtest-tracker:latest + +# The domain name for the speedtest-tracker service: +SPEEDTEST_TRACKER_TRAEFIK_HOST=speedtest-tracker.example.com + +# The name of this instance. If there is only one instance, use 'default'. +SPEEDTEST_TRACKER_INSTANCE= + +# Filter access by IP address source range (CIDR): +##Disallow all access: 0.0.0.0/32 +##Allow all access: 0.0.0.0/0 +SPEEDTEST_TRACKER_IP_SOURCERANGE=0.0.0.0/0 + +# HTTP Basic Authentication: +# Use `make config` to fill this in properly, or set this to blank to disable. +SPEEDTEST_TRACKER_HTTP_AUTH= + +# OAUTH2 +# Set to `true` to use OpenID/OAuth2 authentication via the +# traefik-forward-auth service in d.rymcg.tech. +# Using OpenID/OAuth2 will require login to access your app, +# but it will not affect what a successfully logged-in person can do in your +# app. If your app has built-in authentication and can check the user +# header that traefik-forward-auth sends, then your app can limit what the +# logged-in person can do in the app. But if your app can't check the user +# header, or if your app doesn't have built-in authentication at all, then +# any person with an account on your Gitea server can log into your app and +# have full access. +SPEEDTEST_TRACKER_OAUTH2= +# In addition to Oauth2 authentication, you can configure basic authorization +# by entering which authorization group can log into your app. You create +# groups of email addresses in the `traefik` folder by running `make groups`. +SPEEDTEST_TRACKER_OAUTH2_AUTHORIZED_GROUP= + +# Mutual TLS (mTLS): +# Set true or false. If true, all clients must present a certificate signed by Step-CA: +SPEEDTEST_TRACKER_MTLS_AUTH=false +# Enter a comma separated list of client domains allowed to connect via mTLS. +# Wildcards are allowed and encouraged on a per-app basis: +SPEEDTEST_TRACKER_MTLS_AUTHORIZED_CERTS=*.clients.speedtest-tracker.example.com + +SPEEDTEST_TRACKER_APP_KEY= +SPEEDTEST_TRACKER_UID=1000 +SPEEDTEST_TRACKER_GID=1000 +SPEEDTEST_TRACKER_ADMIN_NAME= +SPEEDTEST_TRACKER_ADMIN_EMAIL= +SPEEDTEST_TRACKER_ADMIN_PASSWORD= +SPEEDTEST_TRACKER_DISPLAY_TIMEZONE=utc diff --git a/speedtest-tracker/Makefile b/speedtest-tracker/Makefile new file mode 100644 index 00000000..8e3ff680 --- /dev/null +++ b/speedtest-tracker/Makefile @@ -0,0 +1,40 @@ +ROOT_DIR = .. +include ${ROOT_DIR}/_scripts/Makefile.projects +include ${ROOT_DIR}/_scripts/Makefile.instance + +.PHONY: config-hook +config-hook: + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_TRAEFIK_HOST "Enter the speedtest-tracker domain name" speedtest-tracker${INSTANCE_URL_SUFFIX}.${ROOT_DOMAIN} + @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_INSTANCE=$${instance:-default} + @${BIN}/reconfigure_auth ${ENV_FILE} SPEEDTEST_TRACKER + @echo + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_NAME "Enter the admin user's login name" + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_EMAIL "Enter the admin user's email" + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_PASSWORD "Enter the admin user's password" + @echo + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_DISPLAY_TIMEZONE "Enter the server's timezone" + @echo + @${BIN}/reconfigure_password ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY 32 + @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY=$$(key=$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_TRACKER_APP_KEY); [[ "$${key}" == base64:* ]] && echo "$${key}" || echo "base64:$${key}") + @echo + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_UID "Enter the host UID to map to the container UID" + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_GID "Enter the host GID to map to the container GID" + @echo + +.PHONY: override-hook +override-hook: +#### This sets the override template variables for docker-compose.instance.yaml: +#### The template dynamically renders to docker-compose.override_{DOCKER_CONTEXT}_{INSTANCE}.yaml +#### These settings are used to automatically generate the service container labels, and traefik config, inside the template. +#### The variable arguments have three forms: `=` `=:` `=@` +#### name=VARIABLE_NAME # sets the template 'name' field to the value of VARIABLE_NAME found in the .env file +#### # (this hardcodes the value into docker-compose.override.yaml) +#### name=:VARIABLE_NAME # sets the template 'name' field to the literal string 'VARIABLE_NAME' +#### # (this hardcodes the string into docker-compose.override.yaml) +#### name=@VARIABLE_NAME # sets the template 'name' field to the literal string '${VARIABLE_NAME}' +#### # (used for regular docker-compose expansion of env vars by name.) + @${BIN}/docker_compose_override ${ENV_FILE} project=:speedtest-tracker instance=@SPEEDTEST_TRACKER_INSTANCE traefik_host=@SPEEDTEST_TRACKER_TRAEFIK_HOST http_auth=SPEEDTEST_TRACKER_HTTP_AUTH http_auth_var=@SPEEDTEST_TRACKER_HTTP_AUTH ip_sourcerange=@SPEEDTEST_TRACKER_IP_SOURCERANGE oauth2=SPEEDTEST_TRACKER_OAUTH2 authorized_group=SPEEDTEST_TRACKER_OAUTH2_AUTHORIZED_GROUP enable_mtls_auth=SPEEDTEST_TRACKER_MTLS_AUTH mtls_authorized_certs=SPEEDTEST_TRACKER_MTLS_AUTHORIZED_CERTS + +.PHONY: shell +shell: + @make --no-print-directory docker-compose-shell SERVICE=speedtest-tracker diff --git a/speedtest-tracker/README.md b/speedtest-tracker/README.md new file mode 100644 index 00000000..9173c606 --- /dev/null +++ b/speedtest-tracker/README.md @@ -0,0 +1,43 @@ +# Speedtest Tracker + +[Speedtest Tracker](https://github.com/alexjustesen/speedtest-tracker) is a +self-hosted application that monitors the performance and uptime of your +internet connection.. + +## Config + +``` +make config +``` + +This will ask you to enter the domain name to use. It automatically saves your +responses into the configuration file `.env_{INSTANCE}`. + +### Authentication and Authorization + +See [AUTH.md](../AUTH.md) for information on adding external authentication on +top of your app. + +## Install + +``` +make install +``` + +## Open + +``` +make open +``` + +This will automatically open the page in your web browser, and will prefill the +HTTP Basic Authentication password if you enabled it (and chose to store it in +`passwords.json`). + +## Destroy + +``` +make destroy +``` + +This completely removes the container and all its volumes. diff --git a/speedtest-tracker/docker-compose.instance.yaml b/speedtest-tracker/docker-compose.instance.yaml new file mode 100644 index 00000000..aea4f6b2 --- /dev/null +++ b/speedtest-tracker/docker-compose.instance.yaml @@ -0,0 +1,66 @@ +#! This is a ytt template file for docker-compose.override.yaml +#! References: +#! https://carvel.dev/ytt +#! https://docs.docker.com/compose/extends/#adding-and-overriding-configuration +#! https://github.com/enigmacurry/d.rymcg.tech#overriding-docker-composeyaml-per-instance + +#! ### Standard project vars: +#@ load("@ytt:data", "data") +#@ project = data.values.project +#@ instance = data.values.instance +#@ context = data.values.context +#@ traefik_host = data.values.traefik_host +#@ ip_sourcerange = data.values.ip_sourcerange +#@ enable_http_auth = len(data.values.http_auth.strip()) > 0 +#@ http_auth = data.values.http_auth_var +#@ enable_oauth2 = data.values.oauth2 == "true" +#@ authorized_group = data.values.authorized_group +#@ enable_mtls_auth = data.values.enable_mtls_auth == "true" +#@ mtls_authorized_certs = data.values.mtls_authorized_certs +#@ enabled_middlewares = [] + +#@yaml/text-templated-strings +services: + speedtest-tracker: + #@ service = "speedtest-tracker" + labels: + - "backup-volume.stop-during-backup=true" + #! Services must opt-in to be proxied by Traefik: + - "traefik.enable=true" + + #! 'router' is the fully qualified key in traefik for this router/service: project + instance + service + #@ router = "{}-{}-{}".format(project,instance,service) + + #! The host matching router rule: + - "traefik.http.routers.(@= router @).rule=Host(`(@= traefik_host @)`)" + - "traefik.http.routers.(@= router @).entrypoints=websecure" + + #@ enabled_middlewares.append("{}-ipallowlist".format(router)) + - "traefik.http.middlewares.(@= router @)-ipallowlist.ipallowlist.sourcerange=(@= ip_sourcerange @)" + #@ if enable_http_auth: + #@ enabled_middlewares.append("{}-basicauth".format(router)) + - "traefik.http.middlewares.(@= router @)-basicauth.basicauth.users=(@= http_auth @)" + - "traefik.http.middlewares.(@= router @)-basicauth.basicauth.headerField=X-Forwarded-User" + #@ end + + #@ if enable_oauth2: + #@ enabled_middlewares.append("traefik-forward-auth@docker") + #@ enabled_middlewares.append("header-authorization-group-{}@file".format(authorized_group)) + #@ end + + #@ if enable_mtls_auth: + - "traefik.http.routers.(@= router @).tls.options=step_ca_mTLS@file" + #@ if len(mtls_authorized_certs): + - "traefik.http.middlewares.mtlsauth-(@= router @).plugin.certauthz.domains=(@= mtls_authorized_certs @)" + #@ enabled_middlewares.append("mtlsauth-{}".format(router)) + #@ end + #@ enabled_middlewares.append("mtls-header@file") + #@ end + + #! Override the default port that the app binds to: + #! You don't normally need to do this, as long as your image has + #! an EXPOSE directive in it, Traefik will autodetect it, but this is how you can override it: + #!- "traefik.http.services.(@= router @).loadbalancer.server.port=8080" + + #! Apply all middlewares (do this at the end!) + - "traefik.http.routers.(@= router @).middlewares=(@= ','.join(enabled_middlewares) @)" diff --git a/speedtest-tracker/docker-compose.yaml b/speedtest-tracker/docker-compose.yaml new file mode 100644 index 00000000..97f0ae38 --- /dev/null +++ b/speedtest-tracker/docker-compose.yaml @@ -0,0 +1,32 @@ +services: + speedtest-tracker: + image: ${SPEEDTEST_TRACKER_IMAGE} + restart: unless-stopped + #ports: + # - 8080:80 + # - 8443:443 + environment: + - PUID=${SPEEDTEST_TRACKER_UID} + - PGID=${SPEEDTEST_TRACKER_GID} + - APP_KEY=${SPEEDTEST_TRACKER_APP_KEY} + - DB_CONNECTION=sqlite + - ADMIN_NAME=${SPEEDTEST_TRACKER_ADMIN_NAME} + - ADMIN_EMAIL=${SPEEDTEST_TRACKER_ADMIN_EMAIL} + - ADMIN_PASSWORD=${SPEEDTEST_TRACKER_ADMIN_PASSWORD} + - DISPLAY_TIMEZONE=${SPEEDTEST_TRACKER_DISPLAY_TIMEZONE} + - APP_URL=${SPEEDTEST_TRACKER_TRAEFIK_HOST} + - ASSET_URL=${SPEEDTEST_TRACKER_TRAEFIK_HOST} + volumes: + - data:/config + - keys:/config/keys + #cap_drop: + # - ALL + #security_opt: + # - no-new-privileges:true + #sysctls: + # - net.ipv4.ip_unprivileged_port_start=1024 + labels: [] + +volumes: + data: + keys: \ No newline at end of file diff --git a/speedtest-tracker/traefik-cert.pem b/speedtest-tracker/traefik-cert.pem new file mode 100644 index 00000000..494a1064 --- /dev/null +++ b/speedtest-tracker/traefik-cert.pem @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdBekNDQk91Z0F3SUJBZ0lTQXpERjIzeVNmSU5uRno4UWF6S2dGVWNPTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURNeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rd3dDZ1lEVlFRRApFd05TTVRFd0hoY05NalF4TVRFd01UTTFPRE0wV2hjTk1qVXdNakE0TVRNMU9ETXpXakFhTVJnd0ZnWURWUVFECkV3OTBhR1YzYjI5emEyVjVjeTVqYjIwd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUMKQVFENlNEVHlnU040MlV0UFNJRG9wTVVzcjhCRlpESFp1bVRVVW03c21QUjc4d1lGa25RWi9mdkdRQmpwc3hEOQp4elhuaVZLL0VjVUpuWncyUytiQnMwZnFuUG9hRGg4VmdtQUFxY20wMU5icE5rOTAwUnYvM0dkRDJmNHVXRVB6CjVWY1FNdTBncGJIWHIvU2dwd2NXSmZya2RURitmWDBYeEd0MjlSazlSeTFUZEJ0UCtIYVFTQkZrVjZVL3EzelUKUXBLczl5MlROYytBRnBNMTFLK1JGV3RVUy9HdUFMdyt1c1ptakIrNVIxejdNOTlaeExmbFI4ekFoM2p4ZCtvdAp4MzJldUdhZUlybWUxV0hkRjVCWjdTSWxvZ2ZTcVN1SG9EWU1BVDEvbW9uUmE5OGtzcjhrNEI0UXZpNTAzSXBOCld1dllNcmhDaUlNRkdGVnBGQ1RvbjF0RUZpcTJqVSs1dTJuRHByUVBBYnloMG1nL3Mrd0xSQmxSeTNaWGdIM2cKcEtrUUM4ZVRpcDVTVkhmQ2pwRkZqeG9KbmVoaUhBWEVCcEVubmZ4NW1wK1dsalU4SVhVTDdHOW0zTGpSNklacAptTkZYczhGOHVEc2l5MzFSanlRQ2MyR1JoV2FPaFo2NWJ6ZWN5ZUdGdzcvaFVCeWZIYTJRdlNtU0draXBZSy9UCkdCOHhaYlpjWUlQK0xERXFoOVk3SVhVTXJmVmxGQWNDcGhFZHQ5eDdqRUJSZmJxN2gvaytsUFVMbms5amsveksKQ3Q3Q1FPcktaSkN0bVJYK2VFZXV0amY3TERCVmNhbmd1UkZvcWJpUzFGUU1pcjc5UlBKNkZjajN2S0R0SitiUgpxbWdCLzMxWnU1NVl1MWVENG1OZ3lSbE9oY2RhNlpDT2hJTDVGVFVha0tmbFlRSURBUUFCbzRJQ0tEQ0NBaVF3CkRnWURWUjBQQVFIL0JBUURBZ1dnTUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFqQU0KQmdOVkhSTUJBZjhFQWpBQU1CMEdBMVVkRGdRV0JCU2Q4TWJqS1A1cG1ZRmdZWU5rOEVYOEQveUQ4ekFmQmdOVgpIU01FR0RBV2dCVEZ6MGFrNnZURHdIcHNsY1F0c0Y2U0x5Ymp1VEJYQmdnckJnRUZCUWNCQVFSTE1Fa3dJZ1lJCkt3WUJCUVVITUFHR0ZtaDBkSEE2THk5eU1URXVieTVzWlc1amNpNXZjbWN3SXdZSUt3WUJCUVVITUFLR0YyaDAKZEhBNkx5OXlNVEV1YVM1c1pXNWpjaTV2Y21jdk1DMEdBMVVkRVFRbU1DU0NFU291ZEdobGQyOXZjMnRsZVhNdQpZMjl0Z2c5MGFHVjNiMjl6YTJWNWN5NWpiMjB3RXdZRFZSMGdCQXd3Q2pBSUJnWm5nUXdCQWdFd2dnRUdCZ29yCkJnRUVBZFo1QWdRQ0JJSDNCSUgwQVBJQWR3Q2k0d3JrUmUrOXJadCtPTzFIWjNkVDE0SmJoSlRYSzE0YkxNUzUKVUtSSDV3QUFBWk1XbEJaOEFBQUVBd0JJTUVZQ0lRQzVNNFhFWnNmMUtnMy94Q3FvbWJBcHRMUUNEYUtXZGdDZApyY0hiUTVGU3h3SWhBTVJvTnNLTzdSeW9IVUp0TlZtblFXZ2hwWHJyYWNJRUh3cUs2cUh3aDdmQkFIY0FFMHJmCkdyV1lRZ2w0REcvdlRIcVJwQmEzSTBuT1dGZHEzNjdhcDhLcjRDSUFBQUdURnBRWFZ3QUFCQU1BU0RCR0FpRUEKcGdMbE14WGJzVThGdWdWdy9aK3dJRXNNcStRS1pveDZ5bkFqclNmVGNlUUNJUUN0Q2xkTmFNTnJjMWRVa1p2YgowbXNJMGxUNEJyMGd2UHlTMzhkMTAya2xlakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBbnVITXM0NHlLRXZkCkJOa01ISDJIelM4OG0xYmVQRmNwa0l1U01NcmZ0bklFWlRpaUFydzNCYVpXSXJ5OTI2ZU8rZFhKMDlxaDV1NUgKT3hDTnNJU0VHK0RYSTVXVmc2SU1kM3BtQ1pFaDhmdUM0NEFJNXBBamlBeVM0NlJ5MnhEQkYzYUY2MCt2T3dFRQpZOVFpU0tXSktmYm00R2xmR0Nwbk43NTRuU2xsVFpTWlMyZ3NKbEFGRCs4ZWxUTkVGMnJMZXdkZGpLQ3VvbU8zCit1Y2VIQ2Zib2RrYnJmNGx5TDQvQlBaREpJRUQrRVdNMnBXN3phQ04wTDRQZThSVTZVbHRLbzViM0JVMXlUUUgKYTF4amFVSCtWUmNMWVhaTXlqUkdMYU9obmw3cVFoMzAxNlJ3UjV4RXBQTk9qVHBjSm9yVG96OWZrbXRHSEQ1bwp4UDRZVUZXRExBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZCakNDQXU2Z0F3SUJBZ0lSQUlwOVBoUFdMekR2STRhOUtRZHJOUGd3RFFZSktvWklodmNOQVFFTEJRQXcKVHpFTE1Ba0dBMVVFQmhNQ1ZWTXhLVEFuQmdOVkJBb1RJRWx1ZEdWeWJtVjBJRk5sWTNWeWFYUjVJRkpsYzJWaApjbU5vSUVkeWIzVndNUlV3RXdZRFZRUURFd3hKVTFKSElGSnZiM1FnV0RFd0hoY05NalF3TXpFek1EQXdNREF3CldoY05NamN3TXpFeU1qTTFPVFU1V2pBek1Rc3dDUVlEVlFRR0V3SlZVekVXTUJRR0ExVUVDaE1OVEdWMEozTWcKUlc1amNubHdkREVNTUFvR0ExVUVBeE1EVWpFeE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQXVvZThYQnNBT2N2S0NzM1VaeEQ1QVR5bFRxVmh5eWJLVXZzVkFiZTVLUFVvSHUwbnN5UVlPV2NKCkRBanM0RHF3TzNjT3ZmUGxPVlJCREU2dVFkYVpkTjVSMis5Ny8xaTlxTGNUOXQ0eDFmSnl5WEpxQzROMGxaeEcKQUdRVW1mT3gyU0xaemFpU3Fod21lai8rNzFnRmV3aVZnZHR4RDQ3NzR6RUp1d20rVUUxZmo1RjJQVnFkbm9QeQo2Y1JtcytFR1prTklHSUJsb0RjWW1wdUVNcGV4c3IzRStCVUFuU2VJKytKakY1WnNteWRuUzhUYktGNXB3bm53ClNWemdKRkRoeEx5aEJheDdRRzBBdE1KQlA2ZFl1Qy9GWEp1bHV3bWU4Zjdyc0lVNS9hZ0s3MFhFZU90bEtzTFAKWHp6ZTQxeE5HL2NMSnl1cUMwSjNVMDk1YWgySDJRSURBUUFCbzRINE1JSDFNQTRHQTFVZER3RUIvd1FFQXdJQgpoakFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdFd0VnWURWUjBUQVFIL0JBZ3dCZ0VCCi93SUJBREFkQmdOVkhRNEVGZ1FVeGM5R3BPcjB3OEI2YkpYRUxiQmVraThtNDdrd0h3WURWUjBqQkJnd0ZvQVUKZWJSWjVudTI1ZVFCYzRBSWlNZ2FXUGJwbTI0d01nWUlLd1lCQlFVSEFRRUVKakFrTUNJR0NDc0dBUVVGQnpBQwpoaFpvZEhSd09pOHZlREV1YVM1c1pXNWpjaTV2Y21jdk1CTUdBMVVkSUFRTU1Bb3dDQVlHWjRFTUFRSUJNQ2NHCkExVWRId1FnTUI0d0hLQWFvQmlHRm1oMGRIQTZMeTk0TVM1akxteGxibU55TG05eVp5OHdEUVlKS29aSWh2Y04KQVFFTEJRQURnZ0lCQUU3aWlWMEtBeHlRT05EMUgvbHhYUGpEajdJM2lIcHZzQ1VmN2I2MzJJWUdqdWtKaE0xeQp2NEh6L01yUFUwanR2ZlpwUXRTbEVUNDF5Qk95a2gwRlgrb3UxTmo0U2NPdDlabVduTzhtMk9HMEpBdElJRTM4CjAxUzBxY1loeU9FMkcvOTNaQ2tYdWZCTDcxM3F6WG5RdjVDL3ZpT3lrTnBLcVVneGRLbEVDK0hpOWkyRGNhUjEKZTlLVXdRVVpSaHk1ai9QRWRFZ2xLZzNsOWR0RDR0dVRtN2tadEI4djMyb09qekhUWXcrN0tkemRaaXcvc0J0bgpVZmhCUE9STnVheTRwSnhtWS9XcmhTTWR6Rk8ycTNHdTNNVUJjZG8yN2dvWUtqTDlDVEY4ai9aejU1eWN0VW9WCmFuZUNXcy9halVYK0h5cGtCVEErYzhMR0RMbldPMk5LcTBZRC9wbkFSa0FuWUdQZlVEb0hSOWdWU3AvcVJ4K1oKV2doaURMWnNNd2hOMXpqdFNDMHVCV2l1Z0YzdlROellJRUZmYVBHN1dzM2pEckFNTVllYlE5NUpRK0hJQkQvUgpQQnVIUlRCcHFLbHlEbmtTSERIWVBpTlgzYWRQb1BBY2dkRjNIMi9XMHJtb3N3TVdnVGxMbjFXdTBtcmtzNy9xCnBkV2ZTNlBKMWp0eTgwcjJWS3NNL0RqM1lJRGZialhLZGFGVTVDKzhiaGZKR3FVM3RhS2F1dXowd0hWR1QzZW8KNkZsV2tXWXRidDRwZ2RhbWx3VmVaRVcrTE03cVpFSkVzTU5QcmZDMDNBUEttWnNKZ3BXQ0RXT0tadmtaY3ZqVgp1WWtRNG9tWUNUWDVvaHkra25NamRPbWRIOWM3U3BxRVdCREM4NmZpTmV4K08wWE9NRVpTYThEQQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== diff --git a/speedtest-tracker/traefik-key.pem b/speedtest-tracker/traefik-key.pem new file mode 100644 index 00000000..e21a85ae --- /dev/null +++ b/speedtest-tracker/traefik-key.pem @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS1FJQkFBS0NBZ0VBK2tnMDhvRWplTmxMVDBpQTZLVEZMSy9BUldReDJicGsxRkp1N0pqMGUvTUdCWkowCkdmMzd4a0FZNmJNUS9jYzE1NGxTdnhIRkNaMmNOa3Ztd2JOSDZwejZHZzRmRllKZ0FLbkp0TlRXNlRaUGRORWIKLzl4blE5bitMbGhEOCtWWEVETHRJS1d4MTYvMG9LY0hGaVg2NUhVeGZuMTlGOFJyZHZVWlBVY3RVM1FiVC9oMgprRWdSWkZlbFA2dDgxRUtTclBjdGt6WFBnQmFUTmRTdmtSVnJWRXZ4cmdDOFByckdab3dmdVVkYyt6UGZXY1MzCjVVZk13SWQ0OFhmcUxjZDlucmhtbmlLNW50VmgzUmVRV2UwaUphSUgwcWtyaDZBMkRBRTlmNXFKMFd2ZkpMSy8KSk9BZUVMNHVkTnlLVFZycjJESzRRb2lEQlJoVmFSUWs2SjliUkJZcXRvMVB1YnRwdzZhMER3RzhvZEpvUDdQcwpDMFFaVWN0MlY0Qjk0S1NwRUF2SGs0cWVVbFIzd282UlJZOGFDWjNvWWh3RnhBYVJKNTM4ZVpxZmxwWTFQQ0YxCkMreHZadHk0MGVpR2FaalJWN1BCZkxnN0lzdDlVWThrQW5OaGtZVm1qb1dldVc4M25NbmhoY08vNFZBY254MnQKa0wwcGtocElxV0N2MHhnZk1XVzJYR0NEL2l3eEtvZldPeUYxREszMVpSUUhBcVlSSGJmY2U0eEFVWDI2dTRmNQpQcFQxQzU1UFk1UDh5Z3Jld2tEcXltU1FyWmtWL25oSHJyWTMreXd3VlhHcDRMa1JhS200a3RSVURJcSsvVVR5CmVoWEk5N3lnN1NmbTBhcG9BZjk5V2J1ZVdMdFhnK0pqWU1rWlRvWEhXdW1Ram9TQytSVTFHcENuNVdFQ0F3RUEKQVFLQ0FnRUE2MmhETk4wMlNoTEgvUGlMRjBiemxvWndhRlJIZHkwVWJZaGpnUEtVOG9pdzMwalRIeWQvU3djNgo1NFZmcy9OTnhrdXBvc0hKL0xOY0hNM2phOGwvR1RNeElwU3B0QWQrMk9EYU1kWUhsaTlaS04wT1l1Z2gwUFlYClYrdjVia3dHU2R3OG9YcDMvaEVvSEhzOTlSMGdFUVlSMlpHYXVXSXNXaVZLNmhJcWxkWWRZbWltekNxZEFTNVcKNWI0Y21XRk1xSmVOTEd0dWttR3BjUFp0ZEI4YlpweFA0NFFaaXo4T0lhSW1ySlJzNW5IeDRITmhMSzBON3dEOQpSdEd0V0FYTktCNzFsa08vSjZBNGZrWU5waWVlK0pxZ2xRbzlRVUgxMC9ET3NWamZ6RFNVRytac1Z2amVEbzF6CkVNUG02YjlkR1dzTFdMa2gwd2NDUHVXTm1hZFpwS0tzRTFVbTBDeVYwdVNLbGgvc2VkOHBFemcxMks3bDNTckkKeEdndU4xNXZnbzhYeG52UVdGTmlGSks4SHdxbTEzSWs0QWhEVWd2bWZNbDhvVDJDcyszT3RvSVdNcHpnNkNtQwpoUXg4NC9SMGJ6N3F4VUJBU05VVE5OR05UMU9pZWtEK0Z3SnpZeWp5c2IycmpIUzdVQWJnWjhZckRva3VmWVBtCkgrMmZYd3k1SngvaEE5RlYzclpraVJjZmlITW9VS3V4c3YrQVJkUzdIVjBiYTJpSVRJZjBjVjhFQXZqNXVVMGwKSTJ2S1NpaWNLd1ZrSkp6SWpKR3BxNUZHdjB3ZkxJM3kxblFIZFg4RlFMOFAzQzhjanU5aGZjNGRCeThVd3NMUQo0ZzdqUU5iaUNnaEVmaThyN0Z2MFpCQjNyU3ZWNCtSTEVrbVZJVDdTYnBUalZXNzI0TWtDZ2dFQkFQcS85eXZkClF4cGpDZ01OZkNlbkJjRlY2eXpQOGg1M2VzcGdqbExuYlBxMk5jblRBbzZwUDZ2ZkhQNXZlQytob1pXa2RxSWQKejRyVndmTTVwUGtZN20yOE1EV2JXSWtXYnFFN1BDVHB4dlc0MUFwZ09xSVUvZUdrQVF0OFhHUUp0Qy81bDV4Twp5K0wwanpTY2VxYzBVYjdkdG5xS2tQdk9JRWdSWTJMRG4wdWVXV0RVQWVCUWRTVEFhTmJJU2h5TWMreHNxRnphCk5YbThmTU9UWDIxMnBnUDV0ejJtNUdOd01xcVY4VVYzanRGRDFmcUlheHZHeHYrZ0ZlWmdHSHpHT3BMMGxjQmwKUkFtU3FUUmVCcHJ1RVNoVk5iMFk5MGFZaE1uMUhhaGRjbDhkMEN4L0JycTd4UEs5TUxDU0p1SmlMeWpYbTdNNApzN3Nob0FWUStVRmhyeXNDZ2dFQkFQK0Z1OXl6R29yb1J3WGRBQkRSa1VsM01FekRpU0pRMlBoVzBTdy9jclM1CjZSOTNveDR6R2drVHp3UFhJK3NpK244anlwaWgrOWgvOHJRVk5Pd1FnNmpJR2h6cllhQ2RZYzc4Y3V5cEZZMjkKUmh1KzJZakthby9wUE5OcXgwblZ4cTFUcmxLaGh5WmJITjFhTXNXSVBsbXJGNDQ4UFBZZkFkQVREMUtiQWhZKwpTK3psVkEzSmdCYzNldnZkUHJvNzl3bWpIMTZZSW5ydE02TkJ6b1JyNkRFTUd5UjNJOGJNM0F2dEpBOWpOY2ZrCjhxR0JQTVRaMTcwMWJwZVBTcGdzTDhNQnhXVWt4dXR2dzhqWDVhalNFNDRpWkh1aTV0cmVKVEJOcGxuaFJJb3kKTFpoYjZpWkxnbDNLNCtZSzRUcG5CVFRqb0VMbFlLZXhQdnZtSFNucGw2TUNnZ0VCQU9jV2IwYWZuYTM5eEVaWAo4U25pQmEzTjd2VFhsNzE0UTFPcmRMNzJ4VHF4SGhVb1FGMFZvYlpWNHJTaUtsTkxWRTFDeW9wUml1bmFZZW8wCkg5UHBwQ0xCb25Say9FMHF2VDRlQnluRndUVEg1N0xBU0lrRGE0Njl4TEMvSmE2VU90bFQzdU9Rd3RvZ3BMSEoKM0Vlb01nWUM4cDh3Z0xsdmw5U1RJZEx0a2lyd2ZsSjhVRlpZRC8yVXpZblVBR2tiRCtLOXFOUVp6ZHFwV1JvdApBVzh5UDRHK2E1K0g1VWUzS1JxSklWZngvVTdpZzV0bWliK0ppL0FkcXRFcmtxVzdVbFFJME5JRkFaVUk4cU51ClhBd0FoeE55cEJubm5rd1RWNTJBSnByNXMrUHc1OTk2R2N1U0xNbkFqZFRNZk1WNTB4aUN5OTE1empvUm5SWUoKTUEyUFp3MENnZ0VBWDJuNHRIak11SUh6dzJTNjJZem55NThPRWh3UjRSWi9ibnc4cjJFaDNBcHYycWc1Nk5UOApLOWVSdmNWZ1REVkxoSjVBMEszcjlQUVNGTnkyWGsvc1dlSWVuaDNtM3FybUV2eUJqWTIxMXErT3RsMlZyVmFvClpBU2NDZllkWkp6SEM0SHIzajhpMEZmRmQ0SnU0d1AxQkZhMi9RM1JWYlpPWHZ3L0JJR05UZkVGT1BpSllueVQKc0JldmZNMG8xekg5RlVRc09vNWtrYkp4VGMwTTZMWENoazRXOUk3b2RSdWFMM25sdFRrK285NENHL3krVEdOcwpBK01uNE1CSkFubTllL3YxVWNkaDRCaGo2Mk56Qm84cmJpKzVoZEZXa3ZQUXZ6Qy9wV0JRejZuZERMK0Z0N2NLCmZ5dDczakxCMTZVUWRLZHErSS9lZjcvWDNRZ1lhOFltTVFLQ0FRQlc2ciszbnB1eVdFcWdPWTV0elFFcDBQOTkKTGZYVjJRQk5oUnd1RTAyYXlOYUp0emFrMVhQQ2NHZEsvUm14U1c3Z2RSeXhzbXB6aTh3N0l1b0xJQ20vSGhsbwp0blRLZ0h4eElhMm5Sd0tISUQ4SzE5TSs3d2FpRTZRRlhYSXBKTEhMbmQ5aUNoa3U5eGE0alozN05NNlZQbGFQCnNEVzMxZUdXMUpEai9PODBtZk92M0VHalVoNFhiYjIvTlAyZ0ZTUGxpWmNpMlc3Q2FnV2k5R0JrOFlDRVFBNEkKajRpV0QyOWw3UE1kOHFubjFyOXhkaXdmZDBtMXhuc2ZsS1Q3NHdKUXN2Y09qY09sMk1ucnRPc002RTRSVGdHRQpPME1hSmY1MWV3NEdJb2Nob256SHhSdEt6WDJlbFdKRlI0QlBoc2ZxdUphR3FEbzNOUGhTVm13cEdhREEKLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K From 129d5881848e2bac7c75481f32db353072ce63a6 Mon Sep 17 00:00:00 2001 From: Mike Wooskey Date: Mon, 23 Dec 2024 18:39:12 +0000 Subject: [PATCH 2/7] remove *.pem --- speedtest-tracker/traefik-cert.pem | 1 - speedtest-tracker/traefik-key.pem | 1 - 2 files changed, 2 deletions(-) delete mode 100644 speedtest-tracker/traefik-cert.pem delete mode 100644 speedtest-tracker/traefik-key.pem diff --git a/speedtest-tracker/traefik-cert.pem b/speedtest-tracker/traefik-cert.pem deleted file mode 100644 index 494a1064..00000000 --- a/speedtest-tracker/traefik-cert.pem +++ /dev/null @@ -1 +0,0 @@ -LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdBekNDQk91Z0F3SUJBZ0lTQXpERjIzeVNmSU5uRno4UWF6S2dGVWNPTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURNeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rd3dDZ1lEVlFRRApFd05TTVRFd0hoY05NalF4TVRFd01UTTFPRE0wV2hjTk1qVXdNakE0TVRNMU9ETXpXakFhTVJnd0ZnWURWUVFECkV3OTBhR1YzYjI5emEyVjVjeTVqYjIwd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUMKQVFENlNEVHlnU040MlV0UFNJRG9wTVVzcjhCRlpESFp1bVRVVW03c21QUjc4d1lGa25RWi9mdkdRQmpwc3hEOQp4elhuaVZLL0VjVUpuWncyUytiQnMwZnFuUG9hRGg4VmdtQUFxY20wMU5icE5rOTAwUnYvM0dkRDJmNHVXRVB6CjVWY1FNdTBncGJIWHIvU2dwd2NXSmZya2RURitmWDBYeEd0MjlSazlSeTFUZEJ0UCtIYVFTQkZrVjZVL3EzelUKUXBLczl5MlROYytBRnBNMTFLK1JGV3RVUy9HdUFMdyt1c1ptakIrNVIxejdNOTlaeExmbFI4ekFoM2p4ZCtvdAp4MzJldUdhZUlybWUxV0hkRjVCWjdTSWxvZ2ZTcVN1SG9EWU1BVDEvbW9uUmE5OGtzcjhrNEI0UXZpNTAzSXBOCld1dllNcmhDaUlNRkdGVnBGQ1RvbjF0RUZpcTJqVSs1dTJuRHByUVBBYnloMG1nL3Mrd0xSQmxSeTNaWGdIM2cKcEtrUUM4ZVRpcDVTVkhmQ2pwRkZqeG9KbmVoaUhBWEVCcEVubmZ4NW1wK1dsalU4SVhVTDdHOW0zTGpSNklacAptTkZYczhGOHVEc2l5MzFSanlRQ2MyR1JoV2FPaFo2NWJ6ZWN5ZUdGdzcvaFVCeWZIYTJRdlNtU0draXBZSy9UCkdCOHhaYlpjWUlQK0xERXFoOVk3SVhVTXJmVmxGQWNDcGhFZHQ5eDdqRUJSZmJxN2gvaytsUFVMbms5amsveksKQ3Q3Q1FPcktaSkN0bVJYK2VFZXV0amY3TERCVmNhbmd1UkZvcWJpUzFGUU1pcjc5UlBKNkZjajN2S0R0SitiUgpxbWdCLzMxWnU1NVl1MWVENG1OZ3lSbE9oY2RhNlpDT2hJTDVGVFVha0tmbFlRSURBUUFCbzRJQ0tEQ0NBaVF3CkRnWURWUjBQQVFIL0JBUURBZ1dnTUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFqQU0KQmdOVkhSTUJBZjhFQWpBQU1CMEdBMVVkRGdRV0JCU2Q4TWJqS1A1cG1ZRmdZWU5rOEVYOEQveUQ4ekFmQmdOVgpIU01FR0RBV2dCVEZ6MGFrNnZURHdIcHNsY1F0c0Y2U0x5Ymp1VEJYQmdnckJnRUZCUWNCQVFSTE1Fa3dJZ1lJCkt3WUJCUVVITUFHR0ZtaDBkSEE2THk5eU1URXVieTVzWlc1amNpNXZjbWN3SXdZSUt3WUJCUVVITUFLR0YyaDAKZEhBNkx5OXlNVEV1YVM1c1pXNWpjaTV2Y21jdk1DMEdBMVVkRVFRbU1DU0NFU291ZEdobGQyOXZjMnRsZVhNdQpZMjl0Z2c5MGFHVjNiMjl6YTJWNWN5NWpiMjB3RXdZRFZSMGdCQXd3Q2pBSUJnWm5nUXdCQWdFd2dnRUdCZ29yCkJnRUVBZFo1QWdRQ0JJSDNCSUgwQVBJQWR3Q2k0d3JrUmUrOXJadCtPTzFIWjNkVDE0SmJoSlRYSzE0YkxNUzUKVUtSSDV3QUFBWk1XbEJaOEFBQUVBd0JJTUVZQ0lRQzVNNFhFWnNmMUtnMy94Q3FvbWJBcHRMUUNEYUtXZGdDZApyY0hiUTVGU3h3SWhBTVJvTnNLTzdSeW9IVUp0TlZtblFXZ2hwWHJyYWNJRUh3cUs2cUh3aDdmQkFIY0FFMHJmCkdyV1lRZ2w0REcvdlRIcVJwQmEzSTBuT1dGZHEzNjdhcDhLcjRDSUFBQUdURnBRWFZ3QUFCQU1BU0RCR0FpRUEKcGdMbE14WGJzVThGdWdWdy9aK3dJRXNNcStRS1pveDZ5bkFqclNmVGNlUUNJUUN0Q2xkTmFNTnJjMWRVa1p2YgowbXNJMGxUNEJyMGd2UHlTMzhkMTAya2xlakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBbnVITXM0NHlLRXZkCkJOa01ISDJIelM4OG0xYmVQRmNwa0l1U01NcmZ0bklFWlRpaUFydzNCYVpXSXJ5OTI2ZU8rZFhKMDlxaDV1NUgKT3hDTnNJU0VHK0RYSTVXVmc2SU1kM3BtQ1pFaDhmdUM0NEFJNXBBamlBeVM0NlJ5MnhEQkYzYUY2MCt2T3dFRQpZOVFpU0tXSktmYm00R2xmR0Nwbk43NTRuU2xsVFpTWlMyZ3NKbEFGRCs4ZWxUTkVGMnJMZXdkZGpLQ3VvbU8zCit1Y2VIQ2Zib2RrYnJmNGx5TDQvQlBaREpJRUQrRVdNMnBXN3phQ04wTDRQZThSVTZVbHRLbzViM0JVMXlUUUgKYTF4amFVSCtWUmNMWVhaTXlqUkdMYU9obmw3cVFoMzAxNlJ3UjV4RXBQTk9qVHBjSm9yVG96OWZrbXRHSEQ1bwp4UDRZVUZXRExBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZCakNDQXU2Z0F3SUJBZ0lSQUlwOVBoUFdMekR2STRhOUtRZHJOUGd3RFFZSktvWklodmNOQVFFTEJRQXcKVHpFTE1Ba0dBMVVFQmhNQ1ZWTXhLVEFuQmdOVkJBb1RJRWx1ZEdWeWJtVjBJRk5sWTNWeWFYUjVJRkpsYzJWaApjbU5vSUVkeWIzVndNUlV3RXdZRFZRUURFd3hKVTFKSElGSnZiM1FnV0RFd0hoY05NalF3TXpFek1EQXdNREF3CldoY05NamN3TXpFeU1qTTFPVFU1V2pBek1Rc3dDUVlEVlFRR0V3SlZVekVXTUJRR0ExVUVDaE1OVEdWMEozTWcKUlc1amNubHdkREVNTUFvR0ExVUVBeE1EVWpFeE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQXVvZThYQnNBT2N2S0NzM1VaeEQ1QVR5bFRxVmh5eWJLVXZzVkFiZTVLUFVvSHUwbnN5UVlPV2NKCkRBanM0RHF3TzNjT3ZmUGxPVlJCREU2dVFkYVpkTjVSMis5Ny8xaTlxTGNUOXQ0eDFmSnl5WEpxQzROMGxaeEcKQUdRVW1mT3gyU0xaemFpU3Fod21lai8rNzFnRmV3aVZnZHR4RDQ3NzR6RUp1d20rVUUxZmo1RjJQVnFkbm9QeQo2Y1JtcytFR1prTklHSUJsb0RjWW1wdUVNcGV4c3IzRStCVUFuU2VJKytKakY1WnNteWRuUzhUYktGNXB3bm53ClNWemdKRkRoeEx5aEJheDdRRzBBdE1KQlA2ZFl1Qy9GWEp1bHV3bWU4Zjdyc0lVNS9hZ0s3MFhFZU90bEtzTFAKWHp6ZTQxeE5HL2NMSnl1cUMwSjNVMDk1YWgySDJRSURBUUFCbzRINE1JSDFNQTRHQTFVZER3RUIvd1FFQXdJQgpoakFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdFd0VnWURWUjBUQVFIL0JBZ3dCZ0VCCi93SUJBREFkQmdOVkhRNEVGZ1FVeGM5R3BPcjB3OEI2YkpYRUxiQmVraThtNDdrd0h3WURWUjBqQkJnd0ZvQVUKZWJSWjVudTI1ZVFCYzRBSWlNZ2FXUGJwbTI0d01nWUlLd1lCQlFVSEFRRUVKakFrTUNJR0NDc0dBUVVGQnpBQwpoaFpvZEhSd09pOHZlREV1YVM1c1pXNWpjaTV2Y21jdk1CTUdBMVVkSUFRTU1Bb3dDQVlHWjRFTUFRSUJNQ2NHCkExVWRId1FnTUI0d0hLQWFvQmlHRm1oMGRIQTZMeTk0TVM1akxteGxibU55TG05eVp5OHdEUVlKS29aSWh2Y04KQVFFTEJRQURnZ0lCQUU3aWlWMEtBeHlRT05EMUgvbHhYUGpEajdJM2lIcHZzQ1VmN2I2MzJJWUdqdWtKaE0xeQp2NEh6L01yUFUwanR2ZlpwUXRTbEVUNDF5Qk95a2gwRlgrb3UxTmo0U2NPdDlabVduTzhtMk9HMEpBdElJRTM4CjAxUzBxY1loeU9FMkcvOTNaQ2tYdWZCTDcxM3F6WG5RdjVDL3ZpT3lrTnBLcVVneGRLbEVDK0hpOWkyRGNhUjEKZTlLVXdRVVpSaHk1ai9QRWRFZ2xLZzNsOWR0RDR0dVRtN2tadEI4djMyb09qekhUWXcrN0tkemRaaXcvc0J0bgpVZmhCUE9STnVheTRwSnhtWS9XcmhTTWR6Rk8ycTNHdTNNVUJjZG8yN2dvWUtqTDlDVEY4ai9aejU1eWN0VW9WCmFuZUNXcy9halVYK0h5cGtCVEErYzhMR0RMbldPMk5LcTBZRC9wbkFSa0FuWUdQZlVEb0hSOWdWU3AvcVJ4K1oKV2doaURMWnNNd2hOMXpqdFNDMHVCV2l1Z0YzdlROellJRUZmYVBHN1dzM2pEckFNTVllYlE5NUpRK0hJQkQvUgpQQnVIUlRCcHFLbHlEbmtTSERIWVBpTlgzYWRQb1BBY2dkRjNIMi9XMHJtb3N3TVdnVGxMbjFXdTBtcmtzNy9xCnBkV2ZTNlBKMWp0eTgwcjJWS3NNL0RqM1lJRGZialhLZGFGVTVDKzhiaGZKR3FVM3RhS2F1dXowd0hWR1QzZW8KNkZsV2tXWXRidDRwZ2RhbWx3VmVaRVcrTE03cVpFSkVzTU5QcmZDMDNBUEttWnNKZ3BXQ0RXT0tadmtaY3ZqVgp1WWtRNG9tWUNUWDVvaHkra25NamRPbWRIOWM3U3BxRVdCREM4NmZpTmV4K08wWE9NRVpTYThEQQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== diff --git a/speedtest-tracker/traefik-key.pem b/speedtest-tracker/traefik-key.pem deleted file mode 100644 index e21a85ae..00000000 --- a/speedtest-tracker/traefik-key.pem +++ /dev/null @@ -1 +0,0 @@ -LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS1FJQkFBS0NBZ0VBK2tnMDhvRWplTmxMVDBpQTZLVEZMSy9BUldReDJicGsxRkp1N0pqMGUvTUdCWkowCkdmMzd4a0FZNmJNUS9jYzE1NGxTdnhIRkNaMmNOa3Ztd2JOSDZwejZHZzRmRllKZ0FLbkp0TlRXNlRaUGRORWIKLzl4blE5bitMbGhEOCtWWEVETHRJS1d4MTYvMG9LY0hGaVg2NUhVeGZuMTlGOFJyZHZVWlBVY3RVM1FiVC9oMgprRWdSWkZlbFA2dDgxRUtTclBjdGt6WFBnQmFUTmRTdmtSVnJWRXZ4cmdDOFByckdab3dmdVVkYyt6UGZXY1MzCjVVZk13SWQ0OFhmcUxjZDlucmhtbmlLNW50VmgzUmVRV2UwaUphSUgwcWtyaDZBMkRBRTlmNXFKMFd2ZkpMSy8KSk9BZUVMNHVkTnlLVFZycjJESzRRb2lEQlJoVmFSUWs2SjliUkJZcXRvMVB1YnRwdzZhMER3RzhvZEpvUDdQcwpDMFFaVWN0MlY0Qjk0S1NwRUF2SGs0cWVVbFIzd282UlJZOGFDWjNvWWh3RnhBYVJKNTM4ZVpxZmxwWTFQQ0YxCkMreHZadHk0MGVpR2FaalJWN1BCZkxnN0lzdDlVWThrQW5OaGtZVm1qb1dldVc4M25NbmhoY08vNFZBY254MnQKa0wwcGtocElxV0N2MHhnZk1XVzJYR0NEL2l3eEtvZldPeUYxREszMVpSUUhBcVlSSGJmY2U0eEFVWDI2dTRmNQpQcFQxQzU1UFk1UDh5Z3Jld2tEcXltU1FyWmtWL25oSHJyWTMreXd3VlhHcDRMa1JhS200a3RSVURJcSsvVVR5CmVoWEk5N3lnN1NmbTBhcG9BZjk5V2J1ZVdMdFhnK0pqWU1rWlRvWEhXdW1Ram9TQytSVTFHcENuNVdFQ0F3RUEKQVFLQ0FnRUE2MmhETk4wMlNoTEgvUGlMRjBiemxvWndhRlJIZHkwVWJZaGpnUEtVOG9pdzMwalRIeWQvU3djNgo1NFZmcy9OTnhrdXBvc0hKL0xOY0hNM2phOGwvR1RNeElwU3B0QWQrMk9EYU1kWUhsaTlaS04wT1l1Z2gwUFlYClYrdjVia3dHU2R3OG9YcDMvaEVvSEhzOTlSMGdFUVlSMlpHYXVXSXNXaVZLNmhJcWxkWWRZbWltekNxZEFTNVcKNWI0Y21XRk1xSmVOTEd0dWttR3BjUFp0ZEI4YlpweFA0NFFaaXo4T0lhSW1ySlJzNW5IeDRITmhMSzBON3dEOQpSdEd0V0FYTktCNzFsa08vSjZBNGZrWU5waWVlK0pxZ2xRbzlRVUgxMC9ET3NWamZ6RFNVRytac1Z2amVEbzF6CkVNUG02YjlkR1dzTFdMa2gwd2NDUHVXTm1hZFpwS0tzRTFVbTBDeVYwdVNLbGgvc2VkOHBFemcxMks3bDNTckkKeEdndU4xNXZnbzhYeG52UVdGTmlGSks4SHdxbTEzSWs0QWhEVWd2bWZNbDhvVDJDcyszT3RvSVdNcHpnNkNtQwpoUXg4NC9SMGJ6N3F4VUJBU05VVE5OR05UMU9pZWtEK0Z3SnpZeWp5c2IycmpIUzdVQWJnWjhZckRva3VmWVBtCkgrMmZYd3k1SngvaEE5RlYzclpraVJjZmlITW9VS3V4c3YrQVJkUzdIVjBiYTJpSVRJZjBjVjhFQXZqNXVVMGwKSTJ2S1NpaWNLd1ZrSkp6SWpKR3BxNUZHdjB3ZkxJM3kxblFIZFg4RlFMOFAzQzhjanU5aGZjNGRCeThVd3NMUQo0ZzdqUU5iaUNnaEVmaThyN0Z2MFpCQjNyU3ZWNCtSTEVrbVZJVDdTYnBUalZXNzI0TWtDZ2dFQkFQcS85eXZkClF4cGpDZ01OZkNlbkJjRlY2eXpQOGg1M2VzcGdqbExuYlBxMk5jblRBbzZwUDZ2ZkhQNXZlQytob1pXa2RxSWQKejRyVndmTTVwUGtZN20yOE1EV2JXSWtXYnFFN1BDVHB4dlc0MUFwZ09xSVUvZUdrQVF0OFhHUUp0Qy81bDV4Twp5K0wwanpTY2VxYzBVYjdkdG5xS2tQdk9JRWdSWTJMRG4wdWVXV0RVQWVCUWRTVEFhTmJJU2h5TWMreHNxRnphCk5YbThmTU9UWDIxMnBnUDV0ejJtNUdOd01xcVY4VVYzanRGRDFmcUlheHZHeHYrZ0ZlWmdHSHpHT3BMMGxjQmwKUkFtU3FUUmVCcHJ1RVNoVk5iMFk5MGFZaE1uMUhhaGRjbDhkMEN4L0JycTd4UEs5TUxDU0p1SmlMeWpYbTdNNApzN3Nob0FWUStVRmhyeXNDZ2dFQkFQK0Z1OXl6R29yb1J3WGRBQkRSa1VsM01FekRpU0pRMlBoVzBTdy9jclM1CjZSOTNveDR6R2drVHp3UFhJK3NpK244anlwaWgrOWgvOHJRVk5Pd1FnNmpJR2h6cllhQ2RZYzc4Y3V5cEZZMjkKUmh1KzJZakthby9wUE5OcXgwblZ4cTFUcmxLaGh5WmJITjFhTXNXSVBsbXJGNDQ4UFBZZkFkQVREMUtiQWhZKwpTK3psVkEzSmdCYzNldnZkUHJvNzl3bWpIMTZZSW5ydE02TkJ6b1JyNkRFTUd5UjNJOGJNM0F2dEpBOWpOY2ZrCjhxR0JQTVRaMTcwMWJwZVBTcGdzTDhNQnhXVWt4dXR2dzhqWDVhalNFNDRpWkh1aTV0cmVKVEJOcGxuaFJJb3kKTFpoYjZpWkxnbDNLNCtZSzRUcG5CVFRqb0VMbFlLZXhQdnZtSFNucGw2TUNnZ0VCQU9jV2IwYWZuYTM5eEVaWAo4U25pQmEzTjd2VFhsNzE0UTFPcmRMNzJ4VHF4SGhVb1FGMFZvYlpWNHJTaUtsTkxWRTFDeW9wUml1bmFZZW8wCkg5UHBwQ0xCb25Say9FMHF2VDRlQnluRndUVEg1N0xBU0lrRGE0Njl4TEMvSmE2VU90bFQzdU9Rd3RvZ3BMSEoKM0Vlb01nWUM4cDh3Z0xsdmw5U1RJZEx0a2lyd2ZsSjhVRlpZRC8yVXpZblVBR2tiRCtLOXFOUVp6ZHFwV1JvdApBVzh5UDRHK2E1K0g1VWUzS1JxSklWZngvVTdpZzV0bWliK0ppL0FkcXRFcmtxVzdVbFFJME5JRkFaVUk4cU51ClhBd0FoeE55cEJubm5rd1RWNTJBSnByNXMrUHc1OTk2R2N1U0xNbkFqZFRNZk1WNTB4aUN5OTE1empvUm5SWUoKTUEyUFp3MENnZ0VBWDJuNHRIak11SUh6dzJTNjJZem55NThPRWh3UjRSWi9ibnc4cjJFaDNBcHYycWc1Nk5UOApLOWVSdmNWZ1REVkxoSjVBMEszcjlQUVNGTnkyWGsvc1dlSWVuaDNtM3FybUV2eUJqWTIxMXErT3RsMlZyVmFvClpBU2NDZllkWkp6SEM0SHIzajhpMEZmRmQ0SnU0d1AxQkZhMi9RM1JWYlpPWHZ3L0JJR05UZkVGT1BpSllueVQKc0JldmZNMG8xekg5RlVRc09vNWtrYkp4VGMwTTZMWENoazRXOUk3b2RSdWFMM25sdFRrK285NENHL3krVEdOcwpBK01uNE1CSkFubTllL3YxVWNkaDRCaGo2Mk56Qm84cmJpKzVoZEZXa3ZQUXZ6Qy9wV0JRejZuZERMK0Z0N2NLCmZ5dDczakxCMTZVUWRLZHErSS9lZjcvWDNRZ1lhOFltTVFLQ0FRQlc2ciszbnB1eVdFcWdPWTV0elFFcDBQOTkKTGZYVjJRQk5oUnd1RTAyYXlOYUp0emFrMVhQQ2NHZEsvUm14U1c3Z2RSeXhzbXB6aTh3N0l1b0xJQ20vSGhsbwp0blRLZ0h4eElhMm5Sd0tISUQ4SzE5TSs3d2FpRTZRRlhYSXBKTEhMbmQ5aUNoa3U5eGE0alozN05NNlZQbGFQCnNEVzMxZUdXMUpEai9PODBtZk92M0VHalVoNFhiYjIvTlAyZ0ZTUGxpWmNpMlc3Q2FnV2k5R0JrOFlDRVFBNEkKajRpV0QyOWw3UE1kOHFubjFyOXhkaXdmZDBtMXhuc2ZsS1Q3NHdKUXN2Y09qY09sMk1ucnRPc002RTRSVGdHRQpPME1hSmY1MWV3NEdJb2Nob256SHhSdEt6WDJlbFdKRlI0QlBoc2ZxdUphR3FEbzNOUGhTVm13cEdhREEKLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K From 99aa8a619a506be8440df4567b48f06a4ddd63e1 Mon Sep 17 00:00:00 2001 From: "mike.wooskey" Date: Thu, 23 Jan 2025 15:34:03 -0500 Subject: [PATCH 3/7] Add scheduled tests and other app configs. --- speedtest-tracker/.env-dist | 20 +++++++++++++++++++- speedtest-tracker/Makefile | 14 ++++++++++++-- speedtest-tracker/docker-compose.yaml | 27 ++++++++++++++++----------- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/speedtest-tracker/.env-dist b/speedtest-tracker/.env-dist index dd7ae3a3..dca161ec 100644 --- a/speedtest-tracker/.env-dist +++ b/speedtest-tracker/.env-dist @@ -41,10 +41,28 @@ SPEEDTEST_TRACKER_MTLS_AUTH=false # Wildcards are allowed and encouraged on a per-app basis: SPEEDTEST_TRACKER_MTLS_AUTHORIZED_CERTS=*.clients.speedtest-tracker.example.com +# Set the application's name as it will appear on the dashboard and in notifications. +SPEEDTEST_APP_NAME= + SPEEDTEST_TRACKER_APP_KEY= SPEEDTEST_TRACKER_UID=1000 SPEEDTEST_TRACKER_GID=1000 SPEEDTEST_TRACKER_ADMIN_NAME= SPEEDTEST_TRACKER_ADMIN_EMAIL= SPEEDTEST_TRACKER_ADMIN_PASSWORD= -SPEEDTEST_TRACKER_DISPLAY_TIMEZONE=utc +SPEEDTEST_APP_DEBUG=false + +# Server is configured to store timestamps in UTC. Set this to display +# timestamps in a specific timezone. +SPEEDTEST_TRACKER_DISPLAY_TIMEZONE=UTC + +# Set to "true" to enable the public dashboard for guest (unauthenticated) +# users. +SPEEDTEST_PUBLIC_DASHBOARD=false + +# Cron expression used to run speedtests on a scheduled basis. +SPEEDTEST_SCHEDULE=6 */2 * * * + +# Set the value to greater than zero to prune stored results. This value should +# be represented in days, e.g. 7 will purge all results over 7 days old. +SPEEDTEST_PRUNE_RESULTS_OLDER_THAN=7 diff --git a/speedtest-tracker/Makefile b/speedtest-tracker/Makefile index 8e3ff680..0a4e5f6d 100644 --- a/speedtest-tracker/Makefile +++ b/speedtest-tracker/Makefile @@ -8,13 +8,23 @@ config-hook: @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_INSTANCE=$${instance:-default} @${BIN}/reconfigure_auth ${ENV_FILE} SPEEDTEST_TRACKER @echo + @ALLOW_BLANK=1 ${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_APP_NAME "Enter the application's name as it will appear on the dashboard and in notifications. Or leave this bank to use the default (\"Speedtest Tracker\")" + @echo @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_NAME "Enter the admin user's login name" @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_EMAIL "Enter the admin user's email" @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_PASSWORD "Enter the admin user's password" @echo - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_DISPLAY_TIMEZONE "Enter the server's timezone" + @${BIN}/confirm $$(test "$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_PUBLIC_DASHBOARD)" == 'false' && echo no || echo yes) "Do you want enable a public dashboard for guest (unauthenticated) users" "?" && \ + ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_PUBLIC_DASHBOARD=true || \ + ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_PUBLIC_DASHBOARD=false + @echo + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_DISPLAY_TIMEZONE "Enter the timezone you want timestamps to be displayed in" + @echo + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_SCHEDULE "Enter the cron expression used to run speedtests on a scheduled basis" + @echo + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_PRUNE_RESULTS_OLDER_THAN "Enter the number of days to keep results for, or enter 0 (zero) to keep all results" @echo - @${BIN}/reconfigure_password ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY 32 + @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY=$$(openssl rand -base64 32) @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY=$$(key=$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_TRACKER_APP_KEY); [[ "$${key}" == base64:* ]] && echo "$${key}" || echo "base64:$${key}") @echo @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_UID "Enter the host UID to map to the container UID" diff --git a/speedtest-tracker/docker-compose.yaml b/speedtest-tracker/docker-compose.yaml index 97f0ae38..faec2d51 100644 --- a/speedtest-tracker/docker-compose.yaml +++ b/speedtest-tracker/docker-compose.yaml @@ -2,9 +2,6 @@ services: speedtest-tracker: image: ${SPEEDTEST_TRACKER_IMAGE} restart: unless-stopped - #ports: - # - 8080:80 - # - 8443:443 environment: - PUID=${SPEEDTEST_TRACKER_UID} - PGID=${SPEEDTEST_TRACKER_GID} @@ -15,18 +12,26 @@ services: - ADMIN_PASSWORD=${SPEEDTEST_TRACKER_ADMIN_PASSWORD} - DISPLAY_TIMEZONE=${SPEEDTEST_TRACKER_DISPLAY_TIMEZONE} - APP_URL=${SPEEDTEST_TRACKER_TRAEFIK_HOST} - - ASSET_URL=${SPEEDTEST_TRACKER_TRAEFIK_HOST} + # Unused because setting as described in docs results in failed CSS + #- ASSET_URL=${SPEEDTEST_TRACKER_TRAEFIK_HOST} + - APP_DEBUG=${SPEEDTEST_APP_DEBUG} + - PUBLIC_DASHBOARD=${SPEEDTEST_PUBLIC_DASHBOARD} + - SPEEDTEST_SCHEDULE=${SPEEDTEST_SCHEDULE} + - APP_NAME=${SPEEDTEST_APP_NAME} + - PRUNE_RESULTS_OLDER_THAN=${SPEEDTEST_PRUNE_RESULTS_OLDER_THAN} volumes: - data:/config - keys:/config/keys - #cap_drop: - # - ALL - #security_opt: - # - no-new-privileges:true - #sysctls: - # - net.ipv4.ip_unprivileged_port_start=1024 + sysctls: + - net.ipv4.ip_unprivileged_port_start=1024 labels: [] - + healthcheck: + test: curl -fSs APP_URL/api/healthcheck | jq -r .message || exit 1 + interval: 10s + retries: 3 + start_period: 30s + timeout: 10s + volumes: data: keys: \ No newline at end of file From 2bf0d6d090cd0f00f9e9421cf8e754462fb88d53 Mon Sep 17 00:00:00 2001 From: Mike Wooskey Date: Fri, 24 Jan 2025 12:03:09 +0000 Subject: [PATCH 4/7] Remove UID and GID as env vars. --- speedtest-tracker/.env-dist | 2 -- speedtest-tracker/Makefile | 3 --- speedtest-tracker/docker-compose.yaml | 2 -- 3 files changed, 7 deletions(-) diff --git a/speedtest-tracker/.env-dist b/speedtest-tracker/.env-dist index dca161ec..e480bd88 100644 --- a/speedtest-tracker/.env-dist +++ b/speedtest-tracker/.env-dist @@ -45,8 +45,6 @@ SPEEDTEST_TRACKER_MTLS_AUTHORIZED_CERTS=*.clients.speedtest-tracker.example.com SPEEDTEST_APP_NAME= SPEEDTEST_TRACKER_APP_KEY= -SPEEDTEST_TRACKER_UID=1000 -SPEEDTEST_TRACKER_GID=1000 SPEEDTEST_TRACKER_ADMIN_NAME= SPEEDTEST_TRACKER_ADMIN_EMAIL= SPEEDTEST_TRACKER_ADMIN_PASSWORD= diff --git a/speedtest-tracker/Makefile b/speedtest-tracker/Makefile index 0a4e5f6d..069a0809 100644 --- a/speedtest-tracker/Makefile +++ b/speedtest-tracker/Makefile @@ -27,9 +27,6 @@ config-hook: @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY=$$(openssl rand -base64 32) @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY=$$(key=$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_TRACKER_APP_KEY); [[ "$${key}" == base64:* ]] && echo "$${key}" || echo "base64:$${key}") @echo - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_UID "Enter the host UID to map to the container UID" - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_GID "Enter the host GID to map to the container GID" - @echo .PHONY: override-hook override-hook: diff --git a/speedtest-tracker/docker-compose.yaml b/speedtest-tracker/docker-compose.yaml index faec2d51..a8d0f7f9 100644 --- a/speedtest-tracker/docker-compose.yaml +++ b/speedtest-tracker/docker-compose.yaml @@ -3,8 +3,6 @@ services: image: ${SPEEDTEST_TRACKER_IMAGE} restart: unless-stopped environment: - - PUID=${SPEEDTEST_TRACKER_UID} - - PGID=${SPEEDTEST_TRACKER_GID} - APP_KEY=${SPEEDTEST_TRACKER_APP_KEY} - DB_CONNECTION=sqlite - ADMIN_NAME=${SPEEDTEST_TRACKER_ADMIN_NAME} From 3288100e40f8f6d095f9c9daf95ac2857964da3f Mon Sep 17 00:00:00 2001 From: "mike.wooskey" Date: Fri, 24 Jan 2025 16:24:12 -0500 Subject: [PATCH 5/7] Remove some env vars that don't fit d.ry model. --- speedtest-tracker/.env-dist | 17 +++++++---------- speedtest-tracker/Makefile | 14 +++++--------- speedtest-tracker/README.md | 4 ++++ speedtest-tracker/docker-compose.yaml | 11 ++++------- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/speedtest-tracker/.env-dist b/speedtest-tracker/.env-dist index e480bd88..a44fae4e 100644 --- a/speedtest-tracker/.env-dist +++ b/speedtest-tracker/.env-dist @@ -41,14 +41,11 @@ SPEEDTEST_TRACKER_MTLS_AUTH=false # Wildcards are allowed and encouraged on a per-app basis: SPEEDTEST_TRACKER_MTLS_AUTHORIZED_CERTS=*.clients.speedtest-tracker.example.com -# Set the application's name as it will appear on the dashboard and in notifications. -SPEEDTEST_APP_NAME= - SPEEDTEST_TRACKER_APP_KEY= -SPEEDTEST_TRACKER_ADMIN_NAME= -SPEEDTEST_TRACKER_ADMIN_EMAIL= -SPEEDTEST_TRACKER_ADMIN_PASSWORD= -SPEEDTEST_APP_DEBUG=false +SPEEDTEST_TRACKER_APP_DEBUG=false + +# Set the application's name as it will appear on the dashboard and in notifications. +SPEEDTEST_TRACKER_APP_NAME= # Server is configured to store timestamps in UTC. Set this to display # timestamps in a specific timezone. @@ -56,11 +53,11 @@ SPEEDTEST_TRACKER_DISPLAY_TIMEZONE=UTC # Set to "true" to enable the public dashboard for guest (unauthenticated) # users. -SPEEDTEST_PUBLIC_DASHBOARD=false +SPEEDTEST_TRACKER_PUBLIC_DASHBOARD=false # Cron expression used to run speedtests on a scheduled basis. -SPEEDTEST_SCHEDULE=6 */2 * * * +SPEEDTEST_TRACKER_SCHEDULE=6 */2 * * * # Set the value to greater than zero to prune stored results. This value should # be represented in days, e.g. 7 will purge all results over 7 days old. -SPEEDTEST_PRUNE_RESULTS_OLDER_THAN=7 +SPEEDTEST_PRUNE_RESULTS_OLDER_THAN=7 diff --git a/speedtest-tracker/Makefile b/speedtest-tracker/Makefile index 069a0809..f078c141 100644 --- a/speedtest-tracker/Makefile +++ b/speedtest-tracker/Makefile @@ -8,19 +8,15 @@ config-hook: @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_INSTANCE=$${instance:-default} @${BIN}/reconfigure_auth ${ENV_FILE} SPEEDTEST_TRACKER @echo - @ALLOW_BLANK=1 ${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_APP_NAME "Enter the application's name as it will appear on the dashboard and in notifications. Or leave this bank to use the default (\"Speedtest Tracker\")" + @ALLOW_BLANK=1 ${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_APP_NAME "Enter the application's name as it will appear on the dashboard and in notifications. Or leave this bank to use the default (\"Speedtest Tracker\")" @echo - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_NAME "Enter the admin user's login name" - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_EMAIL "Enter the admin user's email" - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_ADMIN_PASSWORD "Enter the admin user's password" - @echo - @${BIN}/confirm $$(test "$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_PUBLIC_DASHBOARD)" == 'false' && echo no || echo yes) "Do you want enable a public dashboard for guest (unauthenticated) users" "?" && \ - ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_PUBLIC_DASHBOARD=true || \ - ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_PUBLIC_DASHBOARD=false + @${BIN}/confirm $$(test "$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_TRACKER_PUBLIC_DASHBOARD)" == 'false' && echo no || echo yes) "Do you want enable a public dashboard for guest (unauthenticated) users" "?" && \ + ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_PUBLIC_DASHBOARD=true || \ + ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_PUBLIC_DASHBOARD=false @echo @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_DISPLAY_TIMEZONE "Enter the timezone you want timestamps to be displayed in" @echo - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_SCHEDULE "Enter the cron expression used to run speedtests on a scheduled basis" + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_SCHEDULE "Enter the cron expression used to run speedtests on a scheduled basis" @echo @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_PRUNE_RESULTS_OLDER_THAN "Enter the number of days to keep results for, or enter 0 (zero) to keep all results" @echo diff --git a/speedtest-tracker/README.md b/speedtest-tracker/README.md index 9173c606..c0c7007e 100644 --- a/speedtest-tracker/README.md +++ b/speedtest-tracker/README.md @@ -34,6 +34,10 @@ This will automatically open the page in your web browser, and will prefill the HTTP Basic Authentication password if you enabled it (and chose to store it in `passwords.json`). +The intital admin login is "admin@example.com" and its password is "password". +You should immediately open the app, click your avatar in the upper right +corner, and select "Profile" to change your login name, email, and password. + ## Destroy ``` diff --git a/speedtest-tracker/docker-compose.yaml b/speedtest-tracker/docker-compose.yaml index a8d0f7f9..9122baf4 100644 --- a/speedtest-tracker/docker-compose.yaml +++ b/speedtest-tracker/docker-compose.yaml @@ -5,17 +5,14 @@ services: environment: - APP_KEY=${SPEEDTEST_TRACKER_APP_KEY} - DB_CONNECTION=sqlite - - ADMIN_NAME=${SPEEDTEST_TRACKER_ADMIN_NAME} - - ADMIN_EMAIL=${SPEEDTEST_TRACKER_ADMIN_EMAIL} - - ADMIN_PASSWORD=${SPEEDTEST_TRACKER_ADMIN_PASSWORD} - DISPLAY_TIMEZONE=${SPEEDTEST_TRACKER_DISPLAY_TIMEZONE} - APP_URL=${SPEEDTEST_TRACKER_TRAEFIK_HOST} # Unused because setting as described in docs results in failed CSS #- ASSET_URL=${SPEEDTEST_TRACKER_TRAEFIK_HOST} - - APP_DEBUG=${SPEEDTEST_APP_DEBUG} - - PUBLIC_DASHBOARD=${SPEEDTEST_PUBLIC_DASHBOARD} - - SPEEDTEST_SCHEDULE=${SPEEDTEST_SCHEDULE} - - APP_NAME=${SPEEDTEST_APP_NAME} + - APP_DEBUG=${SPEEDTEST_TRACKER_APP_DEBUG} + - PUBLIC_DASHBOARD=${SPEEDTEST_TRACKER_PUBLIC_DASHBOARD} + - SPEEDTEST_SCHEDULE=${SPEEDTEST_TRACKER_SCHEDULE} + - APP_NAME=${SPEEDTEST_TRACKER_APP_NAME} - PRUNE_RESULTS_OLDER_THAN=${SPEEDTEST_PRUNE_RESULTS_OLDER_THAN} volumes: - data:/config From a1cf7e2258e586570fe3bab40b5d1004275debae Mon Sep 17 00:00:00 2001 From: "mike.wooskey" Date: Fri, 24 Jan 2025 16:28:15 -0500 Subject: [PATCH 6/7] Fix env var name. --- speedtest-tracker/.env-dist | 2 +- speedtest-tracker/docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/speedtest-tracker/.env-dist b/speedtest-tracker/.env-dist index a44fae4e..33e61289 100644 --- a/speedtest-tracker/.env-dist +++ b/speedtest-tracker/.env-dist @@ -60,4 +60,4 @@ SPEEDTEST_TRACKER_SCHEDULE=6 */2 * * * # Set the value to greater than zero to prune stored results. This value should # be represented in days, e.g. 7 will purge all results over 7 days old. -SPEEDTEST_PRUNE_RESULTS_OLDER_THAN=7 +SPEEDTEST_TRACKER_PRUNE_RESULTS_OLDER_THAN=7 diff --git a/speedtest-tracker/docker-compose.yaml b/speedtest-tracker/docker-compose.yaml index 9122baf4..85de589b 100644 --- a/speedtest-tracker/docker-compose.yaml +++ b/speedtest-tracker/docker-compose.yaml @@ -13,7 +13,7 @@ services: - PUBLIC_DASHBOARD=${SPEEDTEST_TRACKER_PUBLIC_DASHBOARD} - SPEEDTEST_SCHEDULE=${SPEEDTEST_TRACKER_SCHEDULE} - APP_NAME=${SPEEDTEST_TRACKER_APP_NAME} - - PRUNE_RESULTS_OLDER_THAN=${SPEEDTEST_PRUNE_RESULTS_OLDER_THAN} + - PRUNE_RESULTS_OLDER_THAN=${SPEEDTEST_TRACKER_PRUNE_RESULTS_OLDER_THAN} volumes: - data:/config - keys:/config/keys From 9bb194c633e585a95e7436485ac1968b3f2700cd Mon Sep 17 00:00:00 2001 From: "mike.wooskey" Date: Sat, 25 Jan 2025 06:22:28 -0500 Subject: [PATCH 7/7] Make initial admin password randomly generated. --- speedtest-tracker/.env-dist | 3 +++ speedtest-tracker/Makefile | 13 ++++++++++++- speedtest-tracker/README.md | 11 ++++++++--- speedtest-tracker/docker-compose.yaml | 1 + 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/speedtest-tracker/.env-dist b/speedtest-tracker/.env-dist index 33e61289..7b105487 100644 --- a/speedtest-tracker/.env-dist +++ b/speedtest-tracker/.env-dist @@ -47,6 +47,9 @@ SPEEDTEST_TRACKER_APP_DEBUG=false # Set the application's name as it will appear on the dashboard and in notifications. SPEEDTEST_TRACKER_APP_NAME= +# Enter the initial password for the admin account. +SPEEDTEST_TRACKER_INITIAL_ADMIN_PASSWORD= + # Server is configured to store timestamps in UTC. Set this to display # timestamps in a specific timezone. SPEEDTEST_TRACKER_DISPLAY_TIMEZONE=UTC diff --git a/speedtest-tracker/Makefile b/speedtest-tracker/Makefile index f078c141..4a4cad65 100644 --- a/speedtest-tracker/Makefile +++ b/speedtest-tracker/Makefile @@ -10,6 +10,8 @@ config-hook: @echo @ALLOW_BLANK=1 ${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_APP_NAME "Enter the application's name as it will appear on the dashboard and in notifications. Or leave this bank to use the default (\"Speedtest Tracker\")" @echo + @${BIN}/reconfigure_password ${ENV_FILE} SPEEDTEST_TRACKER_INITIAL_ADMIN_PASSWORD 15 + @echo @${BIN}/confirm $$(test "$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_TRACKER_PUBLIC_DASHBOARD)" == 'false' && echo no || echo yes) "Do you want enable a public dashboard for guest (unauthenticated) users" "?" && \ ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_PUBLIC_DASHBOARD=true || \ ${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_PUBLIC_DASHBOARD=false @@ -18,11 +20,12 @@ config-hook: @echo @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_SCHEDULE "Enter the cron expression used to run speedtests on a scheduled basis" @echo - @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_PRUNE_RESULTS_OLDER_THAN "Enter the number of days to keep results for, or enter 0 (zero) to keep all results" + @${BIN}/reconfigure_ask ${ENV_FILE} SPEEDTEST_TRACKER_PRUNE_RESULTS_OLDER_THAN "Enter the number of days to keep results for, or enter 0 (zero) to keep all results" @echo @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY=$$(openssl rand -base64 32) @${BIN}/reconfigure ${ENV_FILE} SPEEDTEST_TRACKER_APP_KEY=$$(key=$$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_TRACKER_APP_KEY); [[ "$${key}" == base64:* ]] && echo "$${key}" || echo "base64:$${key}") @echo + @make show-password && echo && sleep 1 .PHONY: override-hook override-hook: @@ -41,3 +44,11 @@ override-hook: .PHONY: shell shell: @make --no-print-directory docker-compose-shell SERVICE=speedtest-tracker + +.PHONY: show-password # Show the admin login's initial password +show-password: + @echo + @echo "The initial password for the admin login is: $$(${BIN}/dotenv -f ${ENV_FILE} get SPEEDTEST_TRACKER_INITIAL_ADMIN_PASSWORD)" + @echo + @echo "You should immediately open the app, click your avatar in the upper right corner, and select "Profile" to change the admin login's password (also, optionally, to change the admin login's name and email address). Once you change the password in the app, this initial password is no longer used." + @echo diff --git a/speedtest-tracker/README.md b/speedtest-tracker/README.md index c0c7007e..a3ba23d6 100644 --- a/speedtest-tracker/README.md +++ b/speedtest-tracker/README.md @@ -34,9 +34,14 @@ This will automatically open the page in your web browser, and will prefill the HTTP Basic Authentication password if you enabled it (and chose to store it in `passwords.json`). -The intital admin login is "admin@example.com" and its password is "password". -You should immediately open the app, click your avatar in the upper right -corner, and select "Profile" to change your login name, email, and password. +The intital admin login is "admin@example.com" and its password is randomly +generated and displayed during `make config`. You can also see the initial +password via `make show-password`, or find the it in the +`SPEEDTEST_TRACKER_INITIAL_ADMIN_PASSWORD` variable in the `.env_{INSTANCE}` +file. You should immediately open the app, click your avatar in the upper right +corner, and select "Profile" to change the admin login's password (also, +optionally, to change the admin login's name and email address). Once you change +the password in the app, this initial password is no longer used. ## Destroy diff --git a/speedtest-tracker/docker-compose.yaml b/speedtest-tracker/docker-compose.yaml index 85de589b..edadb5b6 100644 --- a/speedtest-tracker/docker-compose.yaml +++ b/speedtest-tracker/docker-compose.yaml @@ -14,6 +14,7 @@ services: - SPEEDTEST_SCHEDULE=${SPEEDTEST_TRACKER_SCHEDULE} - APP_NAME=${SPEEDTEST_TRACKER_APP_NAME} - PRUNE_RESULTS_OLDER_THAN=${SPEEDTEST_TRACKER_PRUNE_RESULTS_OLDER_THAN} + - ADMIN_PASSWORD=${SPEEDTEST_TRACKER_INITIAL_ADMIN_PASSWORD} volumes: - data:/config - keys:/config/keys