https://github.com/gioxx/curl-ip
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
https://github.com/gioxx/curl-ip
curl docker docker-image ip
Last synced: 3 months ago
JSON representation
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
- Host: GitHub
- URL: https://github.com/gioxx/curl-ip
- Owner: gioxx
- License: mit
- Created: 2025-05-13T10:57:59.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-06-18T08:30:10.000Z (8 months ago)
- Last Synced: 2025-06-18T08:36:16.774Z (8 months ago)
- Topics: curl, docker, docker-image, ip
- Language: Python
- Homepage: https://ip.gioxx.org
- Size: 39.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README-IT.md
- License: LICENSE
Awesome Lists containing this project
README
# 🌐 IP Check Service
Questo file è disponibile anche in [inglese](README.md).
Un 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.
## 🚀 Funzionalità
- Risposta in testo semplice (plain-text)
- Risoluzione IP con precedenza robusta:
1. `CF-Connecting-IP` (Cloudflare)
2. `X-Real-IP` (reverse proxy)
3. primo valore in `X-Forwarded-For`
4. `request.remote_addr`
- Favicon servita via redirect permanente verso una `.ico` su GitHub (o disattivabile)
- Endpoint `/debug` opzionale (Basic Auth + abilitazione via env)
- Immagine Docker leggera; pronta per Compose / Swarm
- Compatibile con reverse proxy (opzionale `ProxyFix`)
---
## 📦 Avvio rapido (Docker)
```bash
docker run -d -p 80:8080 gfsolone/ip:latest
# oppure via GHCR:
# docker run -d -p 80:8080 ghcr.io/gioxx/ip:latest
```
Poi visita: `http://localhost`
Oppure: `curl http://localhost`
> Suggerimento: preferisci un tag fisso (es. `:1.0.0`) o un digest al posto di `:latest` per deploy riproducibili.
---
## 🧱 Docker Compose
### Ultra-minimale
Trovi qui il file già pronto: [`docker-compose.yml`](example/docker-compose.yml)
```yaml
version: "3.8"
services:
ip:
image: gfsolone/ip:latest
ports:
- "80:8080"
restart: unless-stopped
```
### Minimale con variabili d’ambiente (consigliato)
Trovi 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`
```yaml
version: "3.8"
services:
ip:
image: gfsolone/ip:latest
ports:
- "80:8080"
env_file:
- .env
restart: unless-stopped
```
`.env` di esempio:
```env
ENABLE_DEBUG=false
DEBUG_TOKEN=cambia_questa_password
```
> Usi GHCR al posto di Docker Hub? Sostituisci l’immagine con `ghcr.io/gioxx/ip:latest` (o un tag fisso).
---
## 🔧 Configurazione
Variabili d’ambiente:
- `ENABLE_DEBUG` (`true`/`false`)
Abilita l’endpoint `/debug` **solo** quando impostata a `true`.
- `DEBUG_TOKEN`
Password per la Basic Auth di `/debug` (lo username è sempre `debug`).
**Non inserire segreti nell’immagine** — passali come environment o secrets.
Reverse proxy:
- Se sei dietro Nginx/Traefik, valuta l’abilitazione di `ProxyFix` (vedi commenti in `app.py`) per far riflettere correttamente IP/host impostati dal proxy.
Favicon:
- L’app reindirizza `/favicon.ico` a una `.ico` ospitata su GitHub e la “annuncia” con un header `Link` dalla `/`.
Preferisci un URL “pinnato” a un commit per garantire immutabilità, ad es.:
`https://raw.githubusercontent.com/gioxx/curl-ip//favicon.ico`
Se vuoi **disabilitarla**, sostituisci la route con una risposta `204 No Content` con cache lunga.
---
## 🔍 Endpoint
- `GET /`
Restituisce l’IP del client come `text/plain; charset=utf-8`. Aggiunge `Link: ; rel="icon"`.
- `GET|HEAD /favicon.ico`
`308 Permanent Redirect` verso l’icona su GitHub. Cache lunga (`Cache-Control: public, max-age=31536000, immutable`).
- `GET /debug`
Restituisce alcune informazioni sugli header **solo se**:
- `ENABLE_DEBUG=true`, **e**
- la Basic Auth è valida (`username: debug`, `password: $DEBUG_TOKEN`).
---
## 🔍 Esempio
```bash
$ curl http://localhost
203.0.113.42
```
---
## 🌐 Demo pubblica
È disponibile un endpoint demo: https://ip.gioxx.org
> [!NOTE]
> Il container è ospitato su un Raspberry Pi a casa (best effort).
> Potrebbe non essere sempre raggiungibile, meglio non usarlo in produzione.
> L'endpoint si comporta come questo servizio: restituisce l'IP del client in testo semplice.
---
## 📄 Licenza
Licenza MIT — fai ciò che vuoi, ma mantieni i crediti 😉
## 📬 Feedback e contributi
Feedback, suggerimenti e richieste di pull sono benvenuti!
Sentitevi liberi di [segnalare un problema](https://github.com/gioxx/curl-ip/issues) o di contribuire direttamente.