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错误

相关文章
|
3月前
|
异构计算 Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
328 1
|
3月前
|
API 语音技术 开发者
Python 项目打包,并上传到 PyPI,分享项目
本文介绍了如何使用 Poetry 打包并发布一个 Python 项目至 PyPI。内容包括:项目创建、配置 `pyproject.toml` 文件、构建软件包、上传至 PyPI、安装与使用。通过实例 iGTTS 展示了从开发到发布的完整流程,帮助开发者快速分享自己的 Python 工具。
|
3月前
|
人工智能 Shell Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
228 0
|
6月前
|
监控 大数据 API
Python 技术员实践指南:从项目落地到技术优化
本内容涵盖Python开发的实战项目、技术攻关与工程化实践,包括自动化脚本(日志分析系统)和Web后端(轻量化API服务)两大项目类型。通过使用正则表达式、Flask框架等技术,解决日志分析效率低与API服务性能优化等问题。同时深入探讨内存泄漏排查、CPU瓶颈优化,并提供团队协作规范与代码审查流程。延伸至AI、大数据及DevOps领域,如商品推荐系统、PySpark数据处理和Airflow任务编排,助力开发者全面提升从编码到架构的能力,积累高并发与大数据场景下的实战经验。
Python 技术员实践指南:从项目落地到技术优化
|
8月前
|
程序员 测试技术 开发工具
怎么开发Python第三方库?手把手教你参与开源项目!
大家好,我是程序员晚枫。本文将分享如何开发Python第三方库,并以我维护的开源项目 **popdf** 为例,指导参与开源贡献。Popdf是一个PDF操作库,支持PDF转Word、转图片、合并与加密等功能。文章涵盖从fork项目、本地开发、单元测试到提交PR的全流程,适合想了解开源贡献的开发者。欢迎访问[popdf](https://gitcode.com/python4office/popdf),一起交流学习!
273 21
怎么开发Python第三方库?手把手教你参与开源项目!
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
251 2
|
11月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
517 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
9月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
1033 1
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
210 61

推荐镜像

更多