当前位置: 首页 > 后端技术 > Python

Apache+mod_wsgi+flask详细安装步骤

时间:2023-03-26 19:11:09 Python

记录一下基于python3的apache+mod_wsgi+flask的详细安装步骤,同时配置html和siterestfulapi进行站点访问。mod_wsgi是以扩展的方式引入的,所以我需要得到编译好的mod_wsgi.so文件。可以去github下载文件编译安装。下面是我使用的pip3安装。使用pip3安装mod_wsgi$yuminstallpython36-develhttpd-devel$/usr/bin/pip3install-vmod_wsgi安装成功后,找到服务器mod_wsgi文件夹下的文件夹路径/to/python3.6/site-package/smod_wsgi/server下有一个mod_wsgi.so文件mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so,在apache中引入扩展名:#进入mod_wsgi下的server文件夹$cd/usr/local/lib64/python3.6/site-packages/mod_wsgi/server#将文件夹下的mod_wsgi.so文件复制到apache的modules模块$cpmod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so/usr/local/apache/modules/mod_wsgi.so在虚拟环境中安装Flask用pip安装virtualenv$pip3installvirtualenv创建开发项目project并进入项目$mkdirproject$cdproject创建一个独立的Python运行环境,命名为venv,进入环境withsource$virtualenv--no-site-packagesvenv$sourcevenv/bin/activate在虚拟机中安装flask环境$pip3安装fl问配置站点/data/www/project├──api│└──api.py├──index.html站点目录结构如图,首页为根目录下的index.html请求http://localhost/index.html,api请求为http://localhost/api/list新建文件app.wsgiimportsyssys.path.insert(0,"/data/www/project/api/")fromapiimportappasintheapidirectoryapplicationif__name__=="__main__":application.run()从flaskimportFlask,jsonifyapp=Flask(__name__)@app.route('/list')defgetList():returnjsonify('success')if__name__=='__main__':app.run()配置Apache加载mod_wsgi.so模块,修改Apache的httpd.conf,添加LoadModulewsgi_modulemodules/mod_wsgi.so$vim/usr/本地/apache/conf/httpd.confLoadModulewsgi_modulemodules/mod_wsgi.so修改站点配置文件$vim/usr/local/apache/conf/vhost/default.confServerNamelocalhost#指定根目录DocumentRoot/data/www/project/#WSGIDaemonProcess指定创建不同的守护进程,设置守护进程组名称为wsgi_api#threads指定线程数为5#python-home指定守护进程使用的Python虚拟环境位置为/data/www/project/venv#python-路径引用Python虚拟环境的site-packages目录WSGIDaemonProcesswsgi_apithreads=5python-home=/data/www/project/venvpython-path=/data/www/project/venv/lib/python3.6/site-packages#WSGIScriptAlias和Alias指令是一样的,将一个特定的文件路径/api标记为脚本/data/www/project/api/app.wsgi,这个脚本应该由mod_wsgi的wsgi-scripthandler处理WSGIScriptAlias/api/data/www/project/api/app.wsgiWSGIProcessGroupwsgi_apiWSGIApplicationGroup%{GLOBAL}#WSGIScriptReloading设置更改WSGI脚本文件会触发重新加载机制WSGIScriptReloadingOnAllowOverrideNoneRequireallgranted重启apache$/etc/init.d/httpdrestarttest直接访问主页http://localhost/index.html请求接口curlhttp://localhost/api/list遇到的问题和解决了问题1:/usr/bin/pip3install-vmod_wsgi报错src/server/wsgi_python.h:24:20:fatalerror:Python.h:Nosuchfileordirectory答:$yuminstallpython36-develhttpd-devel问题2:Apache可以不用配置选项WSGIDaemonProcess答:修改app.wsgi文件#进入virtual虚拟环境activate_this='/data/www/project/venv/bin/activate_this.py'execfile(activate_this,dict(__file__=activate_this))importsyssys.path.insert(0,"/data/www/project/api/")fromapiimportappasapplicationif__name__=="__main__":application.run()参考mod_wsgi文档mod-wsgi4.7.1安装文档