【问题标题】:Django & wsgi - setting on debian 8Django & wsgi - 在 debian 8 上设置
【发布时间】:2016-09-27 10:48:30
【问题描述】:

我是 Django 新手,我想用 apache2 配置我的应用程序。我只是按照指南和其他问题进行操作,但我无法弄清楚! 我的简单配置文件sites-available/000-default.conf:

<VirtualHost *:80>
    WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py
    WSGIPythonPath /var/www/html/mysite

    <Directory /var/www/html/mysite/mysite>
    <Files wsgi.py>
    Require all granted
    </Files>
    </Directory>
</VirtualHost>

apache2重启后WSGIPythonPath

出现语法错误

如果我将 WSGIPythonPath 放在 apache2.conf 文件中,应用程序将无法运行。有什么问题?

我关注 https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/WSGIDaemonProcess 似乎不起作用

【问题讨论】:

  • 我不喜欢 apache :) 这就是为什么我要推荐你 nginx + uwsgi 或 nginx + gunicorn。它们非常易于配置
  • apache 在日志中说了什么?
  • 哦,我同意@sebb - nginx + uwsgi 性能相当好并且易于配置。
  • 您需要提供来自 Apache 错误日志或 Apache 在启动时显示的实际错误消息。在不知道确切的错误消息的情况下,实际上不可能推测出问题所在。如果整个 WSGIPythonPath 指令被 Apache 拒绝,这通常意味着 mod_wsgi 没有加载,因为有人已经指出了可能的解决方案。

标签: django webserver apache2


【解决方案1】:

需要检查的一些事项:您是否加载了 wsgi 模块?

LoadModule wsgi_module modules/mod_wsgi.so

同时在 Apache2 配置中寻找这个答案和潜在的陷阱:403 Forbidden error with Django and mod_wsgi

【讨论】:

    【解决方案2】:

    好的,推荐它不是很有帮助,所以这里是你的nginx和gunicorn的基本配置。

    为了简单起见,假设您的应用位于以下目录中:/home/root/app/src/,我们将使用 root 用户(但您应该为您的应用创建单独的用户)

    首先是你的 nginx。如果有一个名为default.conf 的文件,您必须将一个新文件插入到您的/etc/nginx/sites-enabled/yourapp.conf - 删除它。

    我正在发布一个 nginx conf 文件,它将尝试使用 gunicorn.sock 运行您的服务:

    upstream yourappname {
        server        unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
    }
    
    server {
        root        /home/root/app/src/;
    
        listen        80;
        server_name   yourdomain.com *.yourdomain.com
    
        charset       utf-8;
    
        client_max_body_size                        100m;
    
        access_log        /home/root/app/src/logs/nginx-access.log; #you have to have logs folder in src
        error_log         /home/root/app/src/logs/nginx-error.log;
    
        location /static/ {
            alias         /home/root/app/src/static/;
        }
    
    
        location /media/ {
            alias         /home/root/app/src/media/;
        }
    
    }
    

    现在使用 gunicorn 启动脚本。

    #!/bin/bash
    
    ME="root"
    DJANGODIR=/home/root/app/src
    SOCKFILE=/home/root/app/src/gunicorn.sock
    USER=root
    GROUP=webapps
    NUM_WORKERS=3
    DJANGO_SETTINGS_MODULE=yourapp.yoursettings
    DJANGO_WSGI_MODULE=yourapp.wsgi  
    echo "Starting $NAME as `whoami`"
    
    # Activate the virtual environment
    cd $DJANGODIR
    
    source /home/root/app/env/bin/activate
    export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
    export PYTHONPATH=$DJANGODIR:$PYTHONPATH
    
    # Create the run directory if it doesn't exist
    RUNDIR=$(dirname $SOCKFILE)
    test -d $RUNDIR || mkdir -p $RUNDIR
    
    # Start your Django Unicorn
    # Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
    exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
      --name root \
      --workers $NUM_WORKERS \
      --user=$USER --group=$GROUP \
      --bind=unix:$SOCKFILE \
      --log-level=debug \
      --log-file=-
    

    现在为了能够运行您的 gunicorn 启动脚本,它必须启用执行模型

    sudo chmod u+x gunicorn_start

    现在您只需使用 ./gunicorn_start 即可启动您的 gunicorn 服务器

    除此之外,我还会发布supervisor conf,它会在应用失败或系统启动时尝试启动您的应用。

    首先安装主管。 然后在你的主目录/etc/supervisor/conf.d/your_conf_file.conf创建一个.conf文件

    内插:

    [program:yourappname]
    command = /home/root/app/src/gunicorn_start
    user = root
    stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
    redirect_stderr = true
    

    因此,我们必须告诉我们的主管我们刚刚添加了新的配置文件。只需运行这些命令:

    sudo supervisorctl reread sudo supervisorctl update

    为了检查您的应用是否正常运行,只需运行

    sudo supervisorctl status yourappname

    希望对你有帮助,有什么问题可以问

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多