https://github.com/technickai/node_geoip_server
Node js http server that delivers geoip data
https://github.com/technickai/node_geoip_server
Last synced: 5 months ago
JSON representation
Node js http server that delivers geoip data
- Host: GitHub
- URL: https://github.com/technickai/node_geoip_server
- Owner: TechNickAI
- License: isc
- Created: 2012-04-21T20:57:20.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2012-10-25T18:32:35.000Z (over 12 years ago)
- Last Synced: 2024-12-28T02:50:24.909Z (5 months ago)
- Language: JavaScript
- Size: 188 KB
- Stars: 10
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Overview
Node js http server that delivers geoip data via a web service. Once running, the server will
output a JSON strong with the users city, state, country, etc. like this:```
{
"country_code": "US",
"country_code3": "USA",
"country_name": "United States",
"region": "CA",
"city": "Pleasanton",
"latitude": 37.66239929199219,
"longitude": -121.89630126953125,
"metro_code": 807,
"dma_code": 807,
"area_code": 925,
"continent_code": "NA"
}
```Inputs:
* The ip address is determined by looking at the following, stopping once one is found
* `?ip=xxx.xxx.xxx.xxx`in the url
* `X-Forwarded-For` HTTP header (for proxies). Supports multiple proxies.
* IP address of the user via REMOTE_ADDR
* `callback=$functionName` wrap the result in this callback function for jsonp.
* `indent=$numSpaces` pretty print the output with this number of spaces. Ex. indent=2## Dependencies
* The excellent node GeoIP library from kuno: https://github.com/kuno/GeoIP
* MaxMind's geoip city database, available here:
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
* Optional: Forever, a utility to keep the service running in production. https://github.com/nodejitsu/forever## Installation
1. Install node.js - https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
1. Install npm - http://npmjs.org/ (run the install.sh as root)
1. Install the C api from maxmind. Recomend you use use a packagemanager of your choice
for your OS instead of compile from source, such assudo apt-get install geoip-database
orsudo yum install GeoIP
.
Known to work with version 1.4.8
1. Install dependencies for this project:
`npm install`
1. Download and gunzip the latest http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz The default location $repo_root/GeoLiteCity.dat , if you put it somewhere else, specify `--geodb` when starting the service.1. Run this (from the root of the repo):
```
curl -o GeoLiteCity.dat.gz http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz\
&& gunzip GeoLiteCity.dat.gz
```## Usage
If you are using Forever (recommended):forever start -l forever.log -o out.log -e err.log app.js
If you aren't using Forever
node app.js
Options:
--port, -p port to run the server on [default: 9042]
--geodb, -g path to the GeoLiteCity database from MaxMind [default: "./GeoLiteCity.dat"]
--help, -h, -? this help message [default: false]## Updating the database
Maxmind updates their city database once a month. Grab the latest one and restart the service. Here's a cron that will do it once a month
```
42 0 13 * * cd /path/to/this/repo/ \
&& curl -o GeoLiteCity.dat.gz http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz\
&& rm GeoLiteCity.dat\
&& gunzip GeoLiteCity.dat.gz\
&& forever restartall
```## TODO
* Unit tests
* Continuous integration testing with travis-ci
* Automate the install process## License
BSD, see LICENSE