Search code examples
pythonwsgibottlevesta

On vestacp, apache2, mod_wsgi, python web app (bottle framework)


I am trying to deploy a bottle application using the vestacp panel. I keep getting a 500 error, and apparently this is due to incorrect server settings. I have three configuration files:

  • wsgi.sh (for this file I did not find configuration information, apparently it is not correctly configured, for django by default)
# Adding php wrapper
user="$1"
domain="$2"
ip="$3"
home_dir="$4"
docroot="$5"

echo "# Wsgi template
AddHandler wsgi-script .wsgi

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.$2\.ru\$ [NC]
RewriteRule ^(.*)\$ http://$2/\$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\$ /django.wsgi/\$1 [QSA,PT,L]
" > $docroot/.htaccess
chown $user:$user $docroot/.htaccess


echo "import os, sys
sys.path.insert(0, '$home_dir/$user/web/$domain/private/django/$domain/env/lib/python2.6/site-packages')
sys.path.insert(0, '$home_dir/$user/web/$domain/private/django/$domain/project/src/shared/')
sys.path.insert(0, '$home_dir/$user/web/$domain/private/django/$domain/project/src/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'main.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()" > $docroot/django.wsgi
chown $user:$user $docroot/django.wsgi

exit 0
  • wsgi.stpl (I tried to edit this file but was unsuccessful)
    <VirtualHost %ip%:%web_ssl_port%>

    ServerName %domain_idn%
    %alias_string%
    ServerAdmin %email%
    DocumentRoot %sdocroot%
    ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
    Alias /vstats/ %home%/%user%/web/%domain%/stats/
    Alias /error/ %home%/%user%/web/%domain%/document_errors/
    SuexecUserGroup %user% %group%
    CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
    CustomLog /var/log/%web_system%/domains/%domain%.log combined
    ErrorLog /var/log/%web_system%/domains/%domain%.error.log
    <Directory %home%/%user%/web/%domain%/stats>
        AllowOverride All
    </Directory>
    SSLEngine on
    SSLVerifyClient none
    SSLCertificateFile %ssl_crt%
    SSLCertificateKeyFile %ssl_key%
    %ssl_ca_str%SSLCertificateChainFile %ssl_ca%

    <IfModule mod_ruid2.c>
        RMode config
        RUidGid %user% %group%
        RGroups www-data
    </IfModule>
    <IfModule itk.c>
        AssignUserID %user% %group%
    </IfModule>
    <IfModule mod_wsgi.c>
        WSGIDaemonProcess apx-s$domain% user=%user% group=%user% processes=1 threads=5 display-name=%{GROUP} python-path=%home%/%user%/web/%domain%$        
WSGIProcessGroup apx-idea
        WSGIApplicationGroup %{GLOBAL}
    </IfModule>

    <Directory %sdocroot%>
        AllowOverride FileInfo
        Options ExecCGI Indexes
        MultiviewsMatch Handlers
        Options +FollowSymLinks
        Order allow,deny
        Allow from all
    </Directory>

    IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf*

</VirtualHost>
  • wsgi.tpl
<VirtualHost %ip%:%web_port%>

    ServerName %domain_idn%
    %alias_string%
    ServerAdmin %email%
    DocumentRoot %docroot%
    ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
    Alias /vstats/ %home%/%user%/web/%domain%/stats/
    Alias /error/ %home%/%user%/web/%domain%/document_errors/
    SuexecUserGroup %user% %group%
    CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
    CustomLog /var/log/%web_system%/domains/%domain%.log combined
    ErrorLog /var/log/%web_system%/domains/%domain%.error.log
    <Directory %home%/%user%/web/%domain%/stats>
        AllowOverride All
    </Directory>

    <IfModule mod_ruid2.c>
        RMode config
        RUidGid %user% %group%
        RGroups www-data
    </IfModule>
    <IfModule itk.c>
        AssignUserID %user% %group%
    </IfModule>
    <Directory %docroot%>
        AllowOverride FileInfo
        Options ExecCGI Indexes
        MultiviewsMatch Handlers
        Options +FollowSymLinks
        Order allow,deny
        Allow from all
    </Directory>

    Include %home%/%user%/conf/web/%web_system%.%domain%.conf*

</VirtualHost>

the application launch file (wsgi.py) looks like this:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import bottle
import os
import sys

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.chdir(os.path.dirname(os.path.abspath(__file__)))

"""С этого файла запускается программа"""
application = bottle.default_app()

Ожидается что настройка конфигурации приведет к сообщению о том что нет определенной директории "/", а не к ошибки 500.

Error: 404 Not Found
Sorry, the requested URL 'https://some.url/' caused an error:

Not found: '/'

The server is running debian 9, vestacp is the latest version at the time of writing. Used this instruction to configure wsgi_mod https://forum.vestacp.com/viewtopic.php?t=10867


Solution

  • Ok it's work with this instructions https://forum.vestacp.com/viewtopic.php?t=18352#p76197 and:

    • wsgi.stpl
    <VirtualHost %ip%:%web_ssl_port%>
    
        ServerName %domain_idn%
        %alias_string%
        ServerAdmin %email%
        DocumentRoot %sdocroot%
        ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
        Alias /vstats/ %home%/%user%/web/%domain%/stats/
        Alias /error/ %home%/%user%/web/%domain%/document_errors/
        SuexecUserGroup %user% %group%
        CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
        CustomLog /var/log/%web_system%/domains/%domain%.log combined
        ErrorLog /var/log/%web_system%/domains/%domain%.error.log
        <Directory %home%/%user%/web/%domain%/stats>
            AllowOverride All
        </Directory>
    
        SSLEngine on
        SSLVerifyClient none
        SSLCertificateFile %ssl_crt%
        SSLCertificateKeyFile %ssl_key%
        %ssl_ca_str%SSLCertificateChainFile %ssl_ca%
    
        <IfModule mod_ruid2.c>
            RMode config
            RUidGid %user% %group%
            RGroups www-data
        </IfModule>
        <IfModule itk.c>
            AssignUserID %user% %group%
        </IfModule>
        <IfModule mod_wsgi.c>
            WSGIDaemonProcess apps-%domain% user=%user% group=%user% processes=1 threads=5 display-name=%{GROUP} python-home=%home%/%user%/web/%domain%/private/venv/ python-path=%home%/%user%/web/%domain%/private/%domain% socket-user=%user%
            WSGIProcessGroup apps-%domain%
            WSGIApplicationGroup %{GLOBAL}
            WSGIScriptAlias / %home%/%user%/web/%domain%/private/%domain%/PROJECTAPP/wsgi.py process-group=apps-%domain% application-group=%{GLOBAL}
        </IfModule>
    
        Alias /robots.txt %home%/%user%/web/%domain%/private/%domain%/static/robots.txt
        Alias /favicon.ico %home%/%user%/web/%domain%/private/%domain%/static/favicon.ico
    
        Alias /media/ %home%/%user%/web/%domain%/private/%domain%/media/
        Alias /static/ %home%/%user%/web/%domain%/private/%domain%/static/
    
        <Directory %home%/%user%/web/%domain%/private/%domain%/static>
            Require all granted
        </Directory>
    
        <Directory %home%/%user%/web/%domain%/private/%domain%/media>
            Require all granted
        </Directory>
    
        <Directory %sdocroot%>
            AllowOverride FileInfo
            Options ExecCGI Indexes
            MultiviewsMatch Handlers
            Options +FollowSymLinks
            Order allow,deny
            Allow from all
        </Directory>
    
    #    <Directory %home%/%user%/web/%domain%/private/%domain%/PROJECTAPP>
    #        <Files wsgi.py>
    #            Require all granted
    #        </Files>
    #    </Directory>
    
        IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.ssl.conf*
    
    </VirtualHost>
    
    
    
    • wsgi.tpl
    <VirtualHost %ip%:%web_port%>
    
        ServerName %domain_idn%
        %alias_string%
        ServerAdmin %email%
        DocumentRoot %docroot%
        ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/
        Alias /vstats/ %home%/%user%/web/%domain%/stats/
        Alias /error/ %home%/%user%/web/%domain%/document_errors/
        SuexecUserGroup %user% %group%
        CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
        CustomLog /var/log/%web_system%/domains/%domain%.log combined
        ErrorLog /var/log/%web_system%/domains/%domain%.error.log
        <Directory %home%/%user%/web/%domain%/stats>
            AllowOverride All
        </Directory>
    
        <IfModule mod_ruid2.c>
            RMode config
            RUidGid %user% %group%
            RGroups www-data
        </IfModule>
        <IfModule itk.c>
            AssignUserID %user% %group%
        </IfModule>
        <IfModule mod_wsgi.c>
            WSGIDaemonProcess app-%domain% user=%user% group=%user% processes=1 threads=5 display-name=%{GROUP} python-home=%home%/%user%/web/%domain%/private/venv/ python-path=%home%/%user%/web/%domain%/private/%domain% socket-user=%user%
            WSGIProcessGroup app-%domain%
            WSGIApplicationGroup %{GLOBAL}
            WSGIScriptAlias / %home%/%user%/web/%domain%/private/%domain%/PROJECTAPP/wsgi.py process-group=app-%domain% application-group=%{GLOBAL}
        </IfModule>
    
        Alias /robots.txt %home%/%user%/web/%domain%/private/%domain%/static/robots.txt
        Alias /favicon.ico %home%/%user%/web/%domain%/private/%domain%/static/favicon.ico
    
        Alias /media/ %home%/%user%/web/%domain%/private/%domain%/media/
        Alias /static/ %home%/%user%/web/%domain%/private/%domain%/static/
    
        <Directory %home%/%user%/web/%domain%/private/%domain%/static>
            Require all granted
        </Directory>
    
        <Directory %home%/%user%/web/%domain%/private/%domain%/media>
            Require all granted
        </Directory>
    
        <Directory %docroot%>
            AllowOverride FileInfo
            Options ExecCGI Indexes
            MultiviewsMatch Handlers
            Options +FollowSymLinks
            Order allow,deny
            Allow from all
        </Directory>
    
    #    <Directory %home%/%user%/web/%domain%/private/%domain%/PROJECTAPP>
    #        <Files wsgi.py>
    #            Require all granted
    #        </Files>
    #    </Directory>
    
        IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf*
    
    </VirtualHost>