Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nginx won't load static files. Django opens just fine #194

Open
timonoj opened this issue Feb 4, 2025 · 5 comments
Open

Nginx won't load static files. Django opens just fine #194

timonoj opened this issue Feb 4, 2025 · 5 comments

Comments

@timonoj
Copy link

timonoj commented Feb 4, 2025

Hi guys!

I'm trying to setup my nginx for the first time. Somehow...I don't get nginx to load static content. But if I open the 8001 django URL, that one works just fine. I'm sure I must be missing something incredibly obvious, but I'm at my wits end right now, after several hours trying.

So...this is my systemd service file:

[Unit]
Description=Execute the etebase server.

[Service]
WorkingDirectory=/home/localuser/etebase
#ExecStart=/home/localuser/etebase/.venv/bin/uvicorn etebase_server.asgi:application --host 0.0.0.0 --port 8001
ExecStart=/home/localuser/etebase/.venv/bin/uvicorn etebase_server.asgi:application --uds /tmp/etebase_server.sock

[Install]
WantedBy=multi-user.target

this is my etebase-server.ini:

[global]
secret_file = secret.txt
debug = false
;Set the paths where data will be stored at
static_root = /home/localuser/etebase/static
media_root = /home/localuser/etebase/media


[allowed_hosts]
allowed_host1 = test.url
allowed_host2 = *

[database]
engine = django.db.backends.sqlite3
name = db.sqlite3

....and this is the nginx file.


# the upstream component nginx needs to connect to
upstream etebase {
    server unix:///tmp/etebase_server.sock; # for a file socket
    #server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name 192.168.0.15 # substitute your machine's IP address or domain name
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    location /static/ {
        alias /home/localuser/etebase/static; # Project's static files
    }

    location / {
        proxy_pass http://etebase;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_redirect off;
        proxy_set_header Host $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-Host $server_name;
    }
}

Do you guys see whatever I might have missed?

Thanks a lot!

@lfuerderer
Copy link

Hi,

in the line where you configured alias /home/localuser/etebase/static;
Could you try the following instead?

root /home/localuser/etebase;

I'm not sure how "alias" behaves exactly, but I tested a bit and it seemed to cause trouble.

@tasn
Copy link
Member

tasn commented Feb 4, 2025

Both media and or just static?

In addition to @lfuerderer's suggestion: make sure you actually generated the static files (see the README) - so that they are there. Though I think it's only ever useful for the admin panel, so in most cases it shouldn't matter for normal operations.

@timonoj
Copy link
Author

timonoj commented Feb 5, 2025

Hi,

in the line where you configured alias /home/localuser/etebase/static; Could you try the following instead?

root /home/localuser/etebase;

I'm not sure how "alias" behaves exactly, but I tested a bit and it seemed to cause trouble.

Thanks! I tried changing it to root instead, and restarted nginx...no change. Still looks unable to reach the static content, the css and the images (but the version running from port 8001 loads fine).

Both media and or just static?

In addition to @lfuerderer's suggestion: make sure you actually generated the static files (see the README) - so that they are there. Though I think it's only ever useful for the admin panel, so in most cases it shouldn't matter for normal operations.

Yup, I did run ./manage.py collectstatic, and the files are there. /media...Should populate once I start uploading stuff calendars/contacts? I guess I didn't get to that part just yet.

@daftaupe
Copy link
Collaborator

daftaupe commented Feb 5, 2025

Hi,
in the line where you configured alias /home/localuser/etebase/static; Could you try the following instead?

root /home/localuser/etebase;

I'm not sure how "alias" behaves exactly, but I tested a bit and it seemed to cause trouble.

Thanks! I tried changing it to root instead, and restarted nginx...no change. Still looks unable to reach the static content, the css and the images (but the version running from port 8001 loads fine).

Both media and or just static?
In addition to @lfuerderer's suggestion: make sure you actually generated the static files (see the README) - so that they are there. Though I think it's only ever useful for the admin panel, so in most cases it shouldn't matter for normal operations.

Yup, I did run ./manage.py collectstatic, and the files are there. /media...Should populate once I start uploading stuff calendars/contacts? I guess I didn't get to that part just yet.

Your webserver user is probably unable to reach the directory in /home/localuser
You can try to check that by issuing sudo -u your_webserver_user ls -l /home/localuser/etebase/static
your_webserver_user is probably www or www-data depending on your OS.

An easy way to fix this is by putting your static dir in a reachable path, maybe /srv/http/etebase_static or /var/www/html/etebase_static, again depending on what's the recommended way on your OS.

@timonoj
Copy link
Author

timonoj commented Feb 5, 2025

Great stuff! I think you're onto something, I"m really getting permission denied when trying to ls under www-data. I'll try to move the folders and change the location in the configs. Thanks for the help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants