用Docker搭建微信公众号

此文我将带大家用Docker来搭建一个微信公众号的后台,主要涉及Docker里运行JavaWeb的技术,一起来做这个有意思的事情吧! (如果你对Docker了解不是很多的话,欢迎查看我的上一篇教程: Docker简明教程)

项目结构介绍

首先看一下整个项目的结构:

\etc\nginx-conf是nginx的配置文件,用来做端口的转发。里面的代码如下:

server {listen 80;server_name *.daoapp.io;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/;}}

我们将所有访问*.daoapp.io下80端口的请求全部转移到8080端口,也就是提交给Tomcat进行处理。

\etc\scripts是Docker启动运行的脚本,里面会启动Tomcat与Nginx服务。

 #!/bin/sh  # Start Tomcat$TOMCAT_HOME/bin/startup.sh
# Start nginxnginx

soft文件夹里是maven与tomcat的安装文件,这里没有采用在Dockerfile里直接从网络下载安装包的方式,是防止网络下载地址在某些国家不能访问或者链接地址发生更改。

webapp目录是一个标准的maven项目,里面是我们微信公众号后台的主要源码。源码的目录结构如下:

WxApiServlet是处理请求的实现类,它会将微信服务器发来的Post请求封装成 MsgRequest对象,然后根据MsgRequest类型的不同(语音、文字、图片)来生成不同类型的handler,这里我只做了Event与Text类型的处理类,添加其它类型的处理需要继承BaseHandler,实现里面的doHandleMsg方法。这里需要注意两点,第一点是我将普通的文字与语音请求通过图灵机器人进行回复,因此你需要去图灵机器人申请apikey:

然后再Config.java中配置APPKEY属性。第二点是微信公众平台会对首次添加的后台地址做token验证,因此也需要在Config.java文件里配置TOKEN字段。这个字段的值需要和微信公众平台后台里设置的token相等。

daocloud.ymlDaoloud的CI脚本,用来对项目做持续集成。

Dockerfile是组织整个项目的心脏,包含Docker镜像的构建,然后将项目编译并部署在容器的Tomcat上。

Dockerfile编写

来看一下整个Dockerfile:

FROM ubuntu

# 签名MAINTAINER saymagic "saymagic@163.com"
# 安装JDK与nginxRUN apt-get updateRUN apt-get install openjdk-7-jre -yRUN apt-get install openjdk-7-jdk -yRUN apt-get install nginx -y
#拷贝nginx配置文件ADD ./etc/nginx-conf /etc/nginx/conf.d
#拷贝启动脚本ADD ./etc/scripts /usr/localRUN chmod a+x /usr/local/start.sh
#拷贝Tomcat与maven安装包ADD ./soft /tmp
# 安装Tomcat 7RUN cd /usr/local && tar xzf /tmp/apache-tomcat-7.0.64.tar.gzRUN ln -s /usr/local/apache-tomcat-7.0.64 /usr/local/tomcatRUN rm /tmp/apache-tomcat-7.0.64.tar.gz
# 安装mavenRUN cd /usr/local && tar xzf /tmp/apache-maven-3.1.1-bin.tar.gzRUN ln -s /usr/local/apache-maven-3.1.1 /usr/local/mavenRUN rm /tmp/apache-maven-3.1.1-bin.tar.gz
RUN mkdir -p /webappADD ./webapp /webapp
# 定义环境变量ENV TOMCAT_HOME /usr/local/tomcatENV MAVEN_HOME /usr/local/mavenENV APP_HOME /webapp
#编译源代码与部署RUN cd /webapp && /usr/local/maven/bin/mvn package RUN rm -rf $TOMCAT_HOME/webapps/*RUN cd /webapp && cp target/wx_server.war $TOMCAT_HOME/webapps/ROOT.war
#启动Tomcat与NginxCMD /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。

Daocloud部署

到这里,我们相当于有了可以部署的镜像,但作为微信公众号的后台,我们必须提供一个可供外网访问的域名,为了一个实验去租用一台VPS有些不值并且会带来很多额外工作。这里我们可以使用Daocloud平台来发布我们的镜像。它有免费的额度保证我们发布镜像来完成这个项目,并且还有很多直击痛点的优秀功能。

如果你是第一次使用Daocloud,首先我们去Daocloud注册新账号,DaoCloud会将Github、GitCafe等git服务商作为代码源,所以你首先需要在[用户中心]->[第三方账户]里绑定Github、GitCafe账号:

为了你下面的操作更加方便,你可以直接Fork我的项目,项目地址:

Github: https://github.com/saymagic/wxserver

Gitcafe:https://gitcafe.com/saymagic/wxserver

Bitbucket: https://bitbucket.org/saymagic/wxserver

Coding:https://coding.net/u/saymagic/p/wxserver/git

(注意的是:在Fork之后,记得修改token与图灵的appkey)

接下来选择[代码构建]->[创建新项目]

我们可以给我们的项目起个名字叫做weixinserver

然后在[设置代码源]里选择我们Fork的项目。选择持续集成。

最后,点击开始创建按钮。Daoloud就会默认将master分支进行构建:

最后,点击[查看镜像]->[部署最新版本],Daoclod就会愉快的运行起来:

上图标红的URL链接就是Daocloud为我们生成的微信公众后台链接。

持续集成

Daocloud提供了持续集成的功能,注意,持续集成不是持续构建,Daocloud的持续集成是保证我们每次push的版本都可以通过测试。然后再手动进行构建,然后运行镜像。相关文档可以看这里:http://help.daocloud.io/features/continuous-integration/index.html.

微信公众平台注册

这个就无需多说,我们去微信公众平台注册一个新的公众号,然后进入开发者模式,添加我们刚刚生成的URL与我们自己定义的token。

点击确定按钮,如果提示修改成功则表示我们token验证成功了,可以测试一下了!

测试

现在,关注我们自己的公众号,测试一下吧:

如果你成功收到了服务器返回的信息,恭喜你成功的用Docker来搭建了公众号的后台。

总结

此文就是我在将微信公众号后台部署到Docker上的详细笔记了。希望对看到最后的人有帮助。当然,我还是Docker新手,全文如果不正确地方,还请高手指正。

来源链接:http://blog.saymagic.cn/2015/09/04/docker-weixin.html 网载文章,如有问题,可以微信联系我们的工作人员

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-09-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大魏分享(微信公众号:david-share)

Openshift高阶探索实验

一、HA方式部署Openshift 一个典型的OCP高可用架构是:master至少应为三个,且为奇数个(上面有etcd); ? 基础架构节点不少于两个,上面运行...

9468
来自专栏数据和云

独家:在MAC上运行Docker和Oracle 12.2数据库环境

虽然Docker是那么的流行和热闹,可是没想到我和Docker的第一次接触是因为Oracle。Oracle在上个月宣布支持Docker的容器部署,再加上Orac...

4264
来自专栏我是攻城师

Windows 10环境下安装Python科学计算工具包之Anaconda

4516
来自专栏Java架构师学习

把项目迁移到Kubernetes上的5个小技巧

我们将在本文中提供5个诀窍帮你将项目迁移到Kubernetes上,这些诀窍来源于过去12个月中OpenFaas社区的经验。下文的内容与Kubernetes 1....

3998
来自专栏极客云栖

无成本给网站服务器加入高可靠的WAF防护

据可靠的新闻网数据显示,阿里巴巴每天被黑客攻击的次数高达三亿多次。跨站攻击、CC攻击、DDOS攻击,甚至还有些站长遭遇了“可怕的”刷流量,作为一个普通的小站长,...

2543
来自专栏云计算认知升级

【腾讯云的1001种玩法】十分钟轻松搞定云架构 · 负载均衡的几种类型

视频内容 今天,我们来了解一下负载均衡的几种类型,来帮助我们更好的使用腾讯云负载均衡。 [igoes.jpeg] 腾讯云负载均衡从大类上来分,有两个大类,分...

34110
来自专栏jessetalks

Gitlab CI 自动部署 asp.net core web api 到Docker容器

为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效、稳定、可扩展,有时候还不得不考虑成本的问题。我希望能找...

5666
来自专栏FreeBuf

Xshell系列软件被植入后门,请尽快更新到最新版本

Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET协议。Xshell 通过互联网...

3588
来自专栏Java架构

百度微服务架构师随手笔记:教你如何手写Docker涉及到的技术Hello world要有Shell彻底分离

1933
来自专栏一个会写诗的程序员的博客

十分钟带你理解Kubernetes核心概念

本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍。相反,我们会使用一些...

1133

扫码关注云+社区

领取腾讯云代金券