【问题标题】:Error 500 while deploying my Flask app with mo_wsgi on Ubuntu VPS在 Ubuntu VPS 上使用 mo_wsgi 部署我的 Flask 应用程序时出现错误 500
【发布时间】: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


    【解决方案1】:

    您是否确认 mod_wsgi 确实以 www-data 用户身份运行?如果您从非特权用户(并且没有 sudo)启动应用程序,mod_wsgi 将无法切换到 www-data 用户。 我不能说 mod_wsgi,但是如果 IIRC uwsgi 没有以配置用户身份运行它所需的权限,它只会默默地以调用用户身份运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 2013-02-04
      • 2017-11-05
      • 2020-10-21
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多