把微信后台做成Docker镜像,托管在灵雀云上是个很棒的想法,最近终于看到有人实现啦!用这个镜像配置微信公众号,可以实现公众号与粉丝的智能互动。或许你还有更好的想法,一定要告诉我们哦!
首先介绍下作者:曹艳明,Docker爱好者,目前就职于网易,从事网易邮箱的Android开发工作。
本文将具体介绍用Docker来搭建一个微信公众号的后台,主要涉及Docker里运行JavaWeb的技术,一起来做这个有意思的事情吧!
如果你对Docker了解不是很多的话,欢迎查看作者的上一篇教程:Docker简明教程
项目结构介绍
首先看一下整个项目的结构:
“\etc\nginx-conf”是nginx的配置文件,用来做端口的转发。里面的代码如下:
server {
listen 80;
server_name *.myalauda.cn;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
}
我们将所有访问*.myalauda.cn下80端口的请求全部转移到8080端口,也就是提交给Tomcat进行处理。
“\etc\scripts”是Docker启动运行的脚本,里面会启动Tomcat与Nginx服务。
#!/bin/sh
# Start Tomcat
$TOMCAT_HOME/bin/startup.sh
# Start nginx
nginx
“soft”文件夹里是maven与tomcat的安装文件,这里没有采用在Dockerfile里直接从网络下载安装包的方式,是防止网络下载地址在某些国家不能访问或者链接地址发生更改。
“Dockerfile”是组织整个项目的心脏,包含Docker镜像的构建,然后将项目编译并部署在容器的Tomcat上。
Dockerfile编写
来看一下整个Dockerfile:
FROM ubuntu
# 签名
MAINTAINER saymagic "saymagic@163.com"
# 安装JDK、nginx、Git
RUN apt-get update
RUN apt-get install openjdk-7-jre -y
RUN apt-get install openjdk-7-jdk -y
RUN apt-get install nginx -y
RUN apt-get install git -y
#拷贝nginx配置文件
ADD ./etc/nginx-conf /etc/nginx/conf.d
#拷贝启动脚本
ADD ./etc/scripts /usr/local
RUN chmod a+x /usr/local/start.sh
#拷贝Tomcat与maven安装包
ADD ./soft /tmp
# 安装Tomcat 7
RUN cd /usr/local && tar xzf /tmp/apache-tomcat-7.0.64.tar.gz
RUN ln -s /usr/local/apache-tomcat-7.0.64 /usr/local/tomcat
RUN rm /tmp/apache-tomcat-7.0.64.tar.gz
# 安装maven
RUN cd /usr/local && tar xzf /tmp/apache-maven-3.1.1-bin.tar.gz
RUN ln -s /usr/local/apache-maven-3.1.1 /usr/local/maven
RUN rm /tmp/apache-maven-3.1.1-bin.tar.gz
# clone 仓库
RUN cd / && git clone https://github.com/saymagic/wx_maven
# 定义环境变量
ENV TOMCAT_HOME /usr/local/tomcat
ENV MAVEN_HOME /usr/local/maven
ENV APP_HOME /wx_maven
#编译源代码与部署
RUN cd /wx_maven && /usr/local/maven/bin/mvn package
RUN rm -rf $TOMCAT_HOME/webapps/*
RUN cd /wx_maven && cp target/wx_server.war $TOMCAT_HOME/webapps/ROOT.war
#启动Tomcat与Nginx
CMD /usr/local/start.sh && tail -F /usr/local/tomcat/logs/catalina.out
EXPOSE 80 8080
里面我对每个主要步骤都做了注释,整体思路是这样:首先安装JDK、Maven与Tomcat,然后使用Maven编译webapp下面的java代码,并将打好的war包重命名为ROOT.war并拷进Tomcat的webapp目录来部署。最后运行start.sh来启动Tomcat与Nginx。
源码解析
整个源码的目录如下:
`WxApiServlet`是处理请求的实现类,它会将微信服务器发来的Post请求封装成 `MsgRequest`对象,然后根据`MsgRequest`类型的不同(语音、文字、图片)来生成不同类型的handler,这里我只做了Event与Text类型的处理类,添加其它类型的处理需要继承`BaseHandler`,实现里面的`doHandleMsg`方法。这里需要注意两点,第一点是我将普通的文字与语音请求通过图灵机器人进行回复,因此你需要去图灵机器人申请apikey:
然后再Config.java中配置“APPKEY”属性。第二点是微信公众平台会对首次添加的后台地址做token验证,因此也需要在Config.java文件里配置“TOKEN”字段。这个字段的值需要和微信公众平台后台里设置的token相等。
Alauda部署
到这里,我们相当于有了可以部署的镜像,但作为微信公众号的后台,我们必须提供一个可供外网访问的域名,为了一个实验去租用一台VPS有些不值并且会带来很多额外工作。
新版本的镜像我发布在了灵雀云上,如果没有灵雀云的账号,可以先在灵雀云上注册,然后来到https://hub.alauda.cn/repos/saymagic/wx_server,点击“创建服务”链接:
接着填写服务名称,点击创建即可完成创建:
注意的是,如果在点击“创建服务”按钮后没有来到此页面,可以先进行收藏,然后在收藏里选择创建即可。
等待其显示运行时,下面的链接就是我们的微信公众号后台的URL地址,我们选择后填入到微信后台即可,Token为“saymagic”:
微信公众平台注册
这个就无需多说,我们去[微信公众平台](https://mp.weixin.qq.com/)注册一个新的公众号,然后进入开发者模式,添加我们刚刚生成的URL与我们自己定义的token。
点击确定按钮,如果提示修改成功则表示我们token验证成功了,可以测试一下了!
测试
如果你成功收到了服务器返回的信息,恭喜你成功的用Docker来搭建了公众号的后台。
总结
此文就是我在将微信公众号后台部署到Docker上的详细笔记了。希望对看到最后的人有帮助。最后再次列出本文涉及到的几个仓库地址:
网友评论