美文网首页技术类文章收集大杂烩
利用阿里云ECS搭建微信公众平台服务器

利用阿里云ECS搭建微信公众平台服务器

作者: 不务正业的Yuez | 来源:发表于2016-11-07 06:47 被阅读8586次

最近虽然学术进展依然缓慢,可是没有那么大的心理压力了。

原因可能有二,一是前一段刚投了一篇文章出去,二是前一段审了一篇投在还不错的期刊上的超水的文章,结果别的reviewer还给放过去了,我直接让打回重改了。可能是看到这么水的文章都有希望发这样的期刊吧……

最近创建了一个自己的微信公众号,滑雪前线,用来分享一些滑雪相关资讯,因为我发现国内的滑雪虽然已经热起来了,但是还没有形成相应的文化。

可是自己毕竟是码农出身,天生的手贱,不甘于每天安安心心找几篇文章翻译翻译、搬运搬运,总想要把技术方面的东西用上来。这不,开始给公众号搭建服务器了。

主要参考这篇Blog,但是由于按照原博客Token验证不了,且原博客werobot版本较老,对代码有所微调。

买的是阿里云最便宜1核1G内存,1M带宽,40G硬盘的ECS服务器,OS Ubuntu 14.04 64位操作系统,一个月68块钱,对我来说也就是两顿饭钱。

主要组件展示

  1. Nginx
  2. Gunicorn
  3. Python
  4. Pip
  5. Virtualenv
  6. Flask
  7. Supervisor
  8. WeRoBot SDK

简单说下主要逻辑关系,我们用Nginx作为Web服务器,该服务器无法直接和Flask (or Python)交互,所以我们需要引入Gunicorn,它是一个独立的WSGI容器,可以容纳WSGI应用并且提供HTTP服务。而后,用Supervisor 管理服务器进程,当某个应用挂掉,可以自动重启。

安装Virtualenv及必要组件

用来创建不同的Python隔离环境,可以保证一个干净的环境。

$ adduser wechatmanager #创建新用户
$ sudo apt-get update 
$ sudo apt-get install zsh # 强烈推荐该shell
$ sudo apt-get install -y python python-pip python-virtualenv # 安装各类组件
$ sudo mkdir /home/wechatmanager && cd /home/wechatmanager 
$ sudo virtualenv wechat_connector# 此时在mirror文件夹下创建一个虚拟环境
$ cd /home/wechatmanager/wechat_connector 
$ sudo source ./bin/activate # 激活虚拟环境
$ sudo apt-get install -y nginx gunicorn # 安装各类组件

# 取消激活命令为
deactivate

安装WeRoBot SDK

$ sudo pip install werobot

基本应答helloworld代码 in app.py:

import werobot
robot = werobot.WeRoBot(token='tokenhere')
# 消息处理函数
@robot.handler
def echo(message): 
    return 'Hello World!'

robot.run(server="gunicorn", port=8000)

然后去微信公众平台把Token改为你自己设置的Token。

配置 Nginx

$ sudo /etc/init.d/nginx start #启动nginx
$ sudo rm /etc/nginx/sites-enabled/default #删除默认配置
$ sudo touch /etc/nginx/sites-available/wechat_connector#建立项目文件
$ sudo ln -s /etc/nginx/sites-available/wechat_connector/etc/nginx/sites-enabled/wechat_connector #设置软链接
$ sudo vim /etc/nginx/sites-enabled/wechat_connector #编辑项目文件

添加:

server { 
    server_name your_domain;
    listen 80;
    location /weixin { 
        proxy_pass http://127.0.0.1:8000;
    }
}

腾讯公众号默认只能连接http的80端口和https的443端口
当公众号向(your_domain/weixin)发送消息,便会反向代理到127.0.0.1的8000端口,这也是为什么我们之前的代码监听8000端口的原因

# 重启 nginx:
$ sudo /etc/init.d/nginx restart

配置 Supervisor

$ sudo apt-get install -y supervisor #安装
$ sudo vim /etc/supervisor/conf.d/test.conf #创建配置文件

添加:

[program:wechat_connector]
command = python /home/wechatmanager/wechat_connector/app.py
directory = /home/wechatmanager/wechat_connector
timeout = 60*60
user = newuser
autostart = true
autorestart = true
redirect_stderr = true
stdout_logfile = /home/mirror/logs/wechat_connector.log

启动Supervisor

$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start wechat_connector ## 重启supervisor
$ sudo supervisorctl restart wechat_connector

微信平台端设置
进入微信公众平台—>开发者模式—>设置URL和Token,URL为your_domain/weixin,Token为你在werobot中设定的
如果配置没有问题,顺利通过,用微信给你的公众平台发消息应该能看到’hello world!’。
Tips: 出现任何问题,重启supervisor,倘若仍不能够解决,请查看log文件。
参考
阿里云ECS搭建微信公众平台
WeRoBot
VPS环境搭建详解
Flask on Ubuntu

相关文章

网友评论

  • 91365975331c:博主你好,我按照你的指示操作 但是到了sudo supervisorctl start wechat_connector这一步的时候Traceback (most recent call last):
    File "/home/wechatmanager/wechat_connector/app.py", line 2, in <module>
    robot = werobot.WeRoBot(token='tokenhere')
    File "/usr/local/lib/python2.7/dist-packages/werobot/robot.py", line 57, in __ini$
    session_storage = SQLiteStorage()
    File "/usr/local/lib/python2.7/dist-packages/werobot/session/sqlitestorage.py", l$
    self.db = sqlite3.connect(filename, check_same_thread=False)
    sqlite3.OperationalError: unable to open database file
    报错了
    呦呦呦柚子:@CJ_3169 请问这个问题你解决了吗?我折腾了好久都没有弄好
    不务正业的Yuez:@CJ_3169 不好意思 好久没上简书 我的确没有遇到这个问题 不知道是不是版本的原因导致的 另外 因为我配置的机器是纯粹的新系统 不知道和sqlite的配置有没有关系
    a549a3b85ff9:我也遇到了跟楼上同样的问题,不知道作者可有时间帮解答一下啊。 或者楼上的朋友找到解决办法了吗?能否告知一下。

本文标题:利用阿里云ECS搭建微信公众平台服务器

本文链接:https://www.haomeiwen.com/subject/slnnuttx.html