【问题标题】:hosting multiple Flask apps for unique domains为唯一域托管多个 Flask 应用程序
【发布时间】:2018-04-16 17:53:49
【问题描述】:

我有两个独特的域(例如 domain1.comdomain2.com)。我正在尝试使用 Flask 在一个 linode 服务器(例如12.34.567.890)上托管两个独特的网页(通过两个单独的烧瓶应用程序)。

目前,domain1.com 有效,但domain2.com 给了我 Apache2 默认页面。

这是我目前所拥有的:

等\apache2\ports.conf:

Listen 80
Listen 8080

<IfModule ssl_module>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet


etc\apache2\sites-available\000-default.conf:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:8080>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


etc\apache2\sites-available\FlaskApp.conf:

<VirtualHost *:80>
            ServerName domain1.com
            ServerAdmin admin@email.com
            WSGIScriptAlias / /var/www/AppOne/flaskapp.wsgi
            <Directory /var/www/AppOne/FlaskApp/>
                    Order allow,deny
                    Allow from all
            </Directory>
            Alias /static /var/www/AppOne/FlaskApp/static
            <Directory /var/www/AppOne/FlaskApp/static/>
                    Order allow,deny
                    Allow from all
            </Directory>
            ErrorLog ${APACHE_LOG_DIR}/error.log
            LogLevel warn
            CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:8080>
            ServerName domain2.com
            ServerAdmin admin@email.com
            WSGIScriptAlias / /var/www/AppTwo/flaskapp.wsgi
            <Directory /var/www/AppTwo/FlaskApp/>
                    Order allow,deny
                    Allow from all
            </Directory>
            Alias /static /var/www/AppTwo/FlaskApp/static
            <Directory /var/www/AppTwo/FlaskApp/static/>
                    Order allow,deny
                    Allow from all
            </Directory>
            ErrorLog ${APACHE_LOG_DIR}/error.log
            LogLevel warn
            CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


__init__.py 对于每个应用程序都是相同的(但在不同的目录中):

from flask import Flask, render_template, flash, request, url_for, redirect, session
from content_management import Content
#...etc...
import gc

TOPIC_DICT = Content()

app = Flask(__name__)

@app.route('/')
def homepage():
    return render_template("home.html")

if __name__ == "__main__":
    app.run()


\var\www\ 目录如下所示:

\var\www
|
└─── AppOne
|    |    flaskapp.wsgi
|    |
|    └─── FlaskApp
|         |  __init__.py
|         |
|         └─── static
|         └─── templates
|         |        home.html
|         |
|         └─── venv
|
└─── AppTwo                  #same as AppOne
     |    flaskapp.wsgi
     |
     └─── FlaskApp
          |  __init__.py
          |
          └─── static
          └─── templates
          |        home.html
          |
          └─── venv

对不起,如果我有点冗长,但任何指导都会有所帮助!

【问题讨论】:

    标签: python apache flask dns virtualhost


    【解决方案1】:

    无需监听 8080 端口。AppTwo 的 WSGI 文件没有指向正确的目录。

    ports.conf:

    Listen 80
    
    <IfModule ssl_module>
        Listen 443
    </IfModule>
    
    <IfModule mod_gnutls.c>
        Listen 443
    </IfModule>
    


    000-default.conf:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    


    FlaskApp.conf:

    <VirtualHost *:80>
            ServerName domain1.com
            ServerAdmin admin@email.com
            WSGIScriptAlias / /var/www/AppOne/flaskapp.wsgi
            <Directory /var/www/AppOne/FlaskApp/>
                    Order allow,deny
                    Allow from all
            </Directory>
            Alias /static /var/www/AppOne/FlaskApp/static
            <Directory /var/www/AppOne/FlaskApp/static/>
                    Order allow,deny
                    Allow from all
            </Directory>
            ErrorLog ${APACHE_LOG_DIR}/error.log
            LogLevel warn
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
    <VirtualHost *:80>
            ServerName domain2.com
            ServerAdmin admin@email.com
            WSGIScriptAlias / /var/www/AppTwo/flaskapp.wsgi
            <Directory /var/www/AppTwo/FlaskApp/>
                    Order allow,deny
                    Allow from all
            </Directory>
            Alias /static /var/www/AppTwo/FlaskApp/static
            <Directory /var/www/AppTwo/FlaskApp/static/>
                    Order allow,deny
                    Allow from all
            </Directory>
            ErrorLog ${APACHE_LOG_DIR}/error.log
            LogLevel warn
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    


    AppOne/flaskapp.wsgi:

    import sys
    import logging
    logging.basicConfig(stream=sys.stderr)
    sys.path.insert(0,"/var/www/AppOne/")
    
    from FlaskApp import app as application
    application.secret_key = 'PasswordGoesHere'
    


    AppTwo/flaskapp.wsgi:

    import sys
    import logging
    logging.basicConfig(stream=sys.stderr)
    sys.path.insert(0,"/var/www/AppTwo/")
    
    from FlaskApp import app as application
    application.secret_key = 'PasswordGoesHere'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2018-11-15
      相关资源
      最近更新 更多