From 6c0f0bb72d8a7b68e278d4f6d38f30178b81b3c4 Mon Sep 17 00:00:00 2001 From: luhuibo Date: Tue, 22 Oct 2019 14:58:48 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E4=BD=BF?= =?UTF-8?q?=E7=94=A8setting=E6=96=87=E4=BB=B6=E5=88=A4=E6=96=AD=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=A4=84=E4=BA=8E=E5=BC=80=E5=8F=91/=E7=BA=BF?= =?UTF-8?q?=E4=B8=8A=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 8 ++++++++ README.md | 28 +++++++++++++++++++++++----- conf/setting.py | 41 +++++++++++++++++++++++++++++++++++++++++ run.py | 2 ++ 4 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 conf/setting.py diff --git a/.gitignore b/.gitignore index 83d80e4..eedd2de 100644 --- a/.gitignore +++ b/.gitignore @@ -133,3 +133,11 @@ dmypy.json /my_venv/ /data/ /conf/logs/ +/conf/dev.py +/templates/test_index.html +/templates/new.html +/templates/test_refer.html +/templates/test_base.html +/templates/result.html +/templates/test_sample.html +/templates/404.html diff --git a/README.md b/README.md index a283e32..a1701d6 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,19 @@ http://39.100.3.165:8188/TextSummarization/ [ipynb的地址]() +## 本地&线上同步推进(后续优化) +### 业务场景 +本地与线上的 Swagger API 文档的接口的地址是不同的,但都依赖同一个配置文件 **`app\config\setting.py`**。
+而个人项目有着本地和线上同步,开发和测试同步的需求,会不断修改 **`app\config\setting.py`** 文件,无法用 **`.gitignore`** 做到忽略配置文件,本地和线上配置隔离的效果。 + +### 解决 +**`本地`** 和 **`线上`** 自动根据所处的环境(由 .gitignore 控制)不同,选择不同的配置文件。
+那么, **`本地`** 可以比 **`线上`** 多了 **`app/config/dev.py`** 文件; 基于该文件的存在与否,可以用 **`if else`** 控制 **`app/config/`** 中配置输出。 + +### Demo +1. `echo "/app/config/dev.py" >> .gitignore` # 追加 Git 忽略提交配置到 .gitignore +2. 新建 **`app/config/dev.py`** 文件 + ## Blueprint,分隔视图 **当你的Flask项目膨胀到一定规模的时候, 全部都写到主入口之中。 一定需要按照模块进行拆分。 Blueprint(蓝图)就是这个时候需要使用的东西。** @@ -129,7 +142,7 @@ conda常用命令 - 或者创建虚拟环境安装 ## linux部署指南 -**1. linux sh & nohup后台运行脚本** +**1. linux sh & nohup后台运行python脚本** - 1)创建脚本vim run.sh - 2)填写内容并保存:nohup python3 -u run.py > nohup.log 2>&1 & - 3)运行:sh run.sh 或者 . run.sh @@ -145,7 +158,7 @@ conda常用命令 - & : 最后一个&, 是让该命令在后台执行。 ``` -**2. 使用gunicorn 部署flask服务** +**2. 使用gunicorn 部署flask服务** (个人项目推荐使用这个) - 1)创建脚本vim gunicorn.sh - 2)填写内容并保存: - conda activate just_do_it (在linux上创建好自己的环境,可选) @@ -182,14 +195,19 @@ https://www.cnblogs.com/gaidy/p/9784919.html https://www.hutuseng.com/article/how-to-kill-all-detached-screen-session-in-linux ``` -**4. 使用flask + nginx + uwsgi** + +**4. 使用flask + nginx + uwsgi** (不建议,因Flask 与 uWsgi 结合有许多难以处理的 bug) - 针对用户访问量大的情况,具体参考下面的文章 - https://blog.csdn.net/spark_csdn/article/details/80790929 - https://www.cnblogs.com/Ray-liang/p/4173923.html - https://blog.csdn.net/daniel_ustc/article/details/9070357 -**5. 使用flask + nginx + gunicorn** - - 生产环境很多大公司采用这个方式的,后面有时间再研究 +**5. 使用flask + nginx + gunicorn** (大项目推荐使用这个) + - 生产环境很多大公司采用这个方式的,故推荐这个 + - 因Flask 与 uWsgi 结合有许多难以处理的 bug,故推荐这个 + - [Flask + Gunicorn + Nginx 部署](https://www.cnblogs.com/Ray-liang/p/4837850.html) + + ## linux上杀死gunicorn的进程 **方法一** diff --git a/conf/setting.py b/conf/setting.py new file mode 100644 index 0000000..b4ca187 --- /dev/null +++ b/conf/setting.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +'''================================================= +@IDE :PyCharm +@Author :LuckyHuibo +@Date :2019/10/22 14:45 +@Desc : +## 本地&线上同步推进(后续优化) +### 业务场景 +本地与线上的 Swagger API 文档的接口的地址是不同的,但都依赖同一个配置文件 **`app\config\setting.py`**。
+而个人项目有着本地和线上同步,开发和测试同步的需求,会不断修改 **`app\config\setting.py`** 文件,无法用 **`.gitignore`** 做到忽略配置文件,本地和线上配置隔离的效果。 + +### 解决 +**`本地`** 和 **`线上`** 自动根据所处的环境(由 .gitignore 控制)不同,选择不同的配置文件。
+那么, **`本地`** 可以比 **`线上`** 多了 **`app/config/dev.py`** 文件; 基于该文件的存在与否,可以用 **`if else`** 控制 **`app/config/`** 中配置输出。 + +### Demo +1. `echo "/app/config/dev.py" >> .gitignore` # 追加 Git 忽略提交配置到 .gitignore +2. 新建 **`app/config/dev.py`** 文件 + +==================================================''' +import os + +is_dev_mode = os.path.exists('./conf/dev.py') # 'development' & 'product' (开发环境 or 生产环境) + +EXTERNAL_URL = 'server.mini-shop.ivinetrue.com' # 外部(云服务器)地址 +INTERNAL_URL = '0.0.0.0:8080' # 内部(本地)地址 +SERVER_URL = INTERNAL_URL if is_dev_mode else EXTERNAL_URL + +EXTERNAL_SCHEMES = ["https", "http"] # 外部(云服务器)支持 https 和 http 协议 +INTERNAL_SCHEMES = ["http"] # 内部只支持http +SERVER_SCHEMES = INTERNAL_SCHEMES if is_dev_mode else EXTERNAL_SCHEMES + +IMG_PREFIX = SERVER_URL + '/static/images' +UPLOAD_FOLDER = 'app/static/uploads' +VERSION = "0.3.0" # 项目版本 + +if __name__ == '__main__': + # 在上一层的run.py文件,使用os.path.exists('./conf/dev.py') + # 直接运行本运行测试,使用os.path.exists('./dev.py') + print(is_dev_mode) diff --git a/run.py b/run.py index 8bc4ff1..9887371 100644 --- a/run.py +++ b/run.py @@ -21,6 +21,7 @@ from APP.SpeechExtraction.speech_blueprint import app_extraction from APP.TextSummarization.text_blueprint import app_summarization from os.path import abspath, dirname from conf.logConf import logger +from conf.setting import is_dev_mode app = Flask("__main__", static_folder='static', template_folder='templates') @@ -41,5 +42,6 @@ def index(): if __name__ == "__main__": app.debug = True logger.info('项目运行,GO') + logger.info('is_dev_mode:{}'.format(is_dev_mode)) # main run app.run(host='0.0.0.0', port=8188)