{"id":28485367,"url":"https://github.com/gioxx/curl-ip","last_synced_at":"2025-11-01T09:02:21.280Z","repository":{"id":293131472,"uuid":"982750395","full_name":"gioxx/curl-ip","owner":"gioxx","description":"Get your internet IP address, nothing more. Available on https://hub.docker.com/r/gfsolone/ip and https://github.com/gioxx/curl-ip/pkgs/container/ip","archived":false,"fork":false,"pushed_at":"2025-06-18T08:30:10.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-18T08:36:16.774Z","etag":null,"topics":["curl","docker","docker-image","ip"],"latest_commit_sha":null,"homepage":"https://ip.gioxx.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gioxx.png","metadata":{"files":{"readme":"README-IT.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-13T10:57:59.000Z","updated_at":"2025-06-18T08:28:41.000Z","dependencies_parsed_at":"2025-05-13T21:01:59.363Z","dependency_job_id":"1ea8e095-319f-4454-a735-6b52fb45c0fb","html_url":"https://github.com/gioxx/curl-ip","commit_stats":null,"previous_names":["gioxx/curl-ip"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/gioxx/curl-ip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioxx%2Fcurl-ip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioxx%2Fcurl-ip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioxx%2Fcurl-ip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioxx%2Fcurl-ip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gioxx","download_url":"https://codeload.github.com/gioxx/curl-ip/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioxx%2Fcurl-ip/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262380935,"owners_count":23302125,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["curl","docker","docker-image","ip"],"created_at":"2025-06-08T00:10:14.242Z","updated_at":"2025-11-01T09:02:21.274Z","avatar_url":"https://github.com/gioxx.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌐 IP Check Service\n\nQuesto file è disponibile anche in [inglese](README.md).\n\nUn servizio web minimale che restituisce l’indirizzo IP pubblico del client. Replica il comportamento di [`https://checkip.amazonaws.com`](https://checkip.amazonaws.com), ma è self-hosted e containerizzato.\n\n## 🚀 Funzionalità\n\n- Risposta in testo semplice (plain-text)\n- Risoluzione IP con precedenza robusta:\n  1. `CF-Connecting-IP` (Cloudflare)\n  2. `X-Real-IP` (reverse proxy)\n  3. primo valore in `X-Forwarded-For`\n  4. `request.remote_addr`\n- Favicon servita via redirect permanente verso una `.ico` su GitHub (o disattivabile)\n- Endpoint `/debug` opzionale (Basic Auth + abilitazione via env)\n- Immagine Docker leggera; pronta per Compose / Swarm\n- Compatibile con reverse proxy (opzionale `ProxyFix`)\n\n---\n\n## 📦 Avvio rapido (Docker)\n\n```bash\ndocker run -d -p 80:8080 gfsolone/ip:latest\n# oppure via GHCR:\n# docker run -d -p 80:8080 ghcr.io/gioxx/ip:latest\n```\n\nPoi visita: `http://localhost`  \nOppure: `curl http://localhost`\n\n\u003e Suggerimento: preferisci un tag fisso (es. `:1.0.0`) o un digest al posto di `:latest` per deploy riproducibili.\n\n---\n\n## 🧱 Docker Compose\n\n### Ultra-minimale\nTrovi qui il file già pronto: [`docker-compose.yml`](example/docker-compose.yml)\n\n```yaml\nversion: \"3.8\"\nservices:\n  ip:\n    image: gfsolone/ip:latest\n    ports:\n      - \"80:8080\"\n    restart: unless-stopped\n```\n\n### Minimale con variabili d’ambiente (consigliato)\nTrovi qui il file già pronto: [`docker-compose-env.yml`](example/docker-compose-env.yml), tu dovrai solo ricordarti di creare il file .env (o usare l'env di Portainer o qualsiasi altro prodotto tu stai utilizzando), e infine rinominare questo file in `docker-compose.yml`\n\n```yaml\nversion: \"3.8\"\nservices:\n  ip:\n    image: gfsolone/ip:latest\n    ports:\n      - \"80:8080\"\n    env_file:\n      - .env\n    restart: unless-stopped\n```\n\n`.env` di esempio:\n\n```env\nENABLE_DEBUG=false\nDEBUG_TOKEN=cambia_questa_password\n```\n\n\u003e Usi GHCR al posto di Docker Hub? Sostituisci l’immagine con `ghcr.io/gioxx/ip:latest` (o un tag fisso).\n\n---\n\n## 🔧 Configurazione\n\nVariabili d’ambiente:\n\n- `ENABLE_DEBUG` (`true`/`false`)  \n  Abilita l’endpoint `/debug` **solo** quando impostata a `true`.\n- `DEBUG_TOKEN`  \n  Password per la Basic Auth di `/debug` (lo username è sempre `debug`).  \n  **Non inserire segreti nell’immagine** — passali come environment o secrets.\n\nReverse proxy:\n\n- Se sei dietro Nginx/Traefik, valuta l’abilitazione di `ProxyFix` (vedi commenti in `app.py`) per far riflettere correttamente IP/host impostati dal proxy.\n\nFavicon:\n\n- L’app reindirizza `/favicon.ico` a una `.ico` ospitata su GitHub e la “annuncia” con un header `Link` dalla `/`.  \n  Preferisci un URL “pinnato” a un commit per garantire immutabilità, ad es.:  \n  `https://raw.githubusercontent.com/gioxx/curl-ip/\u003ccommit_sha\u003e/favicon.ico`  \n  Se vuoi **disabilitarla**, sostituisci la route con una risposta `204 No Content` con cache lunga.\n\n---\n\n## 🔍 Endpoint\n\n- `GET /`  \n  Restituisce l’IP del client come `text/plain; charset=utf-8`. Aggiunge `Link: \u003c/favicon.ico\u003e; rel=\"icon\"`.\n\n- `GET|HEAD /favicon.ico`  \n  `308 Permanent Redirect` verso l’icona su GitHub. Cache lunga (`Cache-Control: public, max-age=31536000, immutable`).\n\n- `GET /debug`  \n  Restituisce alcune informazioni sugli header **solo se**:\n  - `ENABLE_DEBUG=true`, **e**\n  - la Basic Auth è valida (`username: debug`, `password: $DEBUG_TOKEN`).\n\n---\n\n## 🔍 Esempio\n\n```bash\n$ curl http://localhost\n203.0.113.42\n```\n\n---\n\n## 🌐 Demo pubblica\n\nÈ disponibile un endpoint demo: https://ip.gioxx.org\n\n\u003e [!NOTE]  \n\u003e Il container è ospitato su un Raspberry Pi a casa (best effort).  \n\u003e Potrebbe non essere sempre raggiungibile, meglio non usarlo in produzione.  \n\u003e L'endpoint si comporta come questo servizio: restituisce l'IP del client in testo semplice.\n\n---\n\n## 📄 Licenza\n\nLicenza MIT — fai ciò che vuoi, ma mantieni i crediti 😉\n\n## 📬 Feedback e contributi\n\nFeedback, suggerimenti e richieste di pull sono benvenuti!\nSentitevi liberi di [segnalare un problema](https://github.com/gioxx/curl-ip/issues) o di contribuire direttamente.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgioxx%2Fcurl-ip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgioxx%2Fcurl-ip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgioxx%2Fcurl-ip/lists"}