10 changed files with 230 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||||||
|
# Default ignored files |
||||||
|
/shelf/ |
||||||
|
/workspace.xml |
||||||
|
# Editor-based HTTP Client requests |
||||||
|
/httpRequests/ |
||||||
|
# Datasource local storage ignored files |
||||||
|
/dataSources/ |
||||||
|
/dataSources.local.xml |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module type="PYTHON_MODULE" version="4"> |
||||||
|
<component name="Flask"> |
||||||
|
<option name="enabled" value="true" /> |
||||||
|
</component> |
||||||
|
<component name="NewModuleRootManager"> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/venv" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="inheritedJdk" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
</component> |
||||||
|
<component name="TemplatesService"> |
||||||
|
<option name="TEMPLATE_CONFIGURATION" value="Jinja2" /> |
||||||
|
<option name="TEMPLATE_FOLDERS"> |
||||||
|
<list> |
||||||
|
<option value="$MODULE_DIR$/../flaskProject2\templates" /> |
||||||
|
</list> |
||||||
|
</option> |
||||||
|
</component> |
||||||
|
</module> |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
<component name="InspectionProjectProfileManager"> |
||||||
|
<settings> |
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" /> |
||||||
|
<version value="1.0" /> |
||||||
|
</settings> |
||||||
|
</component> |
||||||
@ -0,0 +1,4 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (venv)" project-jdk-type="Python SDK" /> |
||||||
|
</project> |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="ProjectModuleManager"> |
||||||
|
<modules> |
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/flaskProject2.iml" filepath="$PROJECT_DIR$/.idea/flaskProject2.iml" /> |
||||||
|
</modules> |
||||||
|
</component> |
||||||
|
</project> |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project version="4"> |
||||||
|
<component name="VcsDirectoryMappings"> |
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" /> |
||||||
|
</component> |
||||||
|
</project> |
||||||
@ -0,0 +1,99 @@ |
|||||||
|
# 快捷帮项目 |
||||||
|
|
||||||
|
## 需求: |
||||||
|
1、该项目服务于会计行业人员。 |
||||||
|
|
||||||
|
2、并且提供相应的工作便利和生活便利。 |
||||||
|
|
||||||
|
## 模块: |
||||||
|
1、登录 |
||||||
|
|
||||||
|
2、用户 |
||||||
|
|
||||||
|
3、首页 |
||||||
|
|
||||||
|
4、购物系统 |
||||||
|
|
||||||
|
5、评论系统 |
||||||
|
|
||||||
|
6、任务系统 |
||||||
|
|
||||||
|
7、项目后台管理。 |
||||||
|
|
||||||
|
## 项目部署: |
||||||
|
```bash |
||||||
|
#如果是在debian中,安装apt install nginx python3.6以上版本及依赖包、uwsgi、flask、MySQL。 |
||||||
|
apt install nginx python3.8 mysql-server[or mariadb] -y |
||||||
|
pip3 install flask SQLAlchemy uwsgi |
||||||
|
#配置uwsgi |
||||||
|
|
||||||
|
#进入/home目录下,新建新的用户并配置密码来使用该该项目 |
||||||
|
useradd -m kuajbang |
||||||
|
passwd kuajbang |
||||||
|
#新建服务文件夹存放服务和数据。 |
||||||
|
mkdir kuajbang_server/server and kuajbang_server/db |
||||||
|
#将新建的用户赋予给该文件,让其后期可以进行服务修改和维护。 |
||||||
|
chmod u+wx kuajbang_server |
||||||
|
chown kuajbang:kuajbang |
||||||
|
#在kuajbang_server/server下新建uwsgi.ini |
||||||
|
格式: |
||||||
|
[uwsgi] |
||||||
|
uid=www-data # Ubuntu系统下默认用户名 |
||||||
|
gid=www-data # Ubuntu系统下默认用户组 |
||||||
|
project=mysite1 # 项目名 |
||||||
|
base = /home/user1 # 项目根目录 |
||||||
|
|
||||||
|
home = %(base)/Env/%(project) # 设置项目虚拟环境,Docker部署时不需要 |
||||||
|
chdir=%(base)/%(project) # 设置工作目录 |
||||||
|
module=%(project).wsgi:application # wsgi文件位置 |
||||||
|
|
||||||
|
master=True # 主进程 |
||||||
|
processes=2 # 同时进行的进程数,一般 |
||||||
|
|
||||||
|
# 以下uwsgi与nginx通信手段3选一即可 |
||||||
|
# 选项1, 使用unix socket与nginx通信,仅限于uwsgi和nginx在同一主机上情形 |
||||||
|
# Nginx配置中uwsgi_pass应指向同一socket文件 |
||||||
|
socket=/run/uwsgi/%(project).sock |
||||||
|
# 选项2,使用TCP socket与nginx通信 |
||||||
|
# Nginx配置中uwsgi_pass应指向uWSGI服务器IP和端口 |
||||||
|
# socket=0.0.0.0:8000 或则 socket=:8000 |
||||||
|
# 选项3,使用http协议与nginx通信 |
||||||
|
# Nginx配置中proxy_pass应指向uWSGI服务器一IP和端口 |
||||||
|
# http=0.0.0.0:8000 |
||||||
|
# socket权限设置 |
||||||
|
chown-socket=%(uid):www-data |
||||||
|
chmod-socket=664 |
||||||
|
# 进程文件 |
||||||
|
pidfile=/tmp/%(project)-master.pid |
||||||
|
# 以后台守护进程运行,并将log日志存于temp文件夹。 |
||||||
|
daemonize=/var/log/uwsgi/%(project).log |
||||||
|
# 服务停止时,自动移除unix socket和pid文件 |
||||||
|
vacuum=True |
||||||
|
# 为每个工作进程设置请求数的上限。当处理的请求总数超过这个量,进程回收重启。 |
||||||
|
max-requests=5000 |
||||||
|
# 当一个请求花费的时间超过这个时间,那么这个请求都会被丢弃。 |
||||||
|
harakiri=60 |
||||||
|
#当一个请求被harakiri杀掉会输出一条日志 |
||||||
|
harakiri-verbose=true |
||||||
|
# uWsgi默认的buffersize为4096,如果请求数据超过这个量会报错。这里设置为64k |
||||||
|
buffer-size=65536 |
||||||
|
# 如果http请求体的大小超过指定的限制,打开http body缓冲,这里为64k |
||||||
|
post-buffering=65536 |
||||||
|
#开启内存使用情况报告 |
||||||
|
memory-report=true |
||||||
|
#设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒) |
||||||
|
reload-mercy=10 |
||||||
|
#设置工作进程使用虚拟内存超过多少MB就回收重启 |
||||||
|
reload-on-as=1024 |
||||||
|
|
||||||
|
|
||||||
|
#将服务开启 |
||||||
|
uwsgi --ini kuajbang_server/server/uwsgi.ini |
||||||
|
|
||||||
|
``` |
||||||
|
|
||||||
|
## 联系: |
||||||
|
作者:AiNiSuBing |
||||||
|
|
||||||
|
链接: |
||||||
|
http://github.com/AiNiSuBing/adiao/KuaJBang.git |
||||||
@ -0,0 +1,12 @@ |
|||||||
|
from flask import Flask |
||||||
|
|
||||||
|
app = Flask(__name__) |
||||||
|
|
||||||
|
|
||||||
|
@app.route('/') |
||||||
|
def hello_world(): # put application's code here |
||||||
|
return 'Hello World!' |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
app.run() |
||||||
@ -0,0 +1,66 @@ |
|||||||
|
import os |
||||||
|
|
||||||
|
|
||||||
|
class Config(object): |
||||||
|
""" |
||||||
|
全局配置 |
||||||
|
""" |
||||||
|
SECRET_KEY = "keuyfasdfa" |
||||||
|
SQLALCHEMY_COMMIT_ON_TEARDOWN = True |
||||||
|
|
||||||
|
@staticmethod |
||||||
|
def __init_app(app): |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
class DevelopmentConfig(Config): |
||||||
|
""" |
||||||
|
开发环境配置 |
||||||
|
""" |
||||||
|
DEBUG = True |
||||||
|
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URI') |
||||||
|
HOSTNAME = "127.0.0.1" |
||||||
|
PORT = "3306" |
||||||
|
DATABASE = "kuajbang" |
||||||
|
USERNAME = "kuajbang" |
||||||
|
PASSWORD = "adiao" |
||||||
|
DB_URI = "mysql+mysqldb://{}:{}@{}:{}/{}?charset=utf8".format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE) |
||||||
|
|
||||||
|
|
||||||
|
class TestingConfig(Config): |
||||||
|
""" |
||||||
|
测试环境配置 |
||||||
|
""" |
||||||
|
DEBUG = True |
||||||
|
SQLALCHEMY_DATABASE_URI = os.environ.get('TESTING_DATABASE_URI') |
||||||
|
HOSTNAME = "127.0.0.1" |
||||||
|
PORT = "3306" |
||||||
|
DATABASE = "kuajbang" |
||||||
|
USERNAME = "kuajbang" |
||||||
|
PASSWORD = "adiao" |
||||||
|
DB_URI = "mysql+mysqldb://{}:{}@{}:{}/{}?charset=utf8".format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE) |
||||||
|
|
||||||
|
|
||||||
|
class ProductionConfig(Config): |
||||||
|
""" |
||||||
|
生产环境配置 |
||||||
|
""" |
||||||
|
SQLALCHEMY_DATABASE_URI = os.environ.get('PRODUCTION_DATABASE_URI') |
||||||
|
DEBUG = False |
||||||
|
HOSTNAME = "127.0.0.1" |
||||||
|
PORT = "3306" |
||||||
|
DATABASE = "kuajbang" |
||||||
|
USERNAME = "kuajbang" |
||||||
|
PASSWORD = "adiao" |
||||||
|
DB_URI = "mysql+mysqldb://{}:{}@{}:{}/{}?charset=utf8".format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE) |
||||||
|
|
||||||
|
|
||||||
|
""" |
||||||
|
总环境字典 |
||||||
|
""" |
||||||
|
config = { |
||||||
|
'development': DevelopmentConfig, |
||||||
|
'testing': TestingConfig, |
||||||
|
'production': ProductionConfig, |
||||||
|
'default': DevelopmentConfig |
||||||
|
} |
||||||
Loading…
Reference in new issue