ubuntu - 如何通过 Apache 2 和 mod_wsgi 在 Ubuntu 上正确提供 Flask App? 404 未找到错误

标签 ubuntu flask apache2 virtualenv mod-wsgi

我的 Flask 应用程序在与 Flask 服务器的本地环回上运行良好,但现在我试图让 apache2 为我的私有(private) 192.168.0.0/24 网络(我的服务器的 IP 是 192.168.0.18)上的应用程序提供服务。

EDIT3:我听从了 Dumpleton 先生的大部分建议,除了将 .wsgi 移出文档根目录(我计划在一切正常运行之后这样做)。我能够得到 hellow world要运行的脚本。我的私有(private) LAN 上的任何机器都可以通过我服务器的私有(private) IP 看到它。但是,当实际尝试让我的网站运行时,会返回 404。/var/log/apache2/error.log 中没有错误。我怀疑问题出在我的 flaskapp.wsgi 脚本中。它似乎与用于简单的“hello world”页面的页面有很大不同。

有什么建议吗?谢谢堆栈溢出

root@server:/var/www/flaskapp# cat /etc/hosts
127.0.0.1   www.flaskapp.com
127.0.1.1   server


root@server:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 32 Jun 29 23:27 flaskapp.conf -> ../sites-available/flaskapp.conf


root@server:/var/www/flaskapp# ls -l
total 8
drwxr-xr-x 8 root root 4096 Jun 30 18:14 flaskapp

-rw-r--r-- 1 root root 1397 Jun 30 19:02 flaskapp.wsgi

root@server:/var/www/flaskapp/flaskapp# ls -l
total 92
drwxr-xr-x 2 root root     4096 Jun 29 15:19 bin
drwxr-xr-x 2 bin  root     4096 Jun 29 15:08 include
-rw-r--r-- 1 root root       64 Jun 30 00:19 __init__.py
drwxr-xr-x 3 bin  root     4096 Jun 29 15:08 lib
drwxr-xr-x 2 bin  root     4096 Jun 29 15:08 local
-rw-r--r-- 1 bin  robobot 10113 Jun 30 19:12 main.py
-rw-r--r-- 1 bin  robobot 10066 Jun 28 11:54 main.py.bak
-rw-r--r-- 1 bin  root       61 Jun 29 15:08 pip-selfcheck.json
-rw-r--r-- 1 bin  robobot    80 Jun 28 16:03 requirements.txt
-rw-r--r-- 1 bin  robobot  7525 Jun 25 11:46 rss_gen27.py
-rw-r--r-- 1 bin  robobot  7525 Jun 25 11:46 rss_gen27.py.bak
-rw-r--r-- 1 bin  robobot  7520 Jun 25 11:42 rss_gen.py
-rw-r--r-- 1 bin  robobot  7334 Jun 20 16:01 rss_gen.py.bak
drwxr-xr-x 2 bin  robobot  4096 Jun 29 09:24 static
drwxr-xr-x 2 bin  robobot  4096 Jun 28 11:53 templates


root@server:/var/www/flaskapp/flaskapp# cat /etc/apache2/sites-enabled/flaskapp.conf 
<VirtualHost *:80>
    ServerName www.flaskapp.com
    ServerAlias flaskapp.com
    DocumentRoot /var/www/flaskapp
    <Directory /var/www/flaskapp>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>
    WSGIDaemonProcess flaskapp python-path=/var/www/flaskapp:/var/www/flaskapp/flaskapp/lib/python2.7/site-packages
    WSGIProcessGroup flaskapp
    WSGIScriptAlias / /var/www/flaskapp/flaskapp.wsgi
    Alias /static /var/www/flaskapp/flaskapp/static
    <Directory /var/www/flaskapp>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


root@server:/var/www/flaskapp# cat flaskapp.wsgi 
#!/usr/bin/python
activate_this = '/var/www/flaskapp/flaskapp/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import sys
import logging
import os
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/flaskapp")
from flaskapp import app as application
application.secret_key = "random string of chars "


root@server:/var/www/flaskapp/flaskapp# cat __init__.py 
from flask import Flask
app = Flask(__name__)
import main


main.py:

app = Flask(__name__)

@app.route('/', methods=['POST', 'GET'])
def home():
    return render_template("index.html")

