我一直在努力解决这个问题,但我就是不能让它工作。
基本上,我想使用mod_wsgi和apache来服务我的Python Flask应用程序,我错过了什么?
这是我得到的,一个python flask 应用程序(flask_restful),带有一个main.py,如下所示:
from app import create_app
application = create_app()
application.run(debug=True)
它叫我的app.py
def create_app() -> Flask:
errors = WWAPIErrors()
errors.add_error(GeneralException, 400)
app = Flask("namehere")
api = WWAPI(error_list=errors, app=app)
# APIS
api.add_resource(endpointResouceClass, '/endpoint')
return app
这一切都运行在本地正确,我有一个VPS设置与其他网站运行完美,但没有python flask 应用程序。
所以我做了以下工作:
sudo apt-get install libapache2-mod-wsgi-py3
sudo apt-get install apache2-dev
sudo apt-get install python3-dev
cd /var/www/appDirectory
python3 -m venv venv
source venv/bin/activate
pip install mod_wsgi
pip install -r requirements.txt
我的website.conf文件在/etc/apache 2/sites-available目录中是:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin email@email.com
WSGIScriptAlias / /var/www/appDirectory/app/api/main.py
DocumentRoot /var/www/appDirectory/app/api
<Directory /var/www/appDirectory/app/api/main.py>
Require all granted
</Directory>
WSGIDaemonProcess localhost python-path=/var/www/appDirectory/venv/lib/python3.10/site-packages/ user=www-data
Alias /api /var/www/appDirectory/app/api
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
然后设置mod_wsgi配置文件:
sudo a2enmod wsgi
mod_wsgi-express module-config
LoadModule wsgi_module "/home/user/appDirectory/venv/lib/python3.10/site-packages/mod_wsgi/server/mod_wsgi-py310.cpython-310-x86_64-linux-gnu.so"
WSGIPythonHome "/home/user/appDirectory/venv"
并将其放在我/etc/apache 2/mods-enabled/wsgi.load文件中。
接下来,我启用了我的网站:
cd /etc/apache2/sites-available
sudo a2ensite mysitename.conf
我的项目的目录加载时,我去我的应用程序的基本URL,因为我没有index.html或任何东西在site.com/根目录.但当我去我的实现网站的URL,这是site.com/endpoint,我只是得到一个404,我甚至试图让它在我的VPS本地,没有运气.
wget localhost:80/endpoint
--2022-12-08 21:07:15-- http://localhost/endpoint
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2022-12-08 21:07:15 ERROR 404: Not Found.
我知道/希望我只是错过了一些愚蠢的,任何帮助将不胜感激。
系统详细信息:
neofetch
.-/+oossssoo+/-.
`:+ssssssssssssssssss+:` -------------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 22.04.1 LTS x86_64
.ossssssssssssssssssdMMMNysssso. Host: VMware Virtual Platform None
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 5.15.0-52-generic
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 47 days, 10 hours, 49 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 1392 (dpkg), 7 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.1.16
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 1024x768
ossyNMMMNyMMhsssssssssssssshmmmhssssssso Terminal: /dev/pts/0
ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: Intel Xeon E5-2683 v3 (2) @ 1.997GHz
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ GPU: 00:0f.0 VMware SVGA II Adapter
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Memory: 987MiB / 1941MiB
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
+sssssssssdmydMMMMMMMMddddyssssssss+
/ssssssssssshdmNNNNmyNMMMMhssssss/
.ossssssssssssssssssdMMMNysssso.
-+sssssssssssssssssyyyssss+-
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.
1条答案
按热度按时间23c0lvtd1#
我总算找到了我的问题所在:
显然wsgi不能直接使用main.py文件,我需要在项目目录的根目录下包含一个
app.wsgi
文件,其内容如下:除此之外,我还需要编辑我的
main.py
文件,删除application.run()
行,因为wsgi本身会处理它。所以我的main.py
文件现在看起来像这样:现在,当我运行应用程序时,我不再得到404,而是得到正确的响应,代码为200。
希望这在某个阶段对其他人有所帮助,因为我确实认为关于mod_wsgi和wsgi的信息在网上确实缺乏和冲突。