From 928eafed15ecafaa9c13d5454b1d9fa5cf1eba5c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 26 Nov 2025 09:20:20 +0100 Subject: [PATCH] Create speedtest-tracker-install.sh --- install/speedtest-tracker-install.sh | 163 +++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 install/speedtest-tracker-install.sh diff --git a/install/speedtest-tracker-install.sh b/install/speedtest-tracker-install.sh new file mode 100644 index 000000000..94fdbfe2e --- /dev/null +++ b/install/speedtest-tracker-install.sh @@ -0,0 +1,163 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2025 community-scripts ORG +# Author: AlphaLawless +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/alexjustesen/speedtest-tracker + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + nginx \ + sqlite3 +msg_ok "Installed Dependencies" + +PHP_VERSION="8.4" PHP_FPM="YES" PHP_MODULE="common,sqlite3,redis" setup_php +setup_composer +NODE_VERSION="22" setup_nodejs + +fetch_and_deploy_gh_release "speedtest-tracker" "alexjustesen/speedtest-tracker" "tarball" "latest" "/opt/speedtest-tracker" + +msg_info "Installing Speedtest CLI" +setup_deb822_repo \ + "speedtest-cli" \ + "https://packagecloud.io/ookla/speedtest-cli/gpgkey" \ + "https://packagecloud.io/ookla/speedtest-cli/debian" \ + "$(get_os_info codename)" \ + "main" +$STD apt install -y speedtest +msg_ok "Installed Speedtest CLI" + +msg_info "Configuring PHP-FPM runtime directory" +mkdir -p /etc/systemd/system/php8.4-fpm.service.d/ +cat >/etc/systemd/system/php8.4-fpm.service.d/override.conf <<'EOF' +[Service] +RuntimeDirectory=php +RuntimeDirectoryMode=0755 +EOF +systemctl daemon-reload +msg_ok "Configured PHP-FPM runtime directory" + +msg_info "Setting up Speedtest Tracker" +cd /opt/speedtest-tracker +CONTAINER_IP=$(hostname -I | awk '{print $1}') +APP_KEY=$(php -r "echo bin2hex(random_bytes(16));") +cat </opt/speedtest-tracker/.env +APP_NAME="Speedtest Tracker" +APP_ENV=production +APP_KEY=base64:$(echo -n $APP_KEY | base64) +APP_DEBUG=false +APP_URL=http://${CONTAINER_IP} + +LOG_CHANNEL=stack +LOG_LEVEL=debug + +DB_CONNECTION=sqlite +DB_DATABASE=/opt/speedtest-tracker/database/database.sqlite + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +SPEEDTEST_SCHEDULE="0 */6 * * *" +SPEEDTEST_SERVERS= +PRUNE_RESULTS_OLDER_THAN=0 + +DISPLAY_TIMEZONE=UTC +EOF +mkdir -p /opt/speedtest-tracker/database +touch /opt/speedtest-tracker/database/database.sqlite +export COMPOSER_ALLOW_SUPERUSER=1 +$STD composer install --optimize-autoloader --no-dev +$STD npm ci +$STD npm run build +$STD php artisan key:generate --force +$STD php artisan migrate --force --seed +$STD php artisan config:clear +$STD php artisan cache:clear +$STD php artisan view:clear +chown -R www-data:www-data /opt/speedtest-tracker +chmod -R 755 /opt/speedtest-tracker/storage +chmod -R 755 /opt/speedtest-tracker/bootstrap/cache +msg_ok "Set up Speedtest Tracker" + +msg_info "Creating Service" +cat </etc/systemd/system/speedtest-tracker.service +[Unit] +Description=Speedtest Tracker Queue Worker +After=network.target + +[Service] +Type=simple +User=www-data +Group=www-data +Restart=always +ExecStart=/usr/bin/php /opt/speedtest-tracker/artisan queue:work --sleep=3 --tries=3 --max-time=3600 +WorkingDirectory=/opt/speedtest-tracker + +[Install] +WantedBy=multi-user.target +EOF + +systemctl enable -q --now speedtest-tracker +msg_ok "Created Service" + +msg_info "Setting up Scheduler" +cat </etc/cron.d/speedtest-tracker +* * * * * www-data cd /opt/speedtest-tracker && php artisan schedule:run >> /dev/null 2>&1 +EOF +msg_ok "Set up Scheduler" + +msg_info "Configuring Nginx" +cat </etc/nginx/sites-available/speedtest-tracker +server { + listen 80; + server_name _; + root /opt/speedtest-tracker/public; + + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-Content-Type-Options "nosniff"; + + index index.php; + + charset utf-8; + + location / { + try_files \$uri \$uri/ /index.php?\$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + error_page 404 /index.php; + + location ~ \.php$ { + fastcgi_pass unix:/var/run/php/php8.4-fpm.sock; + fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name; + include fastcgi_params; + } + + location ~ /\.(?!well-known).* { + deny all; + } +} +EOF + +ln -sf /etc/nginx/sites-available/speedtest-tracker /etc/nginx/sites-enabled/ +rm -f /etc/nginx/sites-enabled/default +systemctl reload nginx +msg_ok "Configured Nginx" + +motd_ssh +customize +cleanup_lxc