# Goflare Dynamic DNS updater for Cloudflare. Keeps your DNS records pointing at your current public IP, even when it changes. ## How It Works Goflare runs a configurable cron job that periodically fetches your public IP from multiple providers (with fallback) and compares it against the DNS records you've configured. When a change is detected, it updates the records via the Cloudflare REST API. You manage your Cloudflare zones and DNS records through a web UI. Records can be marked as **static** to exclude them from automatic updates. The cron schedule is configurable at runtime through the settings page. ### Stack - **Backend:** Go, SQLite (WAL mode), session-based auth, raw Cloudflare API calls (no SDK). - **Frontend:** Vue 3 SPA with Tailwind CSS and shadcn-vue components. - **Single binary** that serves both the API and the frontend. ## Docker ### Build ```bash docker build -t goflare . ``` ### Run ```bash docker run -p 8080:8080 -v ./data:/app/data -e GOFLARE_SESSION_SECRET=changeme goflare ``` Mount `/app/data` to persist the SQLite database across container restarts. ### Environment Variables | Variable | Default | Description | |---|---|---| | `GOFLARE_PORT` | `:8080` | Server listen address | | `GOFLARE_DB_PATH` | `/app/data/goflare.db` | SQLite database path | | `GOFLARE_SESSION_SECRET` | (random) | Set for sessions to survive restarts | | `GOFLARE_FRONTEND_DIR` | `/app/frontend` | Path to built frontend assets | ### Docker Compose ```yaml services: goflare: build: . ports: - "8080:8080" volumes: - ./data:/app/data environment: - GOFLARE_SESSION_SECRET=changeme ```