0. 写在前面
最近Pokemon Go大火,我也不免俗地天天在玩。但是由于附近一直没有什么好的宠物小精灵,而且好多次想抓附近的妙蛙种子都找不到。所以就想看看有没有可以实时搜索宠物小精灵的地图。结果一看,还真的有!
不过这篇不是介绍用什么app的,而是记录一下最近刚好在学的docker在这方面的应用。就是直接用docker把pogomap的镜像拉过来,然后反代到网站上,最做成自己的私有宠物小精灵雷达。
1. Ubuntu 14.04 安装 Docker
首先在Ubuntu14上安装Docker,直接参照官网的教程来。
$ uname -r //查看内核版本,比这更新就行
3.11.0-15-generic
$ sudo apt-get update //更新源
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D //下面要添加源
$ sudo vim /etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo ubuntu-trusty main //新建这个文件,添加这一行,然后保存
$ sudo apt-get update //再更新一次
$ sudo apt-get purge lxc-docker //卸载以前版本的docker(如有)
$ apt-cache policy docker-engine //确认源正确
docker-engine:
Installed: 1.12.0-0~trusty
Candidate: 1.12.0-0~trusty
Version table:
*** 1.12.0-0~trusty 0
500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages
100 /var/lib/dpkg/status
1.11.2-0~trusty 0
500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages
...
$ sudo apt-get install linux-image-extra-$(uname -r) //Ubuntu14,15,16需要安装这个,可能已预装
$ sudo apt-get install apparmor //Ubuntu12,14需要安装这个,可能已预装
//下面开始安装Docker
$ sudo apt-get install docker-engine
$ sudo service docker start
$ sudo docker run hello-world //这句是测试docker有没有正确安装,如果正确的话会从dockerhub拉回来一个“hello-world”的镜像并运行。
2. 在Docker上部署Pogomap
Docker安装好后,就可以部署Pogomap了。部署在Docker里面的好处就是隔离性很好,装错了无所谓,直接删了重装,更新也方便。而且只要外部端口没变,里面的Pogomap换什么版本都不需要改Nginx。
当然也有缺点,很多镜像动不动就几百MB,开销虽然比VM小但是明显比直接安装要大。
Pogomap 的安装方法参照这里:
安装Pogomap需要实现准备以下几件事:
- 需要Pokemon Trainer Club(PTC)的账号密码,可以在这里申请。新用户要等15分钟后才能登录。
- Google Maps Key,参照这里
- 默认的坐标,可以在Google Maps上随便找一个地点的经纬度
都准备好后,以root权限运行下面的命令:
$ docker run -d -p xxxx:5000 --name pogomap \ //xxxx是映射到localhost的端口(nginx反代时要用),5000是容器的端口
chuyskywalker/pokemongo-map \ //有时候可能这个镜像不在了,可以上DockerHub找其他镜像
-a ptc -u ptc用户名 -p ptc密码 \
-k 'google-maps-key' \
-l '坐标' \
-st 5
//这时候应该会拉来pogomap的镜像并开始运行了,如果要查看状态的话:
$ docker logs -f pogomap //如果看到类似下面的状态,说明已经成功运行,并且已经在搜寻了。
2016-08-10 08:32:16,506 [ search_worker_0][ search][ INFO] Search step 3 beginning (queue size is 58)
2016-08-10 08:32:17,512 [ search_worker_0][ models][ INFO] Upserted 0 pokemon, 504 pokestops, and 16 gyms
//如果要与容器交互:
$ docker exec -ti pogomap bash //会生成pseudo-tty连接容器,就像bash一样
3. Nginx反向代理Pogomap到某个子域名上
打开nginx里子域名相应的站点配置文件:
server {
listen 80;
server_name sub.domain.com;
location / {
proxy_pass http://localhost:xxxx;
}
}
PS. Pogomap的文档里说当要用到定位服务时,只有以https的方式连接才生效。不过如果用Cloudflare的话自带免费的ssl,这里就不要监听443端口了。所以配置文件里监听80端口就能搞定。