geoipfix is a Go service (HTTP+RPC) to retrieve geolocation information about an ip address with freegeoip helpers.
We are using bindings from the maxmind database.
- Make sure you have a Go language compiler >= 1.3 (required) and git installed.
- Make sure you have the following go system dependencies in your $PATH: bzr, svn, hg, git
- Ensure your GOPATH is properly set.
- Download it:
git clone https://github.com/ulule/geoipfix.git
- Run
make build
You have now a binary version of geoipfix in the bin
directory which
fits perfectly with your architecture.
If you don't want to install Go and Docker is installed on your computer
make docker-build
You will have a binary version of geoipfix compiled for linux in the bin
directory.
Configuration should be stored in a readable file and in JSON format.
A complete example of the configuration file with RPC+HTTP would be:
config.json
{
"server": {
"rpc": {
"port": 33001
},
"http": {
"port": 3001,
"cors": {
"allowed_origins": ["*.ulule.com"],
"allowed_methods": ["GET", "HEAD", "POST"],
"allowed_headers": ["Origin", "Accept", "Content-Type", "X-Requested-With"]
}
}
},
"database_path": "./GeoLite2-City.mmdb.gz"
}
Be careful, you should download first locally the GeoLite database because the service will be unavailable until it will download the database.
The HTTP server is based on chi.
It's disabled by default, you can activate it by adding the http section to server.
config.json
{
"server": {
"http": {
"port": 3001,
}
}
}
geoipfix supports CORS headers customization in your config file.
To enable this feature, set allowed_origins
and allowed_methods
,
for example:
config.json
{
"allowed_origins": ["*.ulule.com"],
"allowed_methods": ["GET", "HEAD"]
}
The RPC server is based on grpc.
It's disabled by default, you can activate it by adding the rpc section to server.
config.json
{
"server": {
"http": {
"port": 33001,
}
}
}
You can found a client example in the repository and execute it:
go run examples/client/main.go -ip {YOUR_IP_ADDRESS} -server-addr {RPC_ADDRESS}
When your configuration is done, you can start the service as follow:
geoipfix -c config.json
or using an environment variable:
GEOIPFIX_CONF=/path/to/config.json geoipfix
By default, this will run the application on port 3001 and can be accessed by visiting:
http://localhost:3001
The port number can be configured with port
option in your config file.
To see a list of all available options, run:
geoipfix --help
I recommend to install the live reload utility modd to make your life easier.
Install it:
go get github.com/cortesi/modd/cmd/modd
Then launch it in the geoipfix directory:
GEOIPFIX_CONF=config.json make live