前言
python falcon是一种更接近于python wsgi的框架,它拥有比flask和Django更快的速度,更高的性能。
但缺点就是没人用、没人用和没人用,还有就是过于年轻和接近底层,许多东西都要自己写。官方文档实例不够多,社区经验相比于flask和Django 就跟程序员的头发一样稀少。当然,每个人对于’多’或’少’的感觉和定义都不一样。像在百度一搜全是你复制我,我复制你这样的经验文章也行不通。
如果你想用它开发实际项目,我劝你可以考虑跑路了 加油!
如果你想用它学习PythonWSGI和网络相关的知识,那可以一试。
本文只用了Gunicorn,适合于小型/访问量小的网站,遇到大的还是老老实实加Nginx吧。
Tag: linux systemctl service python falcon gunicorn
安装及设置
1. 安装python3及pip
请参考网络上的资源文章,用yum和源码装都无所谓,推荐python3.7
2. 安装虚拟环境
cd到你的文件目录,以下为例子
cd /var/local/Falcon
安装virtualenv(venv创建程序)
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
创建venv
virtualenv --python=python3 venv
启用venv
source ./venv/bin/activate
本项目不需要用到设置环境变量
跳过
安装falcon和gunicorn
pip3 install falcon gunicorn
3.防火墙及安全设置
- Selinux设置。省事直接关闭->参考百度经验 - 如何关闭Linux里边的selinux
当你拿工资时可不能这样直接关掉 - 设置防火墙。详细参考CSDN - linux防火墙查看状态及一些基本操作
# 查询80端口是否开放
firewall-cmd --query-port=80/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
编写Python 程序
1. 编写Falcon程序
Falcon是用来提供web服务的,等同于于Flask,Django等。在这里用Falcon官方文档的程序作为实例,实际中在本地开发好后直接SSH复制过来就行。
注意:这个python最好不要叫做falcon.py之类的与python类重名的
样例程序:
# /var/local/Falcon/FalconApp.py
from wsgiref.simple_server import make_server
import falcon
class ThingsResource:
def on_get(self, req, resp):
"""Handles GET requests"""
resp.status = falcon.HTTP_200
resp.content_type = falcon.MEDIA_TEXT
resp.text = ('\nTwo things awe me most, the starry sky '
'above me and the moral law within me.\n'
'\n'
' ~ Immanuel Kant\n\n')
app = falcon.App()
things = ThingsResource()
app.add_route('/things', things)
if __name__ == '__main__':
with make_server('', 8000, app) as httpd:
print('Serving on port 8000...')
httpd.serve_forever()
此时,运行以下代码就可以将Web简单地运行起来了,就像Flask之类的一样。
python3 FalconApp.py
运行成功后命令行会输出Serving on port 8000...
,浏览器访问http://ip地址/things
就可以访问到页面了(直接访问http://ip地址/
(首页)是404的,因为未定义该路由)。但这样的服务在断开SSH后就无了。
2. 编写Gunicorn
Gunicorn有两种启动方式,一种是直接启动命令+参数的方式实现配置,另一种是编写配置文件。本文讲述调用配置文件启动。
创建一个gunicorn-conf.py,它的位置可以随便放置,本文放在同一级目录/var/local/Falcon/
。配置文件需要以.py结尾,否则会有Warning
# gunicorn.conf
bind = "0.0.0.0:80" #监听所有ip的80端口
workers = 4 #启用4个线程。一般workers = CPU核心数+1就比较合适
backlog = 2048
pidfile = "/var/local/Falcon/gunicorn.pid"
accesslog = "/var/local/Falcon/access.log" #用户访问日志位置
errorlog = "/var/local/Falcon/error.log" #程序异常日志位置
timeout = 30
debug = False
capture_output = True
所用到的日志最好先创建一个空文件
touch access.log error.log
此时,用以下代码就可以运行Gunicorn了。
gunicorn --config gunicorn-conf.py FalconApp:app
此时命令行没有输出,并且会空行,按一下ctrl+C就行了。用浏览器访问http://ip地址/things
就可以看到网站了,并且断开SSH后还有,可以提供持久服务了。
编写服务程序
编写一个*.service系统服务文件。文件名可以自定义,后面在systemctl [start/stop/status] 服务名
会用到,此处用falcon.service
vim /usr/lib/systemd/system/falcon.service
然后复制以下内容:
# /usr/lib/systemd/system/falcon.service
[Unit]
Description=Falcon (python WSGI)
After=network.target
[Service]
Type=forking
WorkingDirectory = /var/local/Falcon
PrivateTmp = true
Restart = on-failure
PIDFile = /var/local/Falcon/gunicorn.pid
ExecStart = /var/local/Falcon/venv/bin/gunicorn --config /var/local/Falcon/gunicorn-conf.py FalconApp:app
[Install]
WantedBy=multi-user.target
保存后刷新系统服务列表
systemctl daemon-reload
然后就可以像其他系统服务一样控制整个Web服务器的启动、关闭了。
# 启动服务
systemctl start falcon
# 关闭服务
systemctl stop falcon
# 重启服务
systemctl restart falcon
# 查看状态
systemctl status falcon -l
参考资料
CSDN - 总结python+flask项目在linux部署的五大方法
百度经验 - 如何关闭Linux里边的selinux
CSDN - linux防火墙查看状态及一些基本操作
cnblogs - flask中gunicorn的使用