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

  1. Selinux设置。省事直接关闭->参考百度经验 - 如何关闭Linux里边的selinux
    当你拿工资时可不能这样直接关掉
  2. 设置防火墙。详细参考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的使用


看看我的.jpg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值