From 541f7fc38829d97cde6bf2c3089326d312293cc1 Mon Sep 17 00:00:00 2001 From: rjb <263303411@qq.com> Date: Sun, 24 Aug 2025 18:32:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=85=BE=E8=AE=AF=E4=BA=91?= =?UTF-8?q?=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 108 +++---------------------------------- config.py | 40 ++++++++++++-- myenv/bin/activate | 78 +++++++++++++++++++++++++++ myenv/bin/activate.csh | 36 +++++++++++++ myenv/bin/activate.fish | 76 ++++++++++++++++++++++++++ myenv/bin/activate_this.py | 34 ++++++++++++ myenv/bin/easy_install | 11 ++++ myenv/bin/easy_install-3.6 | 11 ++++ myenv/bin/pip | 11 ++++ myenv/bin/pip3 | 11 ++++ myenv/bin/pip3.6 | 11 ++++ myenv/bin/python | 1 + myenv/bin/python-config | 78 +++++++++++++++++++++++++++ myenv/bin/python3 | Bin 0 -> 11336 bytes myenv/bin/python3.6 | 1 + myenv/bin/wheel | 11 ++++ myenv/include/python3.6m | 1 + myenv/lib64 | 1 + myenv/pip-selfcheck.json | 1 + run_production_public.py | 53 ++++++++++++++++++ run_production_simple.py | 4 +- 21 files changed, 470 insertions(+), 108 deletions(-) create mode 100644 myenv/bin/activate create mode 100644 myenv/bin/activate.csh create mode 100644 myenv/bin/activate.fish create mode 100644 myenv/bin/activate_this.py create mode 100755 myenv/bin/easy_install create mode 100755 myenv/bin/easy_install-3.6 create mode 100755 myenv/bin/pip create mode 100755 myenv/bin/pip3 create mode 100755 myenv/bin/pip3.6 create mode 120000 myenv/bin/python create mode 100755 myenv/bin/python-config create mode 100755 myenv/bin/python3 create mode 120000 myenv/bin/python3.6 create mode 100755 myenv/bin/wheel create mode 120000 myenv/include/python3.6m create mode 120000 myenv/lib64 create mode 100644 myenv/pip-selfcheck.json create mode 100644 run_production_public.py diff --git a/.env b/.env index 71000b5..d995d3d 100644 --- a/.env +++ b/.env @@ -1,136 +1,40 @@ # ======================================== -# Flask提示词大师应用环境变量配置示例 +# Flask提示词大师应用环境变量配置 # ======================================== -# 复制此文件为 .env 并根据实际情况修改配置 -# cp env.example .env -# ======================================== # Flask基础配置 -# ======================================== -# Flask应用密钥(必需) SECRET_KEY=your-secret-key-here - -# 应用环境(development/production/testing/local) FLASK_ENV=development -# ======================================== -# 数据库配置 -# ======================================== -# 数据库连接URL(必需) -# MySQL示例: mysql+pymysql://username:password@localhost:3306/database_name?charset=utf8mb4 -# SQLite示例: sqlite:///app.db -# PostgreSQL示例: postgresql://username:password@localhost:5432/database_name -DATABASE_URL=mysql+pymysql://root:123456@localhost:3306/pro_db?charset=utf8mb4 +# 数据库配置 - 腾讯云数据库 +DATABASE_URL=mysql+pymysql://root:!Rjb12191@gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936/pro_db?charset=utf8mb4 -# ======================================== # OpenAI兼容API配置 -# ======================================== -# API基础URL(必需) LLM_API_URL=https://api.deepseek.com/v1 +LLM_API_KEY=sk-fdf7cc1c73504e628ec0119b7e11b8cc -# API密钥(必需) -LLM_API_KEY=sk-your-api-key-here - -# ======================================== # 微信小程序配置 -# ======================================== -# 小程序AppID(必需) -WX_APPID=wx-your-appid-here +WX_APPID=wx2c65877d37fc29bf +WX_SECRET=89aa97dda3c1347c6ae3d6ab4627f1f4 -# 小程序Secret(必需) -WX_SECRET=your-wx-secret-here - -# ======================================== # 跨域配置 -# ======================================== -# 允许跨域的域名,多个用逗号分隔 -# 开发环境: http://localhost:3000,http://127.0.0.1:3000 -# 生产环境: https://yourdomain.com,https://www.yourdomain.com CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000 -# ======================================== # 日志配置 -# ======================================== -# 日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL) LOG_LEVEL=INFO - -# 日志文件路径 LOG_FILE=logs/app.log -# ======================================== # 缓存配置 -# ======================================== -# 缓存类型(simple/redis/memcached) CACHE_TYPE=simple - -# 缓存默认超时时间(秒) CACHE_DEFAULT_TIMEOUT=300 -# Redis缓存URL(当CACHE_TYPE=redis时使用) -# REDIS_URL=redis://localhost:6379/0 - -# ======================================== # 会话配置 -# ======================================== -# 会话生命周期(小时) SESSION_LIFETIME_HOURS=24 -# ======================================== # 文件上传配置 -# ======================================== -# 最大文件上传大小(字节) MAX_CONTENT_LENGTH=16777216 - -# 文件上传目录 UPLOAD_FOLDER=uploads -# ======================================== # 安全配置 -# ======================================== -# 是否启用CSRF保护 WTF_CSRF_ENABLED=True - -# CSRF令牌超时时间(秒) WTF_CSRF_TIME_LIMIT=3600 - -# ======================================== -# 邮件配置(生产环境错误报告) -# ======================================== -# 邮件服务器地址 -# MAIL_SERVER=smtp.gmail.com - -# 邮件服务器端口 -# MAIL_PORT=587 - -# 发件人邮箱 -# MAIL_FROM=noreply@yourdomain.com - -# 管理员邮箱(多个用逗号分隔) -# ADMIN_EMAIL=admin@yourdomain.com - -# ======================================== -# 性能配置 -# ======================================== -# 数据库连接池大小 -# DB_POOL_SIZE=20 - -# 数据库连接池最大溢出连接数 -# DB_MAX_OVERFLOW=30 - -# ======================================== -# 开发工具配置 -# ======================================== -# 是否启用自动重载 -# FLASK_DEBUG=True - -# 是否启用详细错误页面 -# FLASK_DEBUG_TB_ENABLED=True - -# ======================================== -# 监控配置 -# ======================================== -# 是否启用性能监控 -# ENABLE_MONITORING=False - -# 监控数据收集间隔(秒) -# MONITORING_INTERVAL=60 diff --git a/config.py b/config.py index 6868da8..6bfaaea 100644 --- a/config.py +++ b/config.py @@ -1,3 +1,26 @@ +# import os +# from dotenv import load_dotenv + +# # 在配置类定义前加载环境变量 +# load_dotenv() + +# class Config: +# SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-key' + +# # MySQL数据库配置 +# SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'mysql+pymysql://root:123456@localhost:3306/pro_db?charset=utf8mb4' +# SQLALCHEMY_TRACK_MODIFICATIONS = False + +# # OpenAI兼容API配置 +# LLM_API_URL = os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' +# LLM_API_KEY = os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc' + +# # 微信小程序配置 +# WX_APPID = os.environ.get('WX_APPID') or 'wx2c65877d37fc29bf' # 替换为你的小程序 appid +# WX_SECRET = os.environ.get('WX_SECRET') or '89aa97dda3c1347c6ae3d6ab4627f1f4' # 替换为你的小程序 secret + +# # 添加跨域支持 +# CORS_ORIGINS = ['*'] # 生产环境建议设置具体域名 import os from dotenv import load_dotenv @@ -7,10 +30,19 @@ load_dotenv() class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-key' - # MySQL数据库配置 - SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/pro_db?charset=utf8mb4' - SQLALCHEMY_TRACK_MODIFICATIONS = False + # ---------------------- 原有本地MySQL数据库配置 ---------------------- + SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'mysql+pymysql://root:123456@localhost:3306/pro_db?charset=utf8mb4' + SQLALCHEMY_TRACK_MODIFICATIONS = False # 关闭SQLAlchemy的修改跟踪(减少性能消耗) + # ---------------------- 新增:腾讯云数据库配置 ---------------------- + # 腾讯云数据库连接URI(格式:mysql+pymysql://用户名:密码@数据库地址:端口/数据库名?charset=utf8mb4) + # 注意:需先在腾讯云控制台创建目标数据库(如命名为 pro_db_tencent,需替换为你的实际库名) + TENCENT_SQLALCHEMY_DATABASE_URI = os.environ.get('TENCENT_DATABASE_URL') or \ + 'mysql+pymysql://root:!Rjb12191@gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936/pro_db?charset=utf8mb4' + # 腾讯云数据库同样关闭修改跟踪(与本地配置保持一致) + TENCENT_SQLALCHEMY_TRACK_MODIFICATIONS = False + + # ---------------------- 其他原有配置(保持不变) ---------------------- # OpenAI兼容API配置 LLM_API_URL = os.environ.get('LLM_API_URL') or 'https://api.deepseek.com/v1' LLM_API_KEY = os.environ.get('LLM_API_KEY') or 'sk-fdf7cc1c73504e628ec0119b7e11b8cc' @@ -20,4 +52,4 @@ class Config: WX_SECRET = os.environ.get('WX_SECRET') or '89aa97dda3c1347c6ae3d6ab4627f1f4' # 替换为你的小程序 secret # 添加跨域支持 - CORS_ORIGINS = ['*'] # 生产环境建议设置具体域名 + CORS_ORIGINS = ['*'] # 生产环境建议设置具体域名(如 ['https://your-domain.com']) \ No newline at end of file diff --git a/myenv/bin/activate b/myenv/bin/activate new file mode 100644 index 0000000..9a6c9ba --- /dev/null +++ b/myenv/bin/activate @@ -0,0 +1,78 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + unset -f pydoc >/dev/null 2>&1 + + # reset old environment variables + # ! [ -z ${VAR+_} ] returns true if VAR is declared at all + if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then + PATH="$_OLD_VIRTUAL_PATH" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then + PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null + fi + + if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then + PS1="$_OLD_VIRTUAL_PS1" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "${1-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="/home/renjianbo/aitsc/myenv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/bin:$PATH" +export PATH + +# unset PYTHONHOME if set +if ! [ -z "${PYTHONHOME+_}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then + _OLD_VIRTUAL_PS1="$PS1" + if [ "x" != x ] ; then + PS1="$PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" + fi + export PS1 +fi + +# Make sure to unalias pydoc if it's already there +alias pydoc 2>/dev/null >/dev/null && unalias pydoc + +pydoc () { + python -m pydoc "$@" +} + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then + hash -r 2>/dev/null +fi diff --git a/myenv/bin/activate.csh b/myenv/bin/activate.csh new file mode 100644 index 0000000..5e22507 --- /dev/null +++ b/myenv/bin/activate.csh @@ -0,0 +1,36 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. +# Created by Davide Di Blasi . + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV "/home/renjianbo/aitsc/myenv" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + + +if ("" != "") then + set env_name = "" +else + set env_name = `basename "$VIRTUAL_ENV"` +endif + +# Could be in a non-interactive environment, +# in which case, $prompt is undefined and we wouldn't +# care about the prompt anyway. +if ( $?prompt ) then + set _OLD_VIRTUAL_PROMPT="$prompt" + set prompt = "[$env_name] $prompt" +endif + +unset env_name + +alias pydoc python -m pydoc + +rehash + diff --git a/myenv/bin/activate.fish b/myenv/bin/activate.fish new file mode 100644 index 0000000..6f0e88d --- /dev/null +++ b/myenv/bin/activate.fish @@ -0,0 +1,76 @@ +# This file must be used using `. bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. +# Do not run it directly. + +function deactivate -d 'Exit virtualenv mode and return to the normal environment.' + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. + set -l fish_function_path + + # Erase virtualenv's `fish_prompt` and restore the original. + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + set -e _OLD_FISH_PROMPT_OVERRIDE + end + + set -e VIRTUAL_ENV + + if test "$argv[1]" != 'nondestructive' + # Self-destruct! + functions -e pydoc + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV "/home/renjianbo/aitsc/myenv" + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/bin" $PATH + +# Unset `$PYTHONHOME` if set. +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +function pydoc + python -m pydoc $argv +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # Copy the current `fish_prompt` function as `_old_fish_prompt`. + functions -c fish_prompt _old_fish_prompt + + function fish_prompt + # Save the current $status, for fish_prompts that display it. + set -l old_status $status + + # Prompt override provided? + # If not, just prepend the environment name. + if test -n "" + printf '%s%s' "" (set_color normal) + else + printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV") + end + + # Restore the original $status + echo "exit $old_status" | source + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" +end diff --git a/myenv/bin/activate_this.py b/myenv/bin/activate_this.py new file mode 100644 index 0000000..f18193b --- /dev/null +++ b/myenv/bin/activate_this.py @@ -0,0 +1,34 @@ +"""By using execfile(this_file, dict(__file__=this_file)) you will +activate this virtualenv environment. + +This can be used when you must use an existing Python interpreter, not +the virtualenv bin/python +""" + +try: + __file__ +except NameError: + raise AssertionError( + "You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))") +import sys +import os + +old_os_path = os.environ.get('PATH', '') +os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path +base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if sys.platform == 'win32': + site_packages = os.path.join(base, 'Lib', 'site-packages') +else: + site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages') +prev_sys_path = list(sys.path) +import site +site.addsitedir(site_packages) +sys.real_prefix = sys.prefix +sys.prefix = base +# Move the added items to the front of the path: +new_sys_path = [] +for item in list(sys.path): + if item not in prev_sys_path: + new_sys_path.append(item) + sys.path.remove(item) +sys.path[:0] = new_sys_path diff --git a/myenv/bin/easy_install b/myenv/bin/easy_install new file mode 100755 index 0000000..bc0fd73 --- /dev/null +++ b/myenv/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/renjianbo/aitsc/myenv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/myenv/bin/easy_install-3.6 b/myenv/bin/easy_install-3.6 new file mode 100755 index 0000000..bc0fd73 --- /dev/null +++ b/myenv/bin/easy_install-3.6 @@ -0,0 +1,11 @@ +#!/home/renjianbo/aitsc/myenv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from setuptools.command.easy_install import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/myenv/bin/pip b/myenv/bin/pip new file mode 100755 index 0000000..be27198 --- /dev/null +++ b/myenv/bin/pip @@ -0,0 +1,11 @@ +#!/home/renjianbo/aitsc/myenv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/myenv/bin/pip3 b/myenv/bin/pip3 new file mode 100755 index 0000000..be27198 --- /dev/null +++ b/myenv/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/renjianbo/aitsc/myenv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/myenv/bin/pip3.6 b/myenv/bin/pip3.6 new file mode 100755 index 0000000..be27198 --- /dev/null +++ b/myenv/bin/pip3.6 @@ -0,0 +1,11 @@ +#!/home/renjianbo/aitsc/myenv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/myenv/bin/python b/myenv/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/myenv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/myenv/bin/python-config b/myenv/bin/python-config new file mode 100755 index 0000000..4aebc71 --- /dev/null +++ b/myenv/bin/python-config @@ -0,0 +1,78 @@ +#!/home/renjianbo/aitsc/myenv/bin/python + +import sys +import getopt +import sysconfig + +valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', + 'ldflags', 'help'] + +if sys.version_info >= (3, 2): + valid_opts.insert(-1, 'extension-suffix') + valid_opts.append('abiflags') +if sys.version_info >= (3, 3): + valid_opts.append('configdir') + + +def exit_with_usage(code=1): + sys.stderr.write("Usage: {0} [{1}]\n".format( + sys.argv[0], '|'.join('--'+opt for opt in valid_opts))) + sys.exit(code) + +try: + opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) +except getopt.error: + exit_with_usage() + +if not opts: + exit_with_usage() + +pyver = sysconfig.get_config_var('VERSION') +getvar = sysconfig.get_config_var + +opt_flags = [flag for (flag, val) in opts] + +if '--help' in opt_flags: + exit_with_usage(code=0) + +for opt in opt_flags: + if opt == '--prefix': + print(sysconfig.get_config_var('prefix')) + + elif opt == '--exec-prefix': + print(sysconfig.get_config_var('exec_prefix')) + + elif opt in ('--includes', '--cflags'): + flags = ['-I' + sysconfig.get_path('include'), + '-I' + sysconfig.get_path('platinclude')] + if opt == '--cflags': + flags.extend(getvar('CFLAGS').split()) + print(' '.join(flags)) + + elif opt in ('--libs', '--ldflags'): + abiflags = getattr(sys, 'abiflags', '') + libs = ['-lpython' + pyver + abiflags] + libs += getvar('LIBS').split() + libs += getvar('SYSLIBS').split() + # add the prefix/lib/pythonX.Y/config dir, but only if there is no + # shared library in prefix/lib/. + if opt == '--ldflags': + if not getvar('Py_ENABLE_SHARED'): + libs.insert(0, '-L' + getvar('LIBPL')) + if not getvar('PYTHONFRAMEWORK'): + libs.extend(getvar('LINKFORSHARED').split()) + print(' '.join(libs)) + + elif opt == '--extension-suffix': + ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') + if ext_suffix is None: + ext_suffix = sysconfig.get_config_var('SO') + print(ext_suffix) + + elif opt == '--abiflags': + if not getattr(sys, 'abiflags', None): + exit_with_usage() + print(sys.abiflags) + + elif opt == '--configdir': + print(sysconfig.get_config_var('LIBPL')) diff --git a/myenv/bin/python3 b/myenv/bin/python3 new file mode 100755 index 0000000000000000000000000000000000000000..75645de7287a48d30f7933b2423847c5b7f3a082 GIT binary patch literal 11336 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 literal 0 HcmV?d00001 diff --git a/myenv/bin/python3.6 b/myenv/bin/python3.6 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/myenv/bin/python3.6 @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/myenv/bin/wheel b/myenv/bin/wheel new file mode 100755 index 0000000..7f7cdd9 --- /dev/null +++ b/myenv/bin/wheel @@ -0,0 +1,11 @@ +#!/home/renjianbo/aitsc/myenv/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from wheel.tool import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/myenv/include/python3.6m b/myenv/include/python3.6m new file mode 120000 index 0000000..ba3a1bf --- /dev/null +++ b/myenv/include/python3.6m @@ -0,0 +1 @@ +/usr/include/python3.6m \ No newline at end of file diff --git a/myenv/lib64 b/myenv/lib64 new file mode 120000 index 0000000..7951405 --- /dev/null +++ b/myenv/lib64 @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/myenv/pip-selfcheck.json b/myenv/pip-selfcheck.json new file mode 100644 index 0000000..aacd71a --- /dev/null +++ b/myenv/pip-selfcheck.json @@ -0,0 +1 @@ +{"last_check":"2025-08-24T07:25:49Z","pypi_version":"25.2"} \ No newline at end of file diff --git a/run_production_public.py b/run_production_public.py new file mode 100644 index 0000000..37df20e --- /dev/null +++ b/run_production_public.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +""" +生产环境启动脚本 - 支持外网访问 +使用 Flask 内置服务器,配置为生产模式 +""" + +import os +import sys +from src.flask_prompt_master import create_app + +def main(): + """主函数""" + # 设置生产环境变量 + os.environ['FLASK_ENV'] = 'production' + + # 创建应用实例 + app = create_app() + + # 获取端口号(支持环境变量配置) + port = int(os.environ.get('PORT', 5001)) + + print("=" * 60) + print("🚀 Flask 提示词大师 - 生产环境启动(外网访问)") + print("=" * 60) + print(f"📊 环境: {os.environ.get('FLASK_ENV', 'unknown')}") + print(f"🌐 服务器: Flask 内置服务器") + print(f"🔗 内网地址: http://10.0.4.13:{port}") + print(f"🌍 外网地址: http://101.43.95.130:{port}") + print(f"📝 日志: 控制台输出") + print("=" * 60) + print("✅ 服务器启动中...") + print("💡 按 Ctrl+C 停止服务器") + print("=" * 60) + + try: + # 启动 Flask 内置服务器(生产模式配置) + app.run( + host='0.0.0.0', # 监听所有网络接口 + port=port, + debug=False, # 生产环境关闭调试 + threaded=True, # 启用多线程 + use_reloader=False # 关闭自动重载 + ) + except KeyboardInterrupt: + print("\n" + "=" * 60) + print("🛑 服务器已停止") + print("=" * 60) + except Exception as e: + print(f"\n❌ 启动失败: {str(e)}") + sys.exit(1) + +if __name__ == '__main__': + main() diff --git a/run_production_simple.py b/run_production_simple.py index cddd5cc..8a393ba 100644 --- a/run_production_simple.py +++ b/run_production_simple.py @@ -22,7 +22,7 @@ def main(): print("=" * 60) print(f"📊 环境: {os.environ.get('FLASK_ENV', 'unknown')}") print(f"🌐 服务器: Flask 内置服务器") - print(f"🔗 地址: http://0.0.0.0:5000") + print(f"🔗 地址: http://0.0.0.0:5001") print(f"📝 日志: 控制台输出") print("=" * 60) print("✅ 服务器启动中...") @@ -33,7 +33,7 @@ def main(): # 启动 Flask 内置服务器(生产模式配置) app.run( host='0.0.0.0', - port=5000, + port=5001, # 修改端口为5001 debug=False, # 生产环境关闭调试 threaded=True, # 启用多线程 use_reloader=False # 关闭自动重载