【问题标题】:Not able to access server when invoking gunicorn via .bash file通过 .bash 文件调用 gunicorn 时无法访问服务器
【发布时间】:2018-03-27 18:50:23
【问题描述】:

通过我制作的 .bash 文件启动 gunicorn 时,我无法访问服务器。当我使用此命令手动执行此操作时,它可以工作

$ gunicorn project.wsgi:application --bind 192.168.1.130:8000

根据教程创建了一个 gunicorn.bash 文件。我看起来像这样,并且运行良好。

#!/bin/bash

NAME="project"                                                   # Name of the application
DJANGODIR=/home/username/projects/project                    # Django project directory
SOCKFILE=/home/username/.venvs/project/run/gunicorn.sock     # We will communicate using this unix socket
USER=username                                              # the user to run as
GROUP=username                                             # the group to run as
NUM_WORKERS=1                                                   # how many worker processes shoul Gunicorn spawn
DJANGO_SETTINGS_MODULE=project.settings.production               # which settings file should Django use
DJANGO_WSGI_MODULE=project.wsgi                                  # WSGI module name
echo "Starting $NAME as `whoami`"

# Activate the virtual environment

cd $DJANGODIR
source /home/username/.venvs/project/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

# Create the run directory if it doesn't exsist

RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

# Start yout Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use daemon)

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \
  --log-file=-

我不知道如何解决这个问题?也许一些命令可以查看运行设置与手动启动 gunicorn 和 .bash 文件有什么不同?

【问题讨论】:

  • 你之前的问题我不是已经给你答案了吗?
  • 哦。再次包括我的错字。固定的。不,它正在运行。但使用 .bash 文件时无法访问网站。当我在上面输入 gunicorn 命令时它可以工作。由于这是另一个问题,我认为最好提出一个新问题而不是继续另一个问题。

标签: python django server gunicorn


【解决方案1】:
$ gunicorn project.wsgi:application --bind 192.168.1.130:8000

您在上面使用--bindhost:port,但在下面:

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \
  --log-file=-

你指定unix:file,这将使你的gunicorn监听unix套接字文件而不是你的网络接口:端口,所以只需将unix:$SOCKFILE替换为192.168.1.130:8000,它应该可以按预期访问

此外,您可以尝试使用curl (curl --unix-socket /path/to/socket http:/some/resurce) 或您选择的其他工具连接到当前配置,以验证它是否实际运行

【讨论】:

  • 好的。我正在关注教程,并且都提到了这种方式。我搜索了对此的解释。但似乎找不到任何可以解释的东西,所以我明白了。从 SOCKFILE 更改为 IP:PORT 时,我是否忽略最佳实践或暴露服务器?
  • 实际上它仍然以大致相同的方式运行,暴露服务器取决于您的防火墙规则,因此与 gunicorn 监听的位置没有太大关系
猜你喜欢
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2011-08-11
相关资源
最近更新 更多