@

参考链接

如果你从来没有弄过python restful api 请参考以下链接入门。

如何在Ubuntu 18.04上使用uWSGI和Nginx服务Flask应用程序

注意: 以上链接有一些坑,可能会踩到:

  1. 如何在.ini文件中指定项目中的wsgi的路径
  2. nginx配置好后无法访问项目,报权限问题或者连接被拒

    以上问题我都遇到过,而且也花了很长时间解决。我的教程里会指明如何解决以上问题,在使用的过程中,有任何问题,可以加群:821605718 或者加我个人qq:2768861003

效果展示

已一个简单的helloword为例

一、准备工作

  • linux 环境: ubuntu18.04
  • 准备一个可运行的python restful api

1.1 可运行的python demo:



app.py:

    #!/usr/bin/python
# -*- coding: UTF-8 -*-
from flask import Flask
from flask_restful import Resource, Api app = Flask(__name__)
api = Api(app) class HelloWorld(Resource):
"""
api: /api/HelloWorld
restful 接口调用测试
"""
def get(self):
print('Hello world of RESTful api!')
return {'hello': 'world'} api.add_resource(HelloWorld, '/api/HelloWorld') if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)

wsgi.py:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import os
FATHER_DIRECTORY = os.path.dirname(
os.path.split(os.path.realpath(__file__))[0])
sys.path.append(FATHER_DIRECTORY)
from restfulServer.app import app if __name__ == '__main__':
app.run()

1.2 更新系统环境

sudo apt update
sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

二、创建python虚拟环境

我们将建立一个虚拟环境,以将Flask应用程序与系统上的其他Python文件隔离

  1. 安装venv模块

    安装python3-vene软件包,此时会安装venv模块
sudo apt install python3-venv
  1. 创建目录:test,进入test,复制上面可运行的python demo到这里
mkdir ~/test
cd ~/test
cp -r ~/flaskTest ./.
  1. 创建虚拟环境
python3.6 -m venv testenv
  1. 激活虚拟环境
source testenv/bin/activate

此时您已处于虚拟环境中, 界面会展示为:

(testenv)user@host:~/test$

注意:: 在激活的虚拟环境里,一律使用:pip,而不是pip3

三、设置flask应用程序

以下操作都是在虚拟环境中的操作

pip install wheel
pip install uwsgi flask
  1. 启用防火墙,允许5000端口被访问。

    注意: 也要观察linux服务器的安全组允许5000端口可以被访问,才可以通过域名+端口访问。
sudo ufw allow 5000

测试访问:

cd ~/test/flaskTest/restfulServer
python app.py

注意: 如果有没有安装的包,请安装上,安装命令为:

pip install 包名字

执行后会看到以下输出:

Output
* Serving Flask app "test" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

访问:

http://your_server_ip:5000

你会看到以下内容

四、配置uWSGI

以上虽然可以运行,但是ctrl + c结束后就没有了,因此我们需要一个程序的入口点:wsgi.py,以便交互

  1. 测试uwsgi是否可以正常运行:

    我们可以通过简单地向其传递入口点的名称来实现。模块的名称(减去.py扩展名)加上应用程序中可调用名称的名称构成。我这里是wsgi:app。
cd ~/test/flaskTest/restfulServer
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app

访问:

http://your_server_ip:5000

你会看到以下内容



2. 创建一个uWSGI配置文件

如果你想长期使用的话,请执行以下操作

nano ~/test/test.ini
[uwsgi]
chdir=/home/ubuntu/test
module = flaskTest.restfulServer.wsgi:app master = true
processes = 5 socket = test.sock
chmod-socket = 664
vacuum = true die-on-term = true

[uwsgi]: 知道以下配置属于uwsgi

chdir: 定义你的项目目录

module :.就类似linux里的/,我们将指定两件事: 模块本身(通过引用wsgi.py减去扩展名的文件)和文件中的可调用项app

master : 告诉uwsgi以master模式启动

processes :生成5个进程

socket : 生成Unix套接字,放在chdir指定的目录里。这里的socket文件将用于和nginx进行配合访问

chmod-socket: 更改socket文件的权限

vacuum :当进程停止时,使用这个关键字清理socket

die-on-term: 这可以帮助确保init系统和uWSGI对每个过程信号的含义具有相同的假设

五、设置系统启动

创建一个.service以/etc/systemd/system目录结尾的单元文件用来启动:

