来源:http://www.shanhubei.com/archives/2572.html
github:GitHub - shanhubei/tools_go: 干净的gin项目,获取ip的地理位置
gitee: tools_go: 干净的gin项目,获取ip的地理位置
关于
是基于 Gin 进行模块化设计的 API工具,引入Gin最少化的配置。
Gin 是一个用 Go (Golang) 编写的 Web 框架,小巧、性能优越。
主要为了 学习和测试用。
示例:
1、获取ip的地理位置信息
http://xxxx.xxxx.xxxx/tools/get_geoip
无参数是获取请求端IP的位置信息
使用&安装
1、git clone 地址
2、需要下载geoip数据库
MaxMind Server IP Addresses | MaxMind Developer Portal
修改位置在代码: geoip2.Open
3、go run main.go
4、交叉编译到服务器docker
4.1、Window下编译可执行程序
GOARCH:编译目标平台的硬件体系架构(amd64, 386, arm, ppc64等)。
GOOS:编译目标平台上的操作系统(darwin, freebsd, linux, windows)。
CGO_ENABLED:代表是否开启CGO,1表示开启,0表示禁用。由于CGO不能支持交叉编译,所以需要禁用。
#Mac SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go #Linux SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go
4.2、生成docker的相关命令
构建最小镜像:由于官方的golang镜像太大了,720多M,所以为了最小化我们的应用,我们采取了alpine镜像,大小连4MB都不到。
#编写Dockerfile DockerFile如下: FROM alpine MAINTAINER Aze WORKDIR /go/src/ COPY . . EXPOSE 8777 ENTRYPOINT ["./app/main"] #构建镜像 docker build -t goenv:v1 . #运行程序 docker run --name golanggeoip -v /mydata/data/geoip:/go/src -p 8608:9090 -it --privileged -u root --entrypoint /bin/sh goenv:v1 #进入容器 ./main &
4.3、配置nginx反代理和proxy_pass转发。 就可以愉快的使用了
搭建过程
1、初始化项目,切换到项目根目录
# 1 go mod init "tools_go" # tools_go项目名称 # 创建main.go文件 # 2 进入tools_go/router目录,初始化模块 go mod init router # 下载依赖包,router需要gin依赖 go get -u github.com/gin-gonic/gin # 3 进入tools_go/service目录,初始化模块 go mod init service # 4 初始化工作区 go work init ./router ./service
ps:
如果下载超时,换成国内可访问的地址,设置GOPROXY代理:
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=off (关闭包的有效性验证)
go env -w GOSUMDB=“sum.golang.google.cn” (也可设置国内提供的sum 验证服务)
2、编写相关的业务代码
todo
补充
go.work 文件中总共支持三个指令。
go:声明 go 版本号,主要用于后续新语义的版本控制。
use:声明应用程序所依赖的模块的特定文件路径。该路径可以是绝对的或相对的,并且可以在应用程序的命运目录之外。
replace:声明模块依赖的导入路径被替换,优先于 go.mod 中的 replace 指令。
附录
1、可以在MaxMind Server IP Addresses | MaxMind Developer Portal 上注册账号 申请key 自动更新,是免费的。
通过注册引导页面,点击“Generate a License Key”
GitHub - maxmind/geoipupdate: GeoIP update client code 这里有详细的安安装及配置说明
运行geoipupdate命令并加入定时任务
2、python代码:
安装:
pip install geoip2
vim web.py
from flask import Flask import geoip2.database
app = Flask(name) reader=geoip2.database.Reader('/home/geoipupdate_4.8.0_linux_amd64/GeoLite2-City.mmdb') @app.route("/") def index():
ip_addr = request.remote_addr
return "Hello World!"
@app.route("/getip/<ip>") def getip(ip): ipinfo=reader.city(ip) ipinfo_json={'country':ipinfo.country.name,'city':ipinfo.city.name,'location':[ipinfo.location.longitude,ipinfo.location.latitude]} return ipinfo_json
if name == "main": app.run(host='0.0.0.0',port=8090)
访问链接 http://192.168.1.166:8090/getip/113.97.30.189