====== Flask ======
===== Python3 + Flask + WSGI + Apache =====
==== System ====
Used: Debian 9.5
apt install libapache2-mod-wsgi-py3
==== Directory Structure ====
/
├── etc/
│ └── apache2/
│ └── sites-enabled/
│ └── www.example.com.conf
└ opt/
└── python/
└── myapp/
├── app.wsgi
├── config.py
├── requirements.txt
├── run.py
├── app/
│ ├── __init__.py
│ ├── auth/
│ │ ├── __init__.py
│ │ └── routes.py
│ ├── errors/
│ │ ├── handlers.py
│ │ └── __init__.py
│ ├── main/
│ │ ├── __init__.py
│ │ └── routes.py
│ ├── models.py
│ ├── static/
│ │ ├── favicon.ico
│ │ ├── logo.png
│ │ └── main.min.css
│ └── templates/
│ ├── base.html
│ └── login.html
├── data/
│ └── miscdata.xml
├── log/
│ └── app.log
└── venv/
==== Apache ====
/etc/apache2/sites-enabled/www.example.com.conf
ServerName www.example.com
ServerAdmin hostmaster@example.com
DocumentRoot /var/www/example.com/www
ErrorLog ${APACHE_LOG_DIR}/www.example.com-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/www.example.com-access.log combined
SSLEngine on
SSLCertificateFile /etc/dehydrated/certs/example.com/fullchain.pem
SSLCertificateKeyFile /etc/dehydrated/certs/example.com/privkey.pem
WSGIDaemonProcess myapp user=www-data group=www-data threads=5 python-home=/opt/python/myapp/venv python-path=/opt/python/myapp/:/opt/python/myapp/venv/lib/python3.5/site-packages/
WSGIProcessGroup myapp
WSGIScriptAlias /myapp /opt/python/myapp/app.wsgi
Require all granted
==== App ====
mkdir -p /opt/python/myapp/{data,log,app}
mkdir -p /opt/python/myapp/app/{static,templates}
Put your files to /opt/python/myapp/app/.
==== WSGI ====
/opt/python/myapp/myapp/app.wsgi
from app import create_app
application = create_app("production")
==== venv ====
cd /opt/python/myapp/
python3 -m venv venv
. venv/bin/activate
pip install wheel
pip install Flask
pip install Flask-Login
Create a requirements.txt for reinstalling the pip packages.
pip freeze > requirements.txt
==== Access ====
[[https://www.example.com/myapp/]]