From 704f0af40d436ac2b7ad972f7d4c4e257172d9e8 Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Wed, 4 Oct 2023 11:04:20 -0400 Subject: [PATCH] Add Speedtest Tracker (#1341) * Add Speedtest Tracker * Update docker-compose.yml * Update docker-compose.yml * Update Port and ENV * Update docker-compose.yml * Update docker-compose.yml * Fix ports --- README.md | 1 + apps/speedtest-tracker/config.json | 23 ++++++ apps/speedtest-tracker/docker-compose.yml | 66 ++++++++++++++++++ .../speedtest-tracker/metadata/description.md | 32 +++++++++ apps/speedtest-tracker/metadata/logo.jpg | Bin 0 -> 31109 bytes 5 files changed, 122 insertions(+) create mode 100644 apps/speedtest-tracker/config.json create mode 100644 apps/speedtest-tracker/docker-compose.yml create mode 100644 apps/speedtest-tracker/metadata/description.md create mode 100644 apps/speedtest-tracker/metadata/logo.jpg diff --git a/README.md b/README.md index e060c142..6a93225e 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Serge](https://github.com/serge-chat/serge) - A web interface for chatting with Alpaca through llama.cpp. - [SimpleX SMP](https://github.com/simplex-chat/simplexmq) - A reference implementation of the SimpleX Messaging Protocol for simplex queues over public networks. - [Sonarr](https://github.com/Sonarr/Sonarr) - TV show manager for Usenet and BitTorrent +- [Speedtest Tracker](https://github.com/alexjustesen/speedtest-tracker) - Internet performance tracking application. - [Sshwifty](https://github.com/nirui/sshwifty/) - Web SSH & Telnet (WebSSH & WebTelnet client) - [Stirling-PDF](https://github.com/Frooodle/Stirling-PDF) - Locally hosted web application that allows you to perform various operations on PDF files. - [Syncthing](https://github.com/syncthing/syncthing) - Continuous File Synchronization diff --git a/apps/speedtest-tracker/config.json b/apps/speedtest-tracker/config.json new file mode 100644 index 00000000..757c3119 --- /dev/null +++ b/apps/speedtest-tracker/config.json @@ -0,0 +1,23 @@ +{ + "$schema": "../schema.json", + "name": "Speedtest Tracker", + "port": 8211, + "available": true, + "exposable": true, + "id": "speedtest-tracker", + "tipi_version": 1, + "version": "v0.13.1", + "categories": ["utilities"], + "description": "Speedtest Tracker is a self-hosted internet performance tracking application that runs speedtest checks against Ookla's Speedtest service.", + "short_desc": "Internet performance tracking application.", + "author": "alexjustesen", + "source": "https://github.com/alexjustesen/speedtest-tracker", + "form_fields": [ + { + "type": "random", + "label": "SPEEDTEST_TRACKER_DB_PASSWORD", + "min": 32, + "env_variable": "SPEEDTEST_TRACKER_DB_PASSWORD" + } + ] +} diff --git a/apps/speedtest-tracker/docker-compose.yml b/apps/speedtest-tracker/docker-compose.yml new file mode 100644 index 00000000..7ae8b651 --- /dev/null +++ b/apps/speedtest-tracker/docker-compose.yml @@ -0,0 +1,66 @@ +version: "3.7" + +services: + speedtest-tracker: + image: ghcr.io/alexjustesen/speedtest-tracker:v0.13.1 + container_name: speedtest-tracker + environment: + - PUID=1000 + - PGID=1000 + - DB_CONNECTION=pgsql + - DB_HOST=speedtest-tracker-db + - DB_PORT=5432 + - DB_DATABASE=speedtest-tracker + - DB_USERNAME=tipi + - DB_PASSWORD=${SPEEDTEST_TRACKER_DB_PASSWORD} + - TZ=${TZ} + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/speedtest-tracker/config:/config + - /etc/localtime:/etc/localtime:ro + ports: + - ${APP_PORT}:80 + - 8212:443 + depends_on: + - speedtest-tracker-db + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.speedtest-tracker-web-redirect.redirectscheme.scheme: https + traefik.http.services.speedtest-tracker.loadbalancer.server.port: 80 + #traefik.http.services.speedtest-tracker.loadbalancer.serverstransport: insecuretransport@file + # Web + traefik.http.routers.speedtest-tracker-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.speedtest-tracker-insecure.entrypoints: web + traefik.http.routers.speedtest-tracker-insecure.service: speedtest-tracker + traefik.http.routers.speedtest-tracker-insecure.middlewares: speedtest-tracker-web-redirect + # Websecure + traefik.http.routers.speedtest-tracker.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.speedtest-tracker.entrypoints: websecure + traefik.http.routers.speedtest-tracker.service: speedtest-tracker + traefik.http.routers.speedtest-tracker.tls.certresolver: myresolver + # Local domain + traefik.http.routers.speedtest-tracker-local-insecure.rule: Host(`speedtest-tracker.${LOCAL_DOMAIN}`) + traefik.http.routers.speedtest-tracker-local-insecure.entrypoints: web + traefik.http.routers.speedtest-tracker-local-insecure.service: speedtest-tracker + traefik.http.routers.speedtest-tracker-local-insecure.middlewares: speedtest-tracker-web-redirect + # Local domain secure + traefik.http.routers.speedtest-tracker-local.rule: Host(`speedtest-tracker.${LOCAL_DOMAIN}`) + traefik.http.routers.speedtest-tracker-local.entrypoints: websecure + traefik.http.routers.speedtest-tracker-local.service: speedtest-tracker + traefik.http.routers.speedtest-tracker-local.tls: true + + speedtest-tracker-db: + container_name: speedtest-tracker-db + image: postgres:15 + restart: unless-stopped + environment: + - POSTGRES_USER=tipi + - POSTGRES_PASSWORD=${SPEEDTEST_TRACKER_DB_PASSWORD} + - POSTGRES_DB=speedtest-tracker + volumes: + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + networks: + - tipi_main_network diff --git a/apps/speedtest-tracker/metadata/description.md b/apps/speedtest-tracker/metadata/description.md new file mode 100644 index 00000000..d4ee7463 --- /dev/null +++ b/apps/speedtest-tracker/metadata/description.md @@ -0,0 +1,32 @@ + +## Authentication + +Speedtest Tracker uses Filament for the admin panel. During the install process an admin account is created for you. + +Default User Account +| Username | Password | +| --- | --- | +| `admin@example.com`| `password` | + +--- + +## About + +A Docker image to check your internet speed using Ookla's Speedtest service. Build using Laravel and the Speedtest CLI. +These docs are up-to-date for version: `v0.12.1` + +![](https://834071469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fvtb3s6TB12XY9iIx8YyJ%2Fuploads%2FrOKoxV0cH35wwjkbAgvE%2Fdashboard_screenshot.jpg?alt=media&token=121f5175-4008-4b26-9655-bc67d1369710) + +### + +Introduction + +Speedtest Tracker is a self-hosted internet performance tracking application that runs speedtest checks against Ookla's Speedtest service. + +#### + +Why might I want this? + +The main use case for Speedtest Tracker is to build a history of your internet's performance so that you can be informed when you're not receiving your ISP's advertised rates. + +_...also some of us just like a lot of data._ \ No newline at end of file diff --git a/apps/speedtest-tracker/metadata/logo.jpg b/apps/speedtest-tracker/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c34d46292730ebf2a574dca6a3d8c8a8c2cd728 GIT binary patch literal 31109 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 z