我正在尝试使用sock文件在VPS上托管多个站点,但问题是我无法使用gunicorn sock看到网站运行。但我无法看到我的网站直播。我需要知道如何更改以下屏幕,显示我的应用程序与特定端口绑定而不是sock文件,或者如果它必须是一个sock文件,那么为什么我无法在mydomain.com的浏览器中看到它。
Gunicorn上标如下:
#!/bin/bash
NAME="dressika" # Name of the application
DJANGODIR=/django/mydomain # Django project directory
SOCKFILE=/django/mydomain/run/gunicorn.sock # we will communicte using this unix socket
USER=django # the user to run as
GROUP=django # the group to run as
NUM_WORKERS=3 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=mydomain.settings # which settings file should Django use
DJANGO_WSGI_MODULE=mydomain.wsgi # WSGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source ../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 ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--bind=unix:$SOCKFILE \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--log-file=-
通过上述设置,gunicorn启动脚本运行正常,但我无法在浏览器或客户端看到我的网站。我想我需要将它绑定到某个端口。我不确定我的假设是否正确。我的app settings.py显示在ALLOWED_HOSTS=['mydomain.com', 'www.mydomain.com]
中。网址仍然无效。
我的Nginx设置为:
upstream mydomain_server {
server 127.0.0.1:9500 fail_timeout=0;
}
server {
listen 80;
listen [::]:80;
root /home/django/mydomain;
index index.html index.htm;
client_max_body_size 4G;
server_name mydomain.com www.mydomain.com;
keepalive_timeout 5;
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|woff|ttf)$ {
expires 365d;
}
# Your Django project's media files - amend as required
location /media {
alias /home/django/mydomain/media/;
}
# your Django project's static files - amend as required
location static/static-only {
alias /home/django/mydomain/static-only/;
}
# Django static images
location /static/mydomain/images {
alias /home/django/mydomain/static-only/images/;
}
# Proxy the static assests for the Django Admin panel
location /static/admin {
alias /usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://mydomain_server;
proxy_connect_timeout 60s;
}
}
我还尝试将/home/django/mydomain/run/gunicorn.sock
绑定到上游服务器而不是IP:端口,但仍然无法看到网站启动并运行。
答案 0 :(得分:0)
由于gunicorn在套接字上运行,您需要绑定到该套接字,而不是绑定到上游部分的端口。
upstream mydomain_server {
server unix:/home/django/mydomain/run/gunicorn.sock fail_timeout=0;
}
答案 1 :(得分:0)
我遇到同样的问题,.sock
没有创建。这种方法对我有帮助。
Prerequests:
/home/user/.virtualenvs/
)--bind 0.0.0.0:8000 myproject.wsgi:application
时 - 您的结果与第4步相同。将dj.project throgh gunicorn设置为nginx的下一步:
/etc/systemd/system/any_file_name.service
中创建文件 - 您可以根据需要命名此文件,位于DO - 它的名称为gunicorn.service
。我的方法:
$cd /etc/systemd/system
$sudo touch gunicorn.service
然后打开你最喜欢的文本编辑器
$sudo subl gunicorn.service
[Unit] Description=gunicorn daemon After=network.target [Service] User=vetal Group=www-data WorkingDirectory=/var/www/apple.net ExecStart=/home/vetal/.virtualenvs/univ/bin/gunicorn --workers 3 --bind unix:/var/www/apple.net/mysite/mysite.sock mysite.wsgi:application [Install] WantedBy=multi-user.target
ExecStart - 当你的virualenv被关闭时,nginx会启动什么。你还记得,当你的环境打开时,gunicorn是通过点子安装的吗? - 绑定unix:... - 这个地址是你的.sock创建的地方!注意这个!
检查每一封信!TWISE !!! (当然有你链接..)
$ ls -l </ p>
如果你在'gunicorn.service'的属性中看到了什么:
-rw-r--r-- 1 root root 0 Янв 12 11:48 gunicorn.service
这意味着 - 此文件不可执行,而您.sock
- 文件永远不会创建!下一步:
$sudo chmod 755 gunicorn.service
并检查:
$ls -l
如果你得到:
-rwxr-xr-x 1 root root 305 Янв 11 19:48 gunicorn.service
这很好!一切都好!
server { listen 80; root /var/www/apple.net; server_name apple.net; location = /favicon.ico { access_log off; log_not_found off; } location = /static/ { alias /var/www/apple.net/static/; } location / { include proxy_params; proxy_pass http://unix:/var/www/apple.net/mysite/mysite.sock; } }
注意:proxy_pass - 必须与在gunicorn.service中创建.sock
文件的文件夹正确相同!
将此文件复制到/sites-enable
$ sudo cp /etc/nginx/site-avaliable/apple.net / etc / nginx / site-enable
我没有任何域名,所以我修改了我的/etc/hosts
文件,添加了行:
127.0.0.10 apple.net
$pkill gunicorn
- 这一步杀死守护进程,你可以在之前开始。在这种情况下,gunicorn表示您在/etc/systemd/system
- 文件夹中使用.service扩展之前创建的文件的名称。
$sudo systemctl start gunicorn $sudo systemctl enable gunicorn
$ sudo /etc/init.d/nginx(重新)开始
答案 2 :(得分:0)
我有nginx从gunicorn提供.sock文件。我典型的gunicorn电话看起来像这样:
exec gunicorn \
--pid /web/gunicorn.pid \
--workers '4' \
--name myapp \
--chdir /src/myapp \
--bind unix:/web/.sock \
--log-file=- \
myapp.wsgi:application
/
的我的nginx conf看起来像这样;主要区别似乎是您的proxy_pass语句没有指向.sock文件:
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/web/.sock;
}