python编程:mac环境gunicorn+nginx部署flask项目

简介: python编程:mac环境gunicorn+nginx部署flask项目

第一步,安装配置gunicorn

文档:http://docs.gunicorn.org/en/stable/run.html


1、安装


pip install gunicorn

2、在flask项目中添加两行代码


from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello World!'
if __name__ == '__main__':
  #------------------- 需要添加的两行代码
    from werkzeug.contrib.fixers import ProxyFix
    app.wsgi_app = ProxyFix(app.wsgi_app)
    #------------------- 
    app.run()

3、启动:


gunicorn 入口文件名:app

默认是监听http://127.0.0.1:8000/


也可以修改配置


gunicorn -w 4 -b 127.0.0.1:8000 入口文件名:app

说明:

修改进程:-w 4

修改端口:-b 127.0.0.1:8000


4、添加快捷方式

如果每次启动都那么麻烦,岂不是都没兴趣了,可以使用bash脚本进行快捷启动

新建文件~/.flask.sh


#!/bin/bash
echo "flask starting..."
source ~/.bash_profile   # 导入PATH变量
workon py3  # 切换python虚拟环境
cd /Users/qmp/workspace/mouday.github.io/index_flask  # 切换到文件目录
gunicorn -w 4 -b 127.0.0.1:8000 index:app   # 启动flask服务器

在文件~/.bash_profile中添加falsk别名,运行启动脚本


# flask服务启动的别名
alias flask="bash ~/.flask.sh"

好了,现在可以直接这样启动了


$ flask

终端打印,启动成功!


flask starting...
[2018-07-19 15:55:04 +0800] [5350] [INFO] Starting gunicorn 19.8.1
[2018-07-19 15:55:04 +0800] [5350] [INFO] Listening at: http://127.0.0.1:8080 (5350)
[2018-07-19 15:55:04 +0800] [5350] [INFO] Using worker: sync
[2018-07-19 15:55:04 +0800] [5353] [INFO] Booting worker with pid: 5353
[2018-07-19 15:55:04 +0800] [5354] [INFO] Booting worker with pid: 5354
[2018-07-19 15:55:04 +0800] [5355] [INFO] Booting worker with pid: 5355
[2018-07-19 15:55:04 +0800] [5356] [INFO] Booting worker with pid: 5356

第二步,安装配置nginx

Mac 下使用 Homebrew 安装 Nginx


brew install nginx

使用brew的命令来运行nginx


brew services start nginx  # 启动
brew services stop nginx   # 停止

测试地址:http://127.0.0.1:8080


查看nginx配置文件路径:


$ nginx -t
/usr/local/etc/nginx/nginx.conf
server {
    listen 80;
    server_name example.org; # 这是HOST机器的外部域名,用地址也行
    location / {
        proxy_pass http://127.0.0.1:8000; # 这里是指向 gunicorn host 的服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

作用是将80端口转发到8000端口


检查命令


nginx -t

成功会有 successful 提示

重启nginx


访问地址:http://127.0.0.1/


如果访问不到,可以先关闭,在使用如下命令启动


sudo nginx -c /usr/local/etc/nginx/nginx.conf

报错及解决

1、Permission报错


nginx: [emerg] open() "/usr/local/var/run/nginx.pid" failed 
(13: Permission denied)

有权限问题:直接使用


sudo chown -R $(whoami)  /usr/local/var/run

2、directory报错


nginx: [error] open() "/usr/local/var/run/nginx.pid" failed
 (2: No such file or directory)

使用如下命令指定配置文件


nginx -c /usr/local/nginx/conf/nginx.conf

3、Address报错


nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)

端口被占用,尝试使用如下命令来关闭nginx服务


sudo nginx -s stop
brew services stop nginx  # 第一个不行再用这个

4、Permission denied


nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

Linux只有root用户可以使用1024一下的端口,80端口改为1024以上


brew命令

安装: sudo brew install [软件名]


搜索: sudo brew search [软件名]


查看: sudo brew info [软件名]


卸装: sudo uninstall [软件名]


nginx -V 查看版本,以及配置文件地址

nginx -v 查看版本

nginx -c filename 指定配置文件

nginx -h 帮助


nginx命令

重新加载配置|重启|停止|退出 nginx

nginx -s reload|reopen|stop|quit


sudo nginx 打开 nginx

nginx -t 测试配置是否有语法错误


也可以新建目录 vhosts单独配置


nginx.conf 添加引入语句

http{
    # 最下面添加
    include vhosts/*.conf;
}

参考文章


Python日记——nginx+Gunicorn部署你的Flask项目

Mac 下使用 Homebrew 安装 Nginx

Mac利用brew安装nginx环境

mac brew install nginx遇到的坑

解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误

相关文章
|
7月前
|
应用服务中间件 Nacos nginx
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
本文为 Mac 用户介绍微服务项目环境搭建,含阿里云服务器用 Docker 装 Nacos 1.2.0,本地通过 brew 装 OpenJDK 8、Maven 3.6.1、Redis,Docker 部署 MySQL 5.7 并配字符集,及 Nginx 安装与反向代理设置,附命令与配置步骤。
411 4
黑马头条_SpringCloud项目阶段一:环境搭建(Mac版本)
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
929 86
|
存储 网络安全 数据安全/隐私保护
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
533 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
1001 2
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
833 2
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
构建RESTful APIs:使用Python和Flask
212 1
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第12天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。首先概述了API的重要性及RESTful API的基本概念,接着详细讲解了Flask框架的特性和安装方法。通过创建一个基本的Flask应用,定义了处理“图书”资源的GET、POST、PUT和DELETE方法的路由,展示了如何处理请求和响应,以及如何进行错误处理。最后,提供了运行和测试API的方法,总结了Flask在构建RESTful API方面的优势。
167 1
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第10天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web应用框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了代码示例。通过这些步骤,读者可以快速掌握使用Flask构建RESTful API的方法。
220 1

推荐镜像

更多