sudo nano /etc/systemd/system/test.service
[Unit]
Description=uWSGI instance to serve pythonRestfulApiServer
After=network.target [Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/test
Environment="PATH=/home/ubuntu/test/testenv/bin"
ExecStart=/home/ubuntu/test/testenv/bin/uwsgi --ini /home/ubuntu/test/test.ini [Install]
WantedBy=multi-user.target

到这里,我们的systemd服务文件就完成了,接下来启动uWSGI服务

sudo systemctl start test
sudo systemctl enable test

检查状态:

sudo systemctl status test

输出:

Output
● test.service - uWSGI instance to serve test
Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-07-13 14:28:39 UTC; 46s ago
Main PID: 30360 (uwsgi)
Tasks: 6 (limit: 1153)
CGroup: /system.slice/myproject.service
├─30360 /home/ubuntu/test/testEnv/bin/uwsgi --ini myproject.ini
├─30378 /home/ubuntu/test/testEnv/bin/uwsgi --ini myproject.ini
├─30379 /home/ubuntu/test/testEnv/bin/uwsgi --ini myproject.ini
├─30380 /home/ubuntu/test/testEnv/bin/uwsgi --ini myproject.ini
├─30381 /home/ubuntu/test/testEnv/bin/uwsgi --ini myproject.ini
└─30382 /home/ubuntu/test/testEnv/bin/uwsgi --ini myproject.ini

六、配置nginx代理

sudo nano /etc/nginx/sites-available/test
server {
listen 80;
server_name 94.191.19.28; location / {
include uwsgi_params;
uwsgi_pass unix:/home/ubuntu/test/test.sock;
}
}
sudo ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled
sudo nginx -t
sudo nginx -s reload

访问:

http://your_domain

如果遇到任何错误请检查:

sudo less /var/log/nginx/error.log:检查Nginx错误日志。

sudo less /var/log/nginx/access.log:检查Nginx访问日志。

sudo journalctl -u nginx:检查Nginx进程日志。

sudo journalctl -u myproject:检查Flask应用的uWSGI日志。

flask + nginx + uwsgi + ubuntu18.04部署python restful接口的更多相关文章

  1. [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器

    部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...

  2. Flask+Nginx+uWSGI在Ubuntu服务器上的配置

    Flask+Nginx+uWSGI在Ubuntu服务器上的配置 Step1 安装系统环境 Ubuntu服务器选择是阿里云的ECS服务,ECS提供单独的内存\CPU\带宽\存储规格可以选择,并且提供合适 ...

  3. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  4. 使用Nginx+uWSGI+Django方法部署Django程序(上)

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  5. 使用Nginx+uWSGI+Django方法部署Django程序

    第一步先解决uwsgi与django的桥接.解决在没有nginx的情况下,如何使用uwsgi+DJANGO来实现一个简单的WEB服务器. 第二步解决uwsgi与Nginx的桥接.通过nginx与uws ...

  6. 使用Nginx+uWSGI+Django方法部署Django程序(下)

    在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的, ...

  7. Ubuntu18.04安装Python虚拟环境

    仅为使用Ubuntu18.04的Python开发人员作参考 1.安装Ubuntu18.04虚拟环境 sudo apt install virtualenv sudo apt install virtu ...

  8. Ubuntu16.04 flask + nginx + uWSGI 部署

    前言 又有段时间没写博客了,最近一直在写外包项目,都没啥空余时间.这几天花了不少时间做项目部署,也看了不少教程,这里就记录下整个过程,也方便以后要做类似部署的时候不用再查来查去了. flask + u ...

  9. nginx+uwsgi+virtualenv+supervisor部署项目

    一.导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的 ...

随机推荐

  1. bin文件夹下的某个dll总是自动刷新为不同版本的dll的解决方法

    如上图所示,一般这种问题都是dll版本和配置文件中的dll版本对应不上才引起的,可以通过替换对应版本的dll或者修改配置文件中的版本号即可. 然而我的情况是:修复后,还是不定时出现这样的问题,我以为是 ...

  2. java 框架-模板引擎FreeMarker

    https://www.cnblogs.com/itdragon/p/7750903.html FreeMarker是一个很值得去学习的模版引擎.它是基于模板文件生成其他文本的通用工具.本章内容通过如 ...

  3. 冒泡(bubblesort)、选择排序、插入排序、快速排序

    冒泡排序(bubblesort) 特点:通过换位置的方式,一直向上冒泡 package main import "fmt" func bubbleSortAsc(arrayA [] ...

  4. 漏洞预警 | ThinkPHP 5.x远程命令执行漏洞

    ThinkPHP采用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库).RoR的ORM映射和ActiveRecord模式,是一款兼容性高.部署简单的轻量级国产PHP开发框 ...

  5. vue学习(6)-路由(导入包;创建子组件;创建路由对象)传参,子路由,多个组件

    后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源 前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换(不会刷新页 ...

  6. K2 BPM_北汽新能源业务流程管理信息系统建设思考_全球领先的工作流引擎

    本文由CIO发展中心根据北汽新能源流程与IT总监刘伟霞在“亦庄CIO数字化转型探索——CIO发展中心亦庄分舵2019夏季论坛”活动中演讲整理. 在“亦庄CIO数字化转型探索——CIO发展中心亦庄分舵2 ...

  7. 开发六年mybatisplus使用小结

    最近在项目里用到了一个第三方库,叫mybatisplus,是一个mybatis的增强库,简单来说就是增强了mybatis的功能,让mybatis更好用,mybatisplus给的官方定义是Mybati ...

  8. Mongodb 的ORM框架 Morphia 注解 之 @Reference

    public class BlogEntry { private String title; private Date publishDate; private String body; privat ...

  9. 中国大学MOOC课程信息之数据分析可视化一

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/82263391 9月2日更:中国大学MOOC课程信息之数据分 ...

  10. webpack中typeScript的打包配置

    2018年typescript发展的非常好,js是一门非常灵活的语言,所以一个功能,怎么写都能够写出来,但是这也会导致一个问题,不同人写js的方式不同,那么会导致同一个功能出现的代码风格会迥然不同.这 ...