if __name__ == '__main__':
    app.run(debug=True)

最佳答案

功劳属于 Dumpleton 先生......为了让 flask 应用程序在私有(private) LAN 上提供服务,以下是对我有用的方法:

root@server:/var/www/flaskapp# pwd
/var/www/flaskapp
root@server:/var/www/flaskapp# ls -l
total 96 
drwxr-xr-x 2 root root     4096 Jun 29 15:19 bin 
-rw-r--r-- 1 root root      750 Jul  1 00:14 flaskapp.wsgi
drwxr-xr-x 2 bin  root     4096 Jun 29 15:08 include
-rw-r--r-- 1 root root       64 Jun 30 00:19 __init__.py
drwxr-xr-x 3 bin  root     4096 Jun 29 15:08 lib
drwxr-xr-x 2 bin  root     4096 Jun 29 15:08 local
-rw-r--r-- 1 root root    10113 Jun 30 23:34 main.py
-rw-r--r-- 1 bin  robobot 10113 Jun 30 23:20 main.py.bak
-rw-r--r-- 1 bin  root       61 Jun 29 15:08 pip-selfcheck.json
-rw-r--r-- 1 bin  robobot    80 Jun 28 16:03 requirements.txt
-rw-r--r-- 1 bin  robobot  7525 Jun 25 11:46 rss_gen27.py
-rw-r--r-- 1 bin  robobot  7525 Jun 25 11:46 rss_gen27.py.bak
-rw-r--r-- 1 bin  robobot  7520 Jun 25 11:42 rss_gen.py
-rw-r--r-- 1 bin  robobot  7334 Jun 20 16:01 rss_gen.py.bak
drwxr-xr-x 2 bin  robobot  4096 Jun 29 09:24 static
drwxr-xr-x 2 bin  robobot  4096 Jun 28 11:53 templates

root@server:/var/www/flaskapp# cat __init__.py ; cat flaskapp.wsgi 
from flask import Flask
app = Flask(__name__)
import main
#!/usr/bin/python
import sys
import logging
import os


this_dir = os.path.dirname(__file__)
sys.path.insert(0, this_dir)
activate_this = '/var/www/flaskapp/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
this_dir = os.path.dirname(__file__)
logging.basicConfig(stream=sys.stderr)
from main import app as application
application.secret_key = "random string here"


Logs are located in /var/log/apache2/error.log

/etc/apache2/sites-enabled/flaskapp.conf:
<VirtualHost *:80>
    ServerName www.flaskapp.com
    ServerAlias flaskapp.com
    DocumentRoot /var/www/flaskapp
    <Directory /var/www/flaskapp>
        <IfVersion < 2.4>
            Order allow,deny
            Allow from all
        </IfVersion>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>
    WSGIDaemonProcess flaskapp.com processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup flaskapp.com
    WSGIScriptAlias / /var/www/flaskapp/flaskapp.wsgi
    Alias /static /var/www/flaskapp/static
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


root@server:/var/www/flaskapp# cat /etc/hosts
127.0.0.1   www.flaskapp.com
127.0.1.1   server

Originally I thought the secret key was not needed in the  .wsgi file and in the file with the routes as well... However I needed the key in both places 

关于ubuntu - 如何通过 Apache 2 和 mod_wsgi 在 Ubuntu 上正确提供 Flask App? 404 未找到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51104552/

相关文章:

Django/mod_wsgi/postgresql_psycopg2 : can't connect authentication fails (but settings work fine under django runserver or dbshell)

ubuntu - 在 Amazon EC2 ubuntu 上获取 Microsoft Calibri 字体

ruby-on-rails - nokogiri gem - 错误 : Failed to build gem native extension.

Python 重新安装 --enable-unicode=ucs4 和 lxml undefined symbol : PyUnicodeUCS2_DecodeLatin1

python - 如何将有关用户和密码的信息传递给命令 'flask db migrate'

python - Flask_login.current_user.is_authenticated 与 Flask-dance facebook.authorized

ruby - gem gosu 的 debian 依赖项

python - 将 Flask 应用程序部署到 Heroku - "Connection in Use"

apache2 - 如何在 Windows Server 2008 64 位上安装 mod_ssl

PHP 错误 500 和发布数据返回空字符串