simple geo ip server

This commit is contained in:
Lectom C Han
2025-12-05 17:40:46 +09:00
commit 5d0221f67d
12 changed files with 418 additions and 0 deletions

54
README.md Normal file
View File

@@ -0,0 +1,54 @@
# GeoIP REST (Go Fiber)
간단한 GeoIP 조회 API입니다. `GeoLite2-City.mmdb`를 사용해 IP를 나라/지역/도시/위도/경도로 매핑합니다.
## 요구 사항
- Go 1.25+
- `GeoLite2-City.mmdb` (레포지토리 루트에 위치)
- Docker / Docker Compose (컨테이너 실행 시)
## 설치 및 실행
### 로컬 (Go)
```bash
go mod tidy # 필요한 경우 go.sum 생성
PORT=8080 GEOIP_DB_PATH=./GeoLite2-City.mmdb go run ./cmd/server
```
### Docker Compose
```bash
docker compose up --build
```
- `GeoLite2-City.mmdb`가 컨테이너에 read-only로 마운트됩니다.
- 기본 포트: `8080`.
## 환경 변수
- `PORT` (기본 `8080`): 서버 리스닝 포트
- `GEOIP_DB_PATH` (기본 `/data/GeoLite2-City.mmdb`): GeoIP 데이터베이스 경로
## 사용법
- 헬스체크: `GET /health`
- 조회: `GET /lookup?ip=<IPv4|IPv6>`
- `ip` 생략 시 호출자 IP를 사용
예시:
```bash
curl "http://localhost:8080/lookup?ip=1.1.1.1"
```
응답 예시:
```json
{
"IP": "1.1.1.1",
"Country": "Australia",
"Region": "Queensland",
"City": "South Brisbane",
"Address": "South Brisbane, Queensland, Australia",
"Latitude": -27.4748,
"Longitude": 153.017
}
```
## 개발 참고
- 주요 코드: `cmd/server/main.go`, `internal/geo/resolver.go`
- 테스트 실행: `go test ./...`
- 컨테이너 빌드: `docker build -t geoip:local .`