用Docker搭建微信公眾號

jopen 9年前發布 | 25K 次閱讀 Docker

此文我將帶大家用Docker來搭建一個微信公眾號的后臺,主要涉及Docker里運行JavaWeb的技術,一起來做這個有意思的事情吧!
(如果你對Docker了解不是很多的話,歡迎查看我的上一篇教程: 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項目,里面是我們微信公眾號后臺的主要源碼。源碼的目錄結構如下:

用Docker搭建微信公眾號

WxApiServlet是處理請求的實現類,它會將微信服務器發來的Post請求封裝成MsgRequest對象,然后根據MsgRequest類型的不同(語音、文字、圖片)來生成不同類型的handler,這里我只做了Event與Text類型的處理類,添加其它類型的處理需要繼承BaseHandler,實現里面的doHandleMsg方法。這里需要注意兩點,第一點是我將普通的文字與語音請求通過圖靈機器人進行回復,因此你需要去圖靈機器人申請apikey:

用Docker搭建微信公眾號

然后再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賬號:

用Docker搭建微信公眾號

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

接下來選擇[代碼構建]->[創建新項目]

用Docker搭建微信公眾號

我們可以給我們的項目起個名字叫做weixinserver,

然后在[設置代碼源]里選擇我們Fork的項目。選擇持續集成。

用Docker搭建微信公眾號

最后,點擊開始創建按鈕。Daoloud就會默認將master分支進行構建:

用Docker搭建微信公眾號

最后,點擊[查看鏡像]->[部署最新版本],Daoclod就會愉快的運行起來:

用Docker搭建微信公眾號

上圖標紅的URL鏈接就是Daocloud為我們生成的微信公眾后臺鏈接。

持續集成

Daocloud提供了持續集成的功能,注意,持續集成不是持續構建,Daocloud的持續集成是保證我們每次push的版本都可以通過測試。然后再手動進行構建,然后運行鏡像。相關文檔可以看這里:http://help.daocloud.io/features/continuous-integration/index.html.

微信公眾平臺注冊

這個就無需多說,我們去微信公眾平臺注冊一個新的公眾號,然后進入開發者模式,添加我們剛剛生成的URL與我們自己定義的token。

用Docker搭建微信公眾號

點擊確定按鈕,如果提示修改成功則表示我們token驗證成功了,可以測試一下了!

測試

現在,關注我們自己的公眾號,測試一下吧:

用Docker搭建微信公眾號

如果你成功收到了服務器返回的信息,恭喜你成功的用Docker來搭建了公眾號的后臺。

總結

此文就是我在將微信公眾號后臺部署到Docker上的詳細筆記了。希望對看到最后的人有幫助。當然,我還是Docker新手,全文如果不正確地方,還請高手指正。

來自:http://blog.saymagic.cn/2015/09/04/docker-weixin.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!