用Docker搭建微信公众号(1)

此文我将带大家用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 nginx
nginx

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与nginx
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

#拷贝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

RUN mkdir -p /webapp
ADD ./webapp /webapp

# 定义环境变量
ENV TOMCAT_HOME /usr/local/tomcat
ENV MAVEN_HOME /usr/local/maven
ENV 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与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。

Daocloud部署

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

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

为了你下面的操作更加方便,你可以直接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]
(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,508评论 15 147
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,838评论 2 49
  • 一 库布其, 如弓弦, 狂沙欲弥天。 十大孔兑浊浪滚, 南北穿其间。 狐兔走, 衰草咽, 漠风任翻卷。 尘暴狂...
    高湛明阅读 388评论 1 1
  • 朝思暮想、做梦都想、时刻都想,而且一想起就热血沸腾,那才叫目标! 什么叫信念? 经历过冷嘲热讽、人情冷漠、三番四次...
    医成道人阅读 194评论 0 0
  • 曾经,她是W市叱咤风云的豪门一姐,强势的个性加上超高的智商让无数青年才俊在她面前自叹不如。传闻只要是她出现的场合,...
    酷听听书阅读 290评论 0 0