I am trying to run a Flask website using Apache2 on Ubuntu 22.04, but I'm getting an error when I try to go to the website. I get a 500 Internal Server Error. I posted the error logs down below. If I run the __init__.py file directly with python3 __init__.py, it works. However with systemctl start apache2, it gives the error.
The file structure:
Flaskapp/Flaskapp/
__init__.py
static
templates
main.py
flaskapp.wsgi
Error:
[Thu Dec 01 15:51:15.649651 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] mod_wsgi (pid=1261): Failed to exec Python script file '/var/www/FlaskApp/flaskapp.wsgi'.
[Thu Dec 01 15:51:15.649689 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] mod_wsgi (pid=1261): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'.
[Thu Dec 01 15:51:15.649818 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] Traceback (most recent call last):
[Thu Dec 01 15:51:15.649833 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] File "/var/www/FlaskApp/flaskapp.wsgi", line 7, in <module>
[Thu Dec 01 15:51:15.649835 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] from FlaskApp import app as application
[Thu Dec 01 15:51:15.649839 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] File "/var/www/FlaskApp/FlaskApp/__init__.py", line 8, in <module>
[Thu Dec 01 15:51:15.649841 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] import main
[Thu Dec 01 15:51:15.649850 2022] [wsgi:error] [pid 1261:tid 139847272486464] [client 145.28.163.210:50244] ModuleNotFoundError: No module named 'main'
The imports in __init__.py:
from flask import Flask, session, render_template, redirect, request, make_response
import os
import jinja2
import main
import ai
import api
import settings
import database
import time
import base64
The wsgi file:
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
from FlaskApp import app as application
application.secret_key = 'something super SUPER secret'
The FlaskApp.conf file:
<VirtualHost *:80>
ServerName vps-29.sgrt.nl
ServerAdmin youemail#email.com
WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/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>
Can someone tell me what I'm doing wrong? I tried changing the file names of main.py and the __init__.py files. Which did nothing. I checked the python versions, and they are both Python3.10.
I have no clue what I'm doing wrong, so someone, please help.
Related
I'm trying to run a simple Flask web app that displays a pygal graph. When I run it with the python development server, the application runs fine. However, when I try to run it in apache2, I get the following error:
[Thu Dec 10 19:55:22.745469 2020] [wsgi:error] [pid 17741] [client ::1:34366] mod_wsgi (pid=17741): Failed to exec Python script file '/var/www/FlaskApp/FlaskApp.wsgi'.
[Thu Dec 10 19:55:22.745521 2020] [wsgi:error] [pid 17741] [client ::1:34366] mod_wsgi (pid=17741): Exception occurred processing WSGI script '/var/www/FlaskApp/FlaskApp.wsgi'.
[Thu Dec 10 19:55:22.745553 2020] [wsgi:error] [pid 17741] [client ::1:34366] Traceback (most recent call last):
[Thu Dec 10 19:55:22.745586 2020] [wsgi:error] [pid 17741] [client ::1:34366] File "/var/www/FlaskApp/FlaskApp.wsgi", line 8, in <module>
[Thu Dec 10 19:55:22.745650 2020] [wsgi:error] [pid 17741] [client ::1:34366] from FlaskApp import app as application
[Thu Dec 10 19:55:22.745665 2020] [wsgi:error] [pid 17741] [client ::1:34366] File "/var/www/FlaskApp/FlaskApp/__init__.py", line 2, in <module>
[Thu Dec 10 19:55:22.745707 2020] [wsgi:error] [pid 17741] [client ::1:34366] import pygal
[Thu Dec 10 19:55:22.745723 2020] [wsgi:error] [pid 17741] [client ::1:34366] File "/var/www/FlaskApp/FlaskApp/venv/lib/python3.8/site-packages/pygal/__init__.py", line 28, in <module>
[Thu Dec 10 19:55:22.745786 2020] [wsgi:error] [pid 17741] [client ::1:34366] import pkg_resources
[Thu Dec 10 19:55:22.745838 2020] [wsgi:error] [pid 17741] [client ::1:34366] File "/var/www/FlaskApp/FlaskApp/venv/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1365
[Thu Dec 10 19:55:22.745850 2020] [wsgi:error] [pid 17741] [client ::1:34366] raise SyntaxError(e) from e
[Thu Dec 10 19:55:22.745857 2020] [wsgi:error] [pid 17741] [client ::1:34366] ^
[Thu Dec 10 19:55:22.745864 2020] [wsgi:error] [pid 17741] [client ::1:34366] SyntaxError: invalid syntax
Here is the code that I'm running
# -*- coding: utf-8 -*-
import pygal
from flask import Flask, Response
app = Flask(__name__)
#app.route('/')
def index():
""" render svg on html """
return """
<html>
<body>
<h1>hello pygal</h1>
<figure>
<embed type="image/svg+xml" src="/graph/" />
</figure>
</body>
</html>'
"""
#app.route('/graph/')
def graph():
""" render svg graph """
bar_chart = pygal.Bar()
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
return Response(response=bar_chart.render(), content_type='image/svg+xml')
if __name__ == '__main__':
app.run()
(Note that this code is just a sample copied from github)
Here is my apache site configuration:
<VirtualHost *:443>
ServerName flaskapp.localhost
ServerAdmin me#email.com
WSGIScriptAlias / /var/www/FlaskApp/FlaskApp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/FlaskApp/static/>
Order allow,deny
Allow from all
</Directory>
DocumentRoot /var/www/FlaskApp
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
ErrorLog ${APACHE_LOG_DIR}/FlaskApp-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/FlaskApp-access.log combined
AddDefaultCharset utf-8
</VirtualHost>
Here is my wsgi file:
python_home = '/var/www/FlaskApp/FlaskApp/venv'
activate_this = python_home + '/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
sys.path.insert(0,"/var/www/FlaskApp/FlaskApp/venv/lib/python3.8/site-packages/")
from FlaskApp import app as application
application.secret_key = 'secret key stuff'
Here are some details about my environment:
Ubuntu 20.04.1 LTS
Apache/2.4.41 (Ubuntu)
Python 3.8.5 (installed in a virtual environment)
Any thoughts would be greatly appreciated!
It appears that the python interpreter is compiled into the mod_wsgi.so file. An old version, that included python2, was being pointed to by Apache. To fix it I did the following:
Removed the old version of mod_wsgi by doing sudo apt-get remove libapache2-mod-wsgi
modified /etc/apache2/mods-available/mod_wsgi.load to point to the library (.so) file in my virtual environment. The contents of mod_wsgi looked like this:
LoadModule wsgi_module /var/www/FlaskApp/FlaskApp/venv/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so
I suspect that modifying it here points all Apache virtual hosts to this python virtual environment, which isn't really ideal. It would be better if each Apache virtual host pointed to its own python environment.
Modified my wsgi file to work with the new version of python. Here are the contents:
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
sys.path.insert(0,"/var/www/FlaskApp/FlaskApp/venv/lib/python3.8/site-packages/")
from FlaskApp import app as application
application.secret_key = 'secret key stuff'
Changed the local imports in my __init__.py file to be preceeded by a dot(.)
Following these changes the site is now working as expected.
I have been trying to solve this error but I am not been able to solve, totally frustrated because I have tried every single answer on these related question , any help would be appreciated.
My configuration of VPS server
Ubuntu 18.04
django 2.2.5
apache 2.4.49
python 3.6(virtualenv)
libapache2-mod-wsgi-py3
My folder structure is:
/var/www/dataforze/prediction_project/venv (virtualenv folder)
bin
include
lib
/var/www/dataforze/prediction_project
|- manage.py
static
venv
prediction_project
|__init__.py
|settings.py
|urls.py
|wsgi.py
000-default.conf file code
<VirtualHost *:80>
<Directory /var/www/dataforze/prediction_project/prediction_project>
Require all granted
</Directory>
<Directory /var/www/dataforze/prediction_project/prediction_project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess prediction_project python-path=/var/www/dataforze/prediction_project python-home=/var/www/dataforze/prediction_project/venv
WSGIProcessGroup prediction_project
WSGIScriptAlias / /var/www/dataforze/prediction_project/prediction_project/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/mysite_error.log
LogLevel warn
</VirtualHost>
my wsgi.py file code
import os
from django.core.wsgi import get_wsgi_application
sys.path.append('/var/www/dataforze/prediction_project/prediction_project')
# add the virtualenv site-packages path to the sys.path
sys.path.append('/var/www/dataforze/prediction_project/venv/lib/site-packages')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'prediction_project.settings')
application = get_wsgi_application()
My server logs
[Wed Mar 18 17:29:01.003624 2020] [wsgi:error] [pid 82169:tid 140431942575872] mod_wsgi (pid=82169): Target WSGI script '/var/www/dataforze/prediction_project/prediction_project/wsgi.py' cannot be loaded as Python module.
[Wed Mar 18 17:29:01.003722 2020] [wsgi:error] [pid 82169:tid 140431942575872] mod_wsgi (pid=82169): Exception occurred processing WSGI script '/var/www/dataforze/prediction_project/prediction_project/wsgi.py'.
[Wed Mar 18 17:29:01.003823 2020] [wsgi:error] [pid 82169:tid 140431942575872] Traceback (most recent call last):
[Wed Mar 18 17:29:01.003844 2020] [wsgi:error] [pid 82169:tid 140431942575872] File "/var/www/dataforze/prediction_project/prediction_project/wsgi.py", line 12, in <module>
[Wed Mar 18 17:29:01.003849 2020] [wsgi:error] [pid 82169:tid 140431942575872] from django.core.wsgi import get_wsgi_application
[Wed Mar 18 17:29:01.003864 2020] [wsgi:error] [pid 82169:tid 140431942575872] ModuleNotFoundError: No module named 'django'
I'm trying run flask on apache server and following the instructions on
this page but getting No module named 'flask' error
here's error.log
[Tue Aug 14 20:53:59.945197 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] mod_wsgi (pid=16744): Target WSGI script '/var/www/FlaskApp/FlaskApp/flask-admin/examples/forms/flaskapp.wsgi' cannot be loaded as Python module.
[Tue Aug 14 20:53:59.945263 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] mod_wsgi (pid=16744): Exception occurred processing WSGI script '/var/www/FlaskApp/FlaskApp/flask-admin/examples/forms/flaskapp.wsgi'.
[Tue Aug 14 20:53:59.945394 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] Traceback (most recent call last):
[Tue Aug 14 20:53:59.945425 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] File "/var/www/FlaskApp/FlaskApp/flask-admin/examples/forms/flaskapp.wsgi", line 8, in <module>
[Tue Aug 14 20:53:59.945431 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] from app123 import app as application
[Tue Aug 14 20:53:59.945438 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] File "/var/www/FlaskApp/FlaskApp/flask-admin/examples/forms/app123.py", line 4, in <module>
[Tue Aug 14 20:53:59.945442 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] from flask import Flask, url_for, flash
[Tue Aug 14 20:53:59.945466 2018] [wsgi:error] [pid 16744] [remote 189.46.121.20:52032] ModuleNotFoundError: No module named 'flask'
FlaskApp.conf file:
<VirtualHost *:80>
ServerName 1**.1**.**.**
WSGIDaemonProcess app123
WSGIScriptAlias / /var/www/FlaskApp/FlaskApp/flask-admin/examples/forms/flaskapp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/flask-admin/examples/forms>
WSGIProcessGroup app123
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
wsgi - file:
#!/usr/bin/python3
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/FlaskApp/flask-admin/examples/forms/")
#from FlaskApp
from app123 import app as application
application.secret_key = 'j****'
activate_this = 'py3env/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
and the app123.py file is the simple flask-admin example with forms. Absolutely the same. So, the question is: where is the problem?
I'm trying to configure Apache to delploy my Flask app. It works if i run command "python flaskapp.py", but with Apache it can not import internal module Tools
This is my flask app
from flask import Flask
app = Flask(__name__)
import sys
sys.path.append('tools')
import Tools #if i comment this line, not error display and app works ok!
#app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
This is my .conf file
<VirtualHost *:80>
ServerAdmin webmaster#localhost
DocumentRoot /var/www/html
WSGIDaemonProcess flaskapp python-path=/var/www/html/flaskapp
WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi process-group=flaskapp application-group=%{GLOBAL}
<Directory /var/www/html/flaskapp>
<Files flaskapp.wsgi>
Order allow,deny
Allow from all
</Files>
</Directory>
Alias /static /var/www/html/flaskapp/static
<Directory /var/www/html/flaskapp/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
My wsgi file
import sys
sys.path.insert(0, '/var/www/html/flaskapp')
from flaskapp import app as application
My app folders ar /var/www/html/
flaskapp/
-flaskapp.py
-flaskapp.wsgi
-static/
-templates/
-tools/
-Tools.py
Error log
[Thu Mar 09 18:23:23.634661 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] mod_wsgi (pid=3711): Target WSGI script '/var/www/html/flaskapp/flaskapp.wsgi' cannot be loaded as Python module.
[Thu Mar 09 18:23:23.634694 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] mod_wsgi (pid=3711): Exception occurred processing WSGI script '/var/www/html/flaskapp/flaskapp.wsgi'.
[Thu Mar 09 18:23:23.634719 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] Traceback (most recent call last):
[Thu Mar 09 18:23:23.634734 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] File "/var/www/html/flaskapp/flaskapp.wsgi", line 4, in <module>
[Thu Mar 09 18:23:23.634755 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] from flaskapp import app as application
[Thu Mar 09 18:23:23.634762 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] File "/var/www/html/flaskapp/flaskapp.py", line 6, in <module>
[Thu Mar 09 18:23:23.634771 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] import Tools
[Thu Mar 09 18:23:23.634783 2017] [wsgi:error] [pid 3711:tid 140422583609088] [remote 200.69.225.201:9142] ImportError: No module named Tools
I'm trying to deploy Flask app via Apache2 but I'm getting No module named app error. I'm also using virtualenv
planer(Flask app)
(venv)jdoe#jdoe-virtual-machine:/var/www/planer$ la
app.py forms.py .git helpers.py __init__.py main.pyc models.pyc README.md setup.cfg templates views.py
app.pyc forms.pyc .gitignore helpers.pyc main.py models.py planer.wsgi requirements.txt static venv views.pyc
planer.conf
<VirtualHost *:80>
ServerName planer.dev
ServerAdmin admin#mywebsite.com
WSGIScriptAlias / /var/www/planer/planer.wsgi
<Directory /var/www/planer/planer/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/planer/static
<Directory /var/www/planer/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
planer.wsgi
import sys, os
sys.path.insert (0,'/var/www/planer')
sys.path = [
'/var/www/planer/venv/lib/python2.7/lib-dynload',
'/usr/lib/python2.7',
]
activate_this = '/var/www/planer/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import app as application
error
[Wed Jan 06 09:45:29.781102 2016] [:error] [pid 20727] [client 127.0.0.1:42448] mod_wsgi (pid=20727): Target WSGI script '/var/www/planer/planer.wsgi' cannot be loaded as Python module.
[Wed Jan 06 09:45:29.781137 2016] [:error] [pid 20727] [client 127.0.0.1:42448] mod_wsgi (pid=20727): Exception occurred processing WSGI script '/var/www/planer/planer.wsgi'.
[Wed Jan 06 09:45:29.781208 2016] [:error] [pid 20727] [client 127.0.0.1:42448] Traceback (most recent call last):
[Wed Jan 06 09:45:29.781235 2016] [:error] [pid 20727] [client 127.0.0.1:42448] File "/var/www/planer/planer.wsgi", line 12, in <module>
[Wed Jan 06 09:45:29.781302 2016] [:error] [pid 20727] [client 127.0.0.1:42448] import app as application
[Wed Jan 06 09:45:29.781327 2016] [:error] [pid 20727] [client 127.0.0.1:42448] ImportError: No module named app
Make sure the .wsgi file is executable:
sudo chmod a+x planer.wsgi
And try to load it with this:
python /absolute/path/to/planer.wsgi