【发布时间】:2021-11-26 22:18:56
【问题描述】:
我目前正在尝试使用 mod_wsgi 在我的 ubuntu VPS 上部署一个非常基本的 Flask 应用程序。
我尽可能准确地遵循了这个 youtube 教程:https://www.youtube.com/watch?v=w0QDAg85Oow
但我最终遇到了 500 错误。这是日志中的一个示例:
mod_wsgi (pid=8283): Failed to exec Python script file '/var/www/flask-app/app.wsgi'.
mod_wsgi (pid=8283): Exception occurred processing WSGI script '/var/www/flask-app/app.wsgi'.
Traceback (most recent call last):
File "/var/www/flask-app/app.wsgi", line 5, in <module>
with open(activate_this) as file_:
PermissionError: [Errno 13] Permission denied: '/root/.local/share/virtualenvs/flask-app-yYmzn1cG/bin/activate_this.py'
app.wsgi 文件:
import sys
sys.path.insert(0, '/var/www/flask-app')
activate_this = '/root/.local/share/virtualenvs/flask-app-yYmzn1cG/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
from app import app as application
python app.py:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
flask-app.conf:
<VirtualHost *:80>
WSGIDaemonProcess flaskapp user=www-data group=www-data threads=5
WSGIScriptAlias / /var/www/flask-app/app.wsgi
<Directory /var/www/flask-app>
WSGIProcessGroup flaskapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
ErrorLog /var/www/flask-app/logs/error.log
CustomLog /var/www/flask-app/logs/access.log combined
</VirtualHost>
来自 apache2 的 /etc/apache2/sites-available 和 /etc/apache2/sites-enabled 的屏幕截图:
screenshot
正如我们在日志中看到的,这似乎是一个权限错误。 我从视频和烧瓶文档 (https://flask.palletsprojects.com/en/2.0.x/deploying/mod_wsgi/) 中了解到,正如我们在烧瓶应用程序.conf 中告诉他的那样,服务器使用“www-data”用户运行我的应用程序:
WSGIDaemonProcess flaskapp user=www-data group=www-data threads=5
我目前尝试的是从 root 运行:
$ chown -R www-data:www-data /root/.local/share/virtualenvs
因为我使用 root 创建了我的 pipenv 虚拟环境,所以我试图将这些所有权授予 www-data 用户。
但错误仍然存在......
我刚从 VPS、apache 和 Flask 开始,我找不到这个问题的解决方案。
有什么想法吗?
更新
我尝试创建一个名为“arnaud”的新用户,并将“flask-app-yYmzn1cG”文件夹(包含 virtualenv)复制到 /home/arnaud/flask-app-venv。
我更改了 app.wsgi 文件中“activate_this.py”的路径,指向新的 /home/arnaud/flask-app-venv/flask-app-yYmzn1cG/bin/activate_this.py。
我在 flask-app.conf 中将“用户”和“组”更改为“arnaud”。
...这行得通。这次没有错误,我的应用正在运行。
所以问题是用户“www-data”访问 /root/(由 root 拥有)文件夹中的 pipenv 生成的虚拟环境。
【问题讨论】:
标签: apache ubuntu flask web-deployment mod-wsgi