diff --git a/.env.example b/.env.example index 5985048..b2d79f8 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,11 @@ TIMEZONE=America/Sao_Paulo # Lower this value if the initial peer list feels slow. # 0 = disable preload, 9 = fully prefill traffic charts.# # WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT=9 - +# +# How often (in seconds) the cache should be refreshed. +# Allowed values: 30, 60, 150, 300. Default: 60. +# WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=60 +# # If you need additional hosts to be allowed, you can specify them here. # The SERVER_ADDRESS will always be allowed. # Example: EXTRA_ALLOWED_HOSTS=app1.example.com,app2.example.com:8443,app3.example.com diff --git a/containers/cron/Dockerfile-cron b/containers/cron/Dockerfile-cron index a965478..1594fe0 100644 --- a/containers/cron/Dockerfile-cron +++ b/containers/cron/Dockerfile-cron @@ -4,13 +4,12 @@ FROM ubuntu:latest RUN apt-get update && apt-get install -y cron curl # Adicionar seus scripts de cron -COPY cron_tasks /etc/cron.d/cron_tasks - -# Dar permissões apropriadas -RUN chmod 0644 /etc/cron.d/cron_tasks +# Adicionar apenas o entrypoint script, as tasks serão geradas lá +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh # Criar um arquivo de log para armazenar os resultados do cron RUN touch /var/log/cron.log -# Executar o cron em primeiro plano -CMD cron -f +# Executar o entrypoint +ENTRYPOINT ["/entrypoint.sh"] diff --git a/containers/cron/entrypoint.sh b/containers/cron/entrypoint.sh new file mode 100755 index 0000000..50263a8 --- /dev/null +++ b/containers/cron/entrypoint.sh @@ -0,0 +1,45 @@ +#!/bin/bash +set -e + +WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL:-60} + +case "$WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL" in + 30|60|150|300) + ;; + *) + echo "Error: Invalid WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL value: $WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL. Allowed values are 30, 60, 150, 300." + exit 1 + ;; +esac + +echo "Starting cron with WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=$WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL" + +# Create cron tasks +cat < /etc/cron.d/cron_tasks +* * * * * root /usr/bin/curl -s http://wireguard-webadmin:8000/api/cron_check_updates/ >> /var/log/cron.log 2>&1 +*/10 * * * * root /usr/bin/curl -s http://wireguard-webadmin:8000/api/cron_update_peer_latest_handshake/ >> /var/log/cron.log 2>&1 +EOF + +CMD="/usr/bin/curl -s http://wireguard-webadmin:8000/api/cron_refresh_wireguard_status_cache/ >> /var/log/cron.log 2>&1" + +if [ "$WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL" -eq 30 ]; then + echo "* * * * * root $CMD" >> /etc/cron.d/cron_tasks + echo "* * * * * root sleep 30; $CMD" >> /etc/cron.d/cron_tasks +elif [ "$WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL" -eq 60 ]; then + echo "* * * * * root $CMD" >> /etc/cron.d/cron_tasks +elif [ "$WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL" -eq 150 ]; then + echo "*/5 * * * * root $CMD" >> /etc/cron.d/cron_tasks + echo "*/5 * * * * root sleep 150; $CMD" >> /etc/cron.d/cron_tasks +elif [ "$WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL" -eq 300 ]; then + echo "*/5 * * * * root $CMD" >> /etc/cron.d/cron_tasks +fi + +# Permissions +chmod 0644 /etc/cron.d/cron_tasks +# crontab /etc/cron.d/cron_tasks + +# Touch log file +touch /var/log/cron.log + +# Execute cron +exec cron -f diff --git a/docker-compose-no-nginx-dev.yml b/docker-compose-no-nginx-dev.yml index e9bdde0..2577837 100644 --- a/docker-compose-no-nginx-dev.yml +++ b/docker-compose-no-nginx-dev.yml @@ -14,6 +14,7 @@ services: - EXTRA_ALLOWED_HOSTS=${EXTRA_ALLOWED_HOSTS} - WIREGUARD_STATUS_CACHE_ENABLED=${WIREGUARD_STATUS_CACHE_ENABLED} - WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT=${WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT} + - WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL} volumes: - wireguard:/etc/wireguard - static_volume:/app_static_files/ @@ -29,7 +30,7 @@ services: - "51820-51839:51820-51839/udp" # Ports for port forwarding rules. Add your own ports here if you need them. - "8080-8089:8080-8089/tcp" - + cap_add: - NET_ADMIN - SYS_MODULE @@ -46,6 +47,7 @@ services: dockerfile: Dockerfile-cron environment: - TZ=${TIMEZONE} + - WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL} depends_on: - wireguard-webadmin @@ -75,7 +77,7 @@ services: - dnsmasq_conf:/etc/dnsmasq/ volumes: - static_volume: + static_volume: wireguard: dnsmasq_conf: app_secrets: diff --git a/docker-compose-no-nginx.yml b/docker-compose-no-nginx.yml index e1a37d9..d851b48 100644 --- a/docker-compose-no-nginx.yml +++ b/docker-compose-no-nginx.yml @@ -12,6 +12,7 @@ services: - EXTRA_ALLOWED_HOSTS=${EXTRA_ALLOWED_HOSTS} - WIREGUARD_STATUS_CACHE_ENABLED=${WIREGUARD_STATUS_CACHE_ENABLED} - WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT=${WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT} + - WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL} volumes: - wireguard:/etc/wireguard - static_volume:/app_static_files/ @@ -40,6 +41,7 @@ services: image: eduardosilva/wireguard_webadmin_cron:latest environment: - TZ=${TIMEZONE} + - WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL} depends_on: - wireguard-webadmin diff --git a/docker-compose.yml b/docker-compose.yml index 56c29ee..7093032 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,7 @@ services: - EXTRA_ALLOWED_HOSTS=${EXTRA_ALLOWED_HOSTS} - WIREGUARD_STATUS_CACHE_ENABLED=${WIREGUARD_STATUS_CACHE_ENABLED} - WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT=${WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT} + - WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL} volumes: - wireguard:/etc/wireguard - static_volume:/app_static_files/ @@ -40,6 +41,7 @@ services: image: eduardosilva/wireguard_webadmin_cron:latest environment: - TZ=${TIMEZONE} + - WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL=${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL} depends_on: - wireguard-webadmin diff --git a/entrypoint.sh b/entrypoint.sh index a75f3f5..c3a0869 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -51,6 +51,20 @@ if [ -n "${WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT:-}" ]; then echo "WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT = ${WIREGUARD_STATUS_CACHE_WEB_LOAD_PREVIOUS_COUNT}" >> /app/wireguard_webadmin/production_settings.py fi +if [ -n "${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL:-}" ]; then + case "${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL}" in + 30|60|150|300) + echo "WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL = ${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL}" >> /app/wireguard_webadmin/production_settings.py + MAX_AGE=$((WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL * 10)) + echo "WIREGUARD_STATUS_CACHE_MAX_AGE = ${MAX_AGE}" >> /app/wireguard_webadmin/production_settings.py + ;; + *) + echo "Error: Invalid WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL value: ${WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL}. Allowed values are 30, 60, 150, 300." + exit 1 + ;; + esac +fi + if [[ "${DEV_MODE,,}" != "true" ]]; then sed -i "/^ path('admin\/', admin.site.urls),/s/^ / # /" /app/wireguard_webadmin/urls.py fi