用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 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 “[email protected]”

# 安装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新手,全文如果不正确地方,还请高手指正。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-07 20:59:34

用Docker搭建微信公众号的相关文章

nodejs + BAE 搭建微信公众号开发平台

闲来无事创建了一个微信公众账号,名曰“深圳生活小助手”, 关注的人不多,平时发一些深圳新闻,趣事啥的,为了丰富公众号的内容,准备添加一些便民查询功能,例如天气预报.快递查询等等. 于是就有了本文的内容. 深圳的读者扫描关注支持下啊... 闲话不多说,本文主要介绍的就是如何基于nodejs和百度云搭建微信公众号开发平台,下一节介绍如何基于该平台实现了一个简单的天气预报查询功能的小例子. 1. 使用Express搭建本地站点 Express 是一个简洁.灵活的 node.js Web 应用开发框架,

虚拟主机搭建微信公众号服务器

一.前言 搭建微信公众号服务器的方式不只一种,可以用java等其他语言或是其他云空间来搭建服务器,这里总结的是用虚拟主机(主机公园中的虚拟主机)搭建微信公众号服务器的大概思路.不管用什么方式,配置微信公众号服务器的原理不会变. 二.步骤 开始开发微信公众号看这里 首先搭建服务器,因为微信公众号开发的第一步要先配置服务器 1. 万网上先去买个域名,然后再去主机公园那里买个服务器(虚拟机)(我今天用的香港虚拟机试用版还未买),然后再解析域名.详细步骤这里看教程 如果不需要建个人博客,后面的上传wor

在新浪SAE上搭建微信公众号的python应用

微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www.oschina.net/code/snippet_1768500_36580 从零开始 Python 微信公众号开发https://zhuanlan.zhihu.com/p/21354943 新浪云应用http://www.sinacloud.com/doc/sae/python/ SAE Pyth

django搭建微信公众号后台——验证(7.19)

php研究了好几个框架,感觉还是django强大,用起来也顺手,虽然django在微信后台这方面用得没有那么普及,但还是打算试一试,拿我自己的公众号试手. 今天主要是创建项目然后验证通过,代码还是放在pythonanywhere上. 具体怎么创建就不写了,之前有过一篇文章,这里开发用了星星的wechat-python-sdk. 在微信后台填了网址之后,在urls.py设置路由 url(r'^$', index, name='index'), 在views.py里进行验证: #-*- coding

Python快速搭建自动回复微信公众号

Python快速搭建自动回复微信公众号 在之前的一篇文章 Python利用 AIML 和 Tornado 搭建聊天机器人微信订阅号 中用 aiml 实现了一个简单的英文聊天机器人订阅号.但是只能处理英文消息,现在用 图灵机器人 来实现一个中文的聊天机器人订阅号. 这里主要介绍如何利用 Python 的 Tornado Web框架以及wechat-python-sdk 微信公众平台 Python 开发包来快速搭建微信公众号. 完整的公众号代码 GitHub 地址:green ,由于目前此公众号有一

微信公众号+python+新浪SAE实现实时天气预报功能

本文主要谈谈如何做一个具有天气预报功能的公众号. 话不多说先上图,实现的功能如下图所示: 点击微信右下角的"+"号,分享任意一个位置信息,公众号后台自动回复当地的天气情况.这里的天气预报是用python从中国天气网抓取的雷达数据.有没有更精准的数据源呢,当然有啦,但这不是本文的重点,这里我就不详说了. 用到的工具:新浪SAE + 微信公众平台 + python2.7(新浪SAE目前仅支持2.7版本) 由于本文的重点不是使用python搭建微信公众平台,网上已经有很多不错的教程,为了避免

微信公众号基础02_获取accessToken和用户信息

上一篇分享了搭建微信公众号服务器,本文分享一下如果获取access_Token和用户信息,工具还是新浪云SAE 1.获取access_Token 相见开发文档:https://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html accesstoken是公众号的全局唯一票据,公众号调用各接口时都需使用accesstoken.开发者需要进行妥善保存.accesstoken的存储至少要保留512个字符空间.accesstoken

微信公众号开发80端口映射之搭建ngrok服务器

说明 了解本文之前,最好先看前篇:<<微信公众号开发80端口映射解决方案>>.最近公司要搞微信公众号开发,需要解决80端口映射的问题,为了稳定可靠,只好自己搭建ngrok服务端.ngrok 是一个使用go语言编写的反向代理软件,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道,实现内网穿透.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放. 环境和条件 服务器Centos6.8_x64+windows10_x64 一台有公网ip的服务器 域名解析到服务

一、微信公众号开发环境搭建

说道微信公众号,大家肯定不陌生...这年头,谁还谁还没个微信啊.最近在研究这个,,记录一下.写的不好,大家别喷啊.做个笔记而已. 一. 准备工作: 1.二话不说,先注册微信公众号.这就不用说了吧,各种账号,密码,验证码,各种填写.\(^o^)/~ 进去你的瞅瞅吧,都有哪些账号.服务号,订阅号,企业号的相关说明 2.看看 官方说明,,大概知道什么玩意了哇..立马动手注册.(别打服务号,企业号的主意,,和咱们普通老百姓,没啥关系)作为一个新一代程序猿,我们重点关注,你们懂得. 3.开发嘛,,大家都知