Python + Flask + Nginx 搭建免费微信公众号服务器
最近帮朋友做了个个人公众号, 一直也想研究下公众号开发, 免费帮忙, 不能再贴钱搞服务器吧, 于是就想到了免费的服务器资源 亚马逊的AWS EC2.
说是免费, 也就是给你一个低配虚拟服务器用来练手, 时间是一年.后面就是按需收费了. 不过咱也可以赖皮,一年过后把这个服务器干掉, 换个邮箱重新注册一个继续玩. 如果你微信公众号用户成规模的,估计得考虑花钱整个国内的了, 大概看了下也不贵.
额...扯远了, 下面正式进入主题: 标题30字限制不足以表达,其实我想写的标题还要加上 Python + Flask + Nginx.(现在干啥都扯上Python哈, 没办法, 最近这个热乎.)
1.在亚马逊aws创建新用户.
相关教程网上很多很全, 而且界面也有中文,所以此处省略若干URL, 还请客观在搜索引擎里小手抖一抖,搜索相关教程.
需要注意的是, 注册时你得有张visa 或 MasterCard 信用卡来绑定账户, 亚马逊到时候会砍你一刀1$作为认证,好像实际没有砍,只是做认证而已.
2. 选择服务器区域然后创建的操作系统.
系统我选的Ubuntu, 其实linux的都差不多, 之前用过aws linux, 这次试试Ubuntu, 发现没什么发现.
此处可能有坑,需注意: 选择服务器区域(也称"节点")的时候,一般都是选响应最快的, 可以在http://www.cloudping.info/ 查询. 但是但是但是, 之前一直最快的东京服务器好像无法远程ssh, 不知是我rp问题还是其他,于是我选择韩国首尔就没啥问题.
3. 开始部署Flask应用程序.(终于步入最核心主题)
3.1 先写个简单Flask应用程序在你本地跑跑.
首先得先把Flask装在本地:
pip install flask
这里之所以建议现在本地创建,原因是在服务器上编写或调试都不方便, 当然是针对我这种新手而言.
fs在本地新建一个文件夹 flaskserver 用来存放代码文件.
在文件夹内新建文件 flaskserver.py
在终端输入下面的命令,测试你的Flask应用:
python flaskserver.py
可以看到服务以及运行起来了
浏览器输入http://0.0.0.0:5000, 可以看到运行效果
创建WSGI入口点文件wsgi.py, 这个文件用在后面服务器部署时候用.
创建USGI配置文件flaskserver.ini,部署的时候用.
3.2 服务器环境安装.
好了,现在该ssh到亚马逊服务器上配置下环境了。(关于如何配置ssh到服务器的过程,这里就不详细敷出)
首先安装Nginx和Flask,uWSGI
pip install uwsgi flask nginx
注意:如果提醒权限不足请加 sudo
3.3 部署代码及服务配置.
1)安装完毕后在服务器上创建个文件夹
mkdir /var/www/flaskserver/
然后将本地创建的那3个文件(flaskserver.py,wsgi.py, flaskserver.ini)copy到此文件夹中.如果手头没有sftp工具,直接在此文件夹下创建文件也行,反正没多少代码,而且代码都是测试过了的。
给用户www-data程序访问权限:
sudo chown www-data:www-data /var/www/flaskserver
2)键入以下命令创建uWSGI启动服务
nano /etc/systemd/system/uwsgi.service
3)配置Nginx代理:
接下来我们需要配置Nginx使用uwsgi协议向socket转发web请求.
首先在使用以下命令在Nginx的sites-available目录下新建一个服务配置文件:
sudo nano /etc/nginx/sites-available/flaskserver
内容为:
注意要将你aws ec2 服务器的公网IP或者DNS 配置到上面代码里(server_name 项), 这个值应该在aws控制台这个界面上找:
然后将上面的Nginx配置文件链接到sites-enabled目录下:
sudo ln -s /etc/nginx/sites-available/falskserver/flaskserver /etc/nginx/sites-enabled
就快大功告成了, 先测试下nginx 配置是否ok
sudo nginx -t
如果没啥问题, 就把Nginx 服务重启应用新的配置文件.
sudo service nginx restart
重启uwsgi服务
sudo systemctl restart uwsgi.service
如果不出意外的话, 在浏览器里访问你aws服务器的公网IP, 应该可以看到web页面可以正常工作了.
4. 错误排查
做了这么多工作, 到头来一访问发现不行. 耐心点, 新手就是个踩坑的过程, 以下是我踩过的坑:
访问公网IP, 没有响应
去检查下aws的入站规则,是不是没有开放给外部访问
有响应,但是返回错误
这个错误可能由很多原因导致的
1) 配置有误
2)代码有误
3)权限配置有误
这个只能查看日志找原因, 日志一般在以下下几个目录:
/var/log/nginx/
/var/log/uwsgi/
5. 服务器其他设置
入站规则
当你的服务运行正常的时候,你会发现每天会有N多恶意爬虫来扫描你的ip, 不断地尝试你网站的突破口,看起来好怕怕.
虽然我们的应用他可能没法攻破, 但就这么天天不断地爬, 免费服务器受不了, 日志记录也受不了. 所以安全起见,设置入站规则, 列出可以访问你网站的白名单. 这个在微信公众号开发的时候同样适用, 我能可以拿到微信服务器所有的ip,然后添加到入站规则里就好了.
结语
看到这里有人可能会说, 上面这一通和微信公众号开发有毛线关系? 不要急嘛, 服务器的搭建是公众号开发的重点, 而有了后台服务器的公众号, 公众号便沦为了一个前端UI, 大部分功能逻辑都要在服务器端搞定. 所以下篇文章应该是如何将公众号和我们搭建的服务器关联起来.
有问题请留言, 有错误请拍砖, 交流愉快:)