Π‘ΡΡΡΠΎΡ ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ΅ΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° geoip, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΡΠ»ΡΠ³Π° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° IP Π°Π΄ΡΠ΅ΡΠΈ ΡΡΠ΅Π· REST API. ΠΡΠΎΠ΅ΠΊΡΡΡ Π΅ Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ ΡΠ»Π΅ΡΠ½ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡΠ° Π½Π° GeoIP ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°ΠΉΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ°ΠΌΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ Π½Π° Π±Π°Π·ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ ΡΠΎΡΠΌΠ°ΡΠ° MMDB. ΠΠΎΠ΄ΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Rust ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ MIT. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° Π² Linux ΠΈ macOS, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π² Π΄ΡΡΠ³ΠΈ UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°:
- ΠΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΈ Π½ΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ Π΅Π·ΠΈΠΊ Π±Π΅Π· ΡΡΠ±ΠΈΡΠ°Ρ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ.
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° IP Π°Π΄ΡΠ΅ΡΠ° (Π΄ΡΡΠΆΠ°Π²Π°, Π³ΡΠ°Π΄, ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΈ Π΄Ρ.) ΡΡΠ΅Π· REST API, Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ MaxMind GeoLite2 (Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ) ΠΈ MaxMind GeoIP2 (ΠΏΠ»Π°ΡΠ½ΠΎ).
- ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΈΡ IP Π°Π΄ΡΠ΅ΡΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» (Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΡΡΠ΅Π· ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ°; ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ ip Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ° Π΅ Π½Π΅Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½).
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π±Π°Π·ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ (ΠΊΠ°ΠΊΡΠΎ ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° MaxMind Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Account ID ΠΈ Licence Key, ΡΠ°ΠΊΠ° ΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ URL Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ; Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅).
- Π£Π΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΡΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠ°ΡΡΠ°ΡΠ° OpenStreetMap.

- ΠΠ° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ, ΡΡΠ΄ΡΡΠΆΠ°ΡΠΈ ΠΏΠΎΠ»Π΅ΡΠΎ timezone, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ»Π΅ posix_timezone (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Europe/Paris ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° Π² CET-1CEST,M3.5.0,M10.5.0/3). Π’ΠΎΠ²Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ°ΡΠΎΠ²ΠΈΡ ΠΏΠΎΡΡ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ESP32 ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ newlib Π±Π΅Π· Π²Π³ΡΠ°Π΄Π΅Π½Π° tzdata). Π’Π°Π·ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π½Π° ΠΈ Π»ΠΈΠΏΡΠ²Π° Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ°ΡΠΎΠ²ΠΈΡΠ΅ Π·ΠΎΠ½ΠΈ (ΠΈΠ½ΡΠ΅ΡΠ²Π°Π», ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Ρ; ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡΡ ΡΠ°ΠΉΡ Π½Π° IANA). ΠΡΠΈ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π±Π°Π·Π°.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° Π°ΠΊΡΡΠ°Π»Π½ΠΈ Π°ΡΡ ΠΈΠ²ΠΈ Π½Π° Π±Π°Π·ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ HTTP Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΡΡΠ»ΡΠ³Π°ΡΠ° (ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π΄ΠΈΠ½ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠΊΡΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π·Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΡΠ°Π·Ρ ΠΎΠ΄Π° Π½Π° ΠΊΠ²ΠΎΡΠ°ΡΠ° Π½Π° MaxMind).
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π·Π°ΡΠΈΡΠ° Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π΅Π½ API ΠΊΠ»ΡΡ.
- ΠΠ°Π»ΠΈΡΠΈΠ΅ Π½Π° OpenAPI ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ Swagger UI Π·Π° ΡΠ»Π΅ΡΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ.
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π³ΠΎΡΠΎΠ² Docker ΠΎΠ±ΡΠ°Π· Π·Π° Π±ΡΡΠ·ΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅: docker run \ -e MAXMIND_ACCOUNT_ID=XXXX \ -e MAXMIND_LICENCE_KEY=YYYY \ -e OSM_TILES_URL="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" \ # ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ -v geoip_data:/data \ -p 8080:8080 \ ghcr.io/quoi-dev/geoip:latest
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru

