FlaskBB
A lightweight forum software in Flask
Member
Joined: Mar 01 2017
Posts: 2

I am trying to deploy flaskbb on an apache server in a subfolder (ex. example.com/flaskbb), but I get a page not found error for every request.

Here is my (sanitized) configuration file:

# This file has been automatically generated on Wednesday, 01. March 2017 at 14:54.
# Feel free to adjust it as needed.
import os
import datetime
from flaskbb.configs.default import DefaultConfig


# Flask Settings
# ------------------------------
# There is a whole bunch of more settings available here:
# http://flask.pocoo.org/docs/0.11/config/#builtin-configuration-values
DEBUG = True
TESTING = False

# Server Name - REQUIRED for Celery/Mailing
# The name and port number of the server.
# Required for subdomain support (e.g.: 'myapp.dev:5000') and
# URL generation without a request context but with an application context
# which we need in order to generate URLs (with the celery application)
# Note that localhost does not support subdomains so setting this to
# “localhost” does not help.
# Example for the FlaskBB forums: SERVER_NAME = "forums.flaskbb.org"
SERVER_NAME = "example.com:443"

# Prefer HTTPS over HTTP
PREFERRED_URL_SCHEME = "https"


# Database
# ------------------------------
SQLALCHEMY_DATABASE_URI = "mysql://user:password@localhost/flaskbb?charset=utf8"

# This option will be removed as soon as Flask-SQLAlchemy removes it.
# At the moment it is just used to suppress the super annoying warning
SQLALCHEMY_TRACK_MODIFICATIONS = False
# This will print all SQL statements
SQLALCHEMY_ECHO = False


# Security - IMPORTANT
# ------------------------------
# This is the secret key that is used for session signing.
# You can generate a secure key with os.urandom(24)
SECRET_KEY = "secret key"

# You can generate the WTF_CSRF_SECRET_KEY the same way as you have
# generated the SECRET_KEY. If no WTF_CSRF_SECRET_KEY is provided, it will
# use the SECRET_KEY.
WTF_CSRF_ENABLED = True
WTF_CSRF_SECRET_KEY = "csrf key"


# Auth
# ------------------------------
LOGIN_VIEW = "auth.login"
REAUTH_VIEW = "auth.reauth"
LOGIN_MESSAGE_CATEGORY = "info"
REFRESH_MESSAGE_CATEGORY = "info"

# The name of the cookie to store the “remember me” information in.
REMEMBER_COOKIE_NAME = "remember_token"
# The amount of time before the cookie expires, as a datetime.timedelta object.
# Default: 365 days (1 non-leap Gregorian year)
REMEMBER_COOKIE_DURATION = datetime.timedelta(days=365)
# If the “Remember Me” cookie should cross domains,
# set the domain value here (i.e. .example.com would allow the cookie
# to be used on all subdomains of example.com).
REMEMBER_COOKIE_DOMAIN = None
# Limits the “Remember Me” cookie to a certain path.
REMEMBER_COOKIE_PATH = "/"
# Restricts the “Remember Me” cookie’s scope to secure channels (typically HTTPS).
REMEMBER_COOKIE_SECURE = None
# Prevents the “Remember Me” cookie from being accessed by client-side scripts.
REMEMBER_COOKIE_HTTPONLY = False


# Full-Text-Search
# ------------------------------
# This will use the "whoosh_index" directory to store the search indexes
WHOOSHEE_DIR = os.path.join(DefaultConfig.basedir, "whoosh_index", DefaultConfig.py_version)
# How long should whooshee try to acquire write lock? (defaults to 2)
WHOOSHEE_WRITER_TIMEOUT = 2
# Minimum number of characters for the search (defaults to 3)
WHOOSHEE_MIN_STRING_LEN = 3


# Redis
# ------------------------------
# If redis is enabled, it can be used for:
#   - Sending non blocking emails via Celery (Task Queue)
#   - Caching
#   - Rate Limiting
REDIS_ENABLED = False
REDIS_URL = ""
REDIS_DATABASE = 0


# Celery
# ------------------------------
CELERY_BROKER_URL = ""
CELERY_RESULT_BACKEND = ""


# Rate Limiting
# -------------------------------
# A full list with configuration values is available at the flask-limiter
# docs, but you actually just need those settings below.
# You can disabled the Rate Limiter here as well - it will overwrite
# the setting from the admin panel!
# RATELIMIT_ENABLED = True
# You can choose from:
#   memory:// (default)
#   redis://host:port
#   memcached://host:port
# Using the redis storage requires the installation of the redis package,
# which will be installed if you enable REDIS_ENABLE while memcached
# relies on the pymemcache package.
RATELIMIT_STORAGE_URL = "memory://"


# Caching
# ------------------------------
# For all available caching types, have a look at the Flask-Cache docs
# https://pythonhosted.org/Flask-Caching/#configuring-flask-caching
CACHE_TYPE = "simple"
CACHE_DEFAULT_TIMEOUT = 60

# Local SMTP Server
MAIL_SERVER = "localhost"
MAIL_PORT = 25
MAIL_USE_SSL = False
MAIL_USE_TLS = False
MAIL_USERNAME = ""
MAIL_PASSWORD = ""
MAIL_DEFAULT_SENDER = ("FlaskBB Mailer", "sheybey@example.com")
# Where to logger should send the emails to
ADMINS = ["sheybey@example.com"]
# If SEND_LOGS is set to True, the admins (see the mail configuration) will
# recieve the error logs per email.
SEND_LOGS = False


# FlaskBB Settings
# ------------------------------ #
# URL Prefixes
FORUM_URL_PREFIX = ""
USER_URL_PREFIX = "/user"
MESSAGE_URL_PREFIX = "/message"
AUTH_URL_PREFIX = "/auth"
ADMIN_URL_PREFIX = "/admin"

Apache configuration snippet:

        WSGIDaemonProcess flaskapps user=flask group=flask threads=3
        # unrelated flask application under the same daemon process removed

        WSGIScriptAlias /flaskbb /var/www/flaskbb/app.wsgi
        <Directory /var/www/flaskbb>
                WSGIProcessGroup flaskapps
                WSGIApplicationGroup %{GLOBAL}
                Require all granted
        </Directory>

app.wsgi:

import sys, os
here = os.path.dirname(__file__)
activate_this = os.path.join(here, '.venv', 'bin', 'activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, here)

# https://pypi.python.org/pypi/umysqldb/1.0.3
import umysqldb
umysqldb.install_as_MySQLdb()

from flaskbb import create_app

# will throw an error if the config doesn't exist
application = create_app(config=os.path.join(here, "flaskbb.cfg"))

I tried setting FORUM_URL_PREFIX to "/flaskbb", but that caused all generated links to be doubled ("/flaskbb/flaskbb/...") and all urls still 404'd.
Is there any support for this kind of setup? Am I doing anything obviously wrong?

Member
Joined: Mar 01 2017
Posts: 2

Figured out the issue. Removing the port number from the server name in the flaskbb configuration was all I needed to do.

Administrator
avatar
Joined: Jul 09 2015
Posts: 122

sheybey wrote:

Figured out the issue. Removing the port number from the server name in the flaskbb configuration was all I needed to do.

Sorry for my late repsonse. I probably wouldn't have catched that. I would have suggested adding the 'SCRIPT_NAME /flaskbb' to the header in apache.

Like this:
RequestHeader set X-SCRIPT-NAME /flaskbb

more info here: https://wsgi.readthedocs.io/en/latest/definitions.html#envvar-SCRIPT_NAME