使用Gunicorn部署Python Falcon Web服务器

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.防火墙及安全设置


firewall-cmd --query-port=80/tcp

firewall-cmd --permanent --add-port=80/tcp

firewall-cmd --permanent --remove-port=8080/tcp

firewall-cmd --reload

1. 编写Falcon程序

Falcon是用来提供web服务的,等同于于Flask,Django等。在这里用Falcon官方文档的程序作为实例,实际中在本地开发好后直接SSH复制过来就行。
注意:这个python最好不要叫做falcon.py之类的与python类重名的
样例程序:


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


bind = "0.0.0.0:80"
workers = 4
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

然后复制以下内容:


[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

Original: https://blog.csdn.net/A_Chrysand/article/details/122945677
Author: A_Chrysand
Title: 使用Gunicorn部署Python Falcon Web服务器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737660/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球