此文我將帶你們用Docker來搭建一個微信公衆號的後臺,主要涉及Docker裏運行JavaWeb的技術,一塊兒來作這個有意思的事情吧!html
(若是你對Docker瞭解不是不少的話,歡迎查看個人上一篇教程: Docker簡明教程)java
首先看一下整個項目的結構:nginx
\etc\nginx-conf
是nginx的配置文件,用來作端口的轉發。裏面的代碼以下:git
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服務。github
\etc\scripts
是Docker啓動運行的腳本,裏面會啓動Tomcat與Nginx服務。web
#!/bin/sh # Start Tomcat $TOMCAT_HOME/bin/startup.sh # Start nginx nginx
soft
文件夾裏是maven於tomcat的安裝文件,這裏沒有采用在Dockerfile裏從網絡下載是防止網絡下載地址在某些國家不能訪問或者連接地址放生更改。docker
webapp
目錄是一個標準的maven項目,裏面是咱們微信公衆號後臺的主要源碼。源碼的目錄結構以下:apache
WxApiServlet
是處理請求的實現類,它會將微信服務器發來的Post請求封裝成 MsgRequest
對象,而後根據MsgRequest
類型的不一樣(語音、文字、圖片)來生成不一樣類型的handler,這裏我只作了Event與Text類型的處理類,添加其它類型的處理須要繼承BaseHandler
實現裏面的doHandleMsg
方法。這裏須要注意兩點,第一點是我將普通的文字與語音請求經過圖靈機器人進行回覆,所以你須要去圖靈機器人申請apikey:ubuntu
而後再Config.java中配置APPKEY
屬性。第二點是微信公衆平臺會對首次添加的後臺地址作token驗證,所以也須要在Config.java文件裏配置TOKEN
字段。這個字段的值須要和微信公衆平臺後臺裏設置的token相等。api
daocloud.yml
Daoloud的CI腳本,用來對項目作持續集成。
Dockerfile
是組織整個項目的心臟,包含Docker鏡像的構建,而後將項目編譯並部署在容器的Tomcat上。
來看一下整個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。
到這裏,咱們至關於有了能夠部署的鏡像,但做爲微信公衆號的後臺,咱們必須提供一個可供外網訪問的域名,爲了一個實驗去租用一臺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]
(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上的詳細筆記了。但願對看到最後的人有幫助。固然,這個版本並非很完善,後續我對其作了少量改進,地址:http://blog.saymagic.cn/2015/09/13/docker-weixin-02.html。
文爲博主原創文章,未經博主容許不得轉載。