Ubuntu14安装Docker搭建隔离超好的Pogomap用来搜寻附近的Pokemon

0. 写在前面

最近Pokemon Go大火,我也不免俗地天天在玩。但是由于附近一直没有什么好的宠物小精灵,而且好多次想抓附近的妙蛙种子都找不到。所以就想看看有没有可以实时搜索宠物小精灵的地图。结果一看,还真的有!

不过这篇不是介绍用什么app的,而是记录一下最近刚好在学的docker在这方面的应用。就是直接用docker把pogomap的镜像拉过来,然后反代到网站上,最做成自己的私有宠物小精灵雷达。

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 的安装方法参照这里:

PokemonGo-Map’s Documentation

安装Pogomap需要实现准备以下几件事:

  1. 需要Pokemon Trainer Club(PTC)的账号密码,可以在这里申请。新用户要等15分钟后才能登录。
  2. Google Maps Key,参照这里
  3. 默认的坐标,可以在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端口就能搞定。