django gunicorn sock file not created by wsgi
<p>I have a basic django rest application in my digital ocean server (Ubuntu 16.04) with a local virtual environment.
The basic wsgi.py is:</p>

<pre><code>import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "workout_rest.settings")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
</code></pre>

<p>I have followed step by step this tutorial:
<a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04" rel="nofollow">https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04</a></p>

<p>When I test Gunicorn's ability to serve the project with this command:
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
All works well.</p>

<p>So I've tried to setup Gunicorn to use systemd service file. 
My /etc/systemd/system/gunicorn.service file is:</p>

<pre><code>[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ben
Group=www-data
WorkingDirectory=/home/ben/myproject
ExecStart=/home/ben/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/ben/myproject/myproject.sock myproject.wsgi:application

[Install]
WantedBy=multi-user.target
</code></pre>

<p>My Nginx configuration is:</p>

<pre><code>server {
    listen 8000;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ben/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ben/myproject/myproject.sock;
    }
}
</code></pre>

<p>I've changed listen port from 80 to 8000 because 80 give me a err_connection_refused error.
After starting the server with this command:</p>

<pre><code>sudo systemctl restart nginx
</code></pre>

<p>When I try to run my website, I get an 502 Bad Gateway error.
I've tried these commands (found on the tutorial comments):</p>

<pre><code>sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx
</code></pre>

<p>but nothing changes.
When I take a look at the Nginix logs with this command:</p>

<pre><code>sudo tail -f /var/log/nginx/error.log
</code></pre>

<p>I can read that sock file doesn't exists:</p>

<pre><code>2016/10/07 09:00:18 [crit] 24974#24974: *1 connect() to unix:/home/ben/myproject/myproject.sock failed (2: No such file or directory) while connecting to upstream, client: 86.197.20.27, server: 139.59.150.116, request: "GET / HTTP/1.1", upstream: "http://unix:/home/ben/myproject/myproject.sock:/", host: "server_ip_adress:8000"
</code></pre>

<p>Why this sock file isn't created? How can I configure django/gunicorn to create this file?
I have added gunicorn in my INSTALLED_APP in my Django project but it doesn't change anything.</p>

<p><strong>EDIT:</strong></p>

<p>When I test the nginx config file with <code>nginx -t</code> i get an error: <code>open() "/run/nginx.pid" failed (13: Permission denied)</code>.
But if I run the command with sudo: <code>sudo nginx -t</code>, the test is successful. Does that mean that I have to allow 'ben' user to run Ngnix?</p>

<p>About gunicorn logfile, I cannot find a way to read them. Where are they stored?</p>

<p>When I check whether gunicorn is running by using <code>ps aux | grep gunicorn</code>:</p>

<pre><code>ben      26543  0.0  0.2  14512  1016 pts/0    S+   14:52   0:00 grep --color=auto gunicorn
</code></pre>

<p>Here is hat happens when you run the systemctl enable and start commands for gunicorn:</p>

<pre><code>sudo systemctl enable gunicorn
Synchronizing state of gunicorn.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable gunicorn

sudo systemctl start gunicorn
I get no output with this command

sudo systemctl is-active gunicorn
active

sudo systemctl status gunicorn
â gunicorn.service - gunicorn daemon
   Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-10-06 15:40:29 UTC; 23h ago

Oct 06 15:40:29 DevUsine systemd[1]: Started gunicorn.service.
Oct 06 18:52:56 DevUsine systemd[1]: Started gunicorn.service.
Oct 06 20:55:05 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 20:55:17 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:07:36 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:16:42 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:21:38 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:25:28 DevUsine systemd[1]: Started gunicorn daemon.
Oct 07 08:58:43 DevUsine systemd[1]: Started gunicorn daemon.
Oct 07 15:01:22 DevUsine systemd[1]: Started gunicorn daemon.
</code></pre>

<p>I had to change the permissions of my sock folder:</p>

<pre><code>sudo chown ben:www-data /home/ben/myproject/
</code></pre>

<p>Another thing is that I have changed the sock location after reading in many post that it's not a good pratice to keep the sock file in the django project.
My new location is:</p>

<pre><code>/home/ben/run/
</code></pre>

<p>Don't forget to change permissions:</p>

<pre><code>sudo chown ben:www-data /home/ben/run/
</code></pre>

<p>To be sure that gunicorn is refreshed, run these commands:</p>

<pre><code>pkill gunicorn
sudo systemctl daemon-reload
sudo systemctl start gunicorn
</code></pre>

<p>That will kill the gunicorn processes and start new ones.</p>

<p>You can run this command to make the process start at server boot:</p>

<pre><code>sudo systemctl enable gunicorn
</code></pre>

<p>All works well now.</p>

python django nginx gunicorn