I am trying to upload photos using Django admin but I get the following error [Errno 13] Permission denied: '/static'
.
I am trying to deploy this project to a Linode server running ubuntu 18.04 LTS.
I believe this is a problem with my permissions for the apache user because if I run manage.py runserver 0.0.0.0:8000
and access the site via port 8000 I can upload photos fine. I should also mention that I can use the admin page for any models that do not require photos.
I have tried anything I can find online and have even chmodded 777 -R the directory to the project.
This is the path to the project: /home/jonny/estate
.
These are the permissions from my home dir and the estate dir:
jonny@django-server:~$ ls -la
total 68
drwxrwxrwx 7 jonny jonny 4096 May 4 10:01 .
drwxr-xr-x 3 root root 4096 May 1 17:49 ..
-rwxrwxrwx 1 jonny jonny 4795 May 2 18:13 .bash_history
-rwxrwxrwx 1 jonny jonny 220 May 1 17:49 .bash_logout
-rwxrwxrwx 1 jonny jonny 3771 May 1 17:49 .bashrc
drwxrwxrwx 3 jonny jonny 4096 May 1 18:16 .cache
drwxrwxrwx 10 www-data www-data 4096 May 4 10:10 estate
-rwxrwxrwx 1 jonny jonny 29 May 2 14:04 .gitconfig
-rwxrwxrwx 1 jonny jonny 75 May 2 16:01 .git-credentials
drwxrwxrwx 3 jonny jonny 4096 May 1 17:50 .gnupg
drwxrwxrwx 3 jonny jonny 4096 May 1 19:23 .local
-rwxrwxrwx 1 jonny jonny 807 May 1 17:49 .profile
-rwxrwxrwx 1 jonny jonny 7 May 1 18:10 .python_history
drwxrwxrwx 2 jonny jonny 4096 May 1 17:53 .shh
-rwxrwxrwx 1 jonny jonny 1675 May 1 17:57 .ssh
-rwxrwxrwx 1 jonny jonny 0 May 1 17:59 .sudo_as_admin_successful
-rwxrwxrwx 1 jonny jonny 3989 May 4 10:01 .viminfo
jonny@django-server:~/estate$ ls -la
total 300
drwxrwxrwx 10 www-data www-data 4096 May 4 10:10 .
drwxrwxrwx 7 jonny jonny 4096 May 4 10:01 ..
drwxrwxrwx 4 jonny jonny 4096 May 2 13:57 api
-rwxrwxrwx 1 jonny www-data 253952 May 4 10:10 db.sqlite3
drwxrwxrwx 3 jonny jonny 4096 May 2 16:01 estate
drwxrwxrwx 8 jonny jonny 4096 May 2 16:01 .git
-rwxrwxrwx 1 jonny jonny 30 May 1 18:07 .gitignore
drwxrwxrwx 3 jonny jonny 4096 May 1 18:07 .idea
-rwxrwxrwx 1 jonny jonny 626 May 1 18:07 manage.py
-rwxrwxrwx 1 jonny jonny 89 May 1 18:16 requirements.txt
drwxrwxrwx 7 www-data jonny 4096 May 1 18:07 static
drwxrwxrwx 8 www-data varwwwusers 4096 May 1 18:19 staticfiles
drwxrwxrwx 5 jonny jonny 4096 May 1 18:07 ui
drwxrwxrwx 6 jonny jonny 4096 May 1 18:13 venv
These are my static settings in settings.py:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static/'),
]
Here is my apache conf file:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
Alias /static /home/jonny/estate/staticfiles
<Directory /home/jonny/estate/staticfiles>
Require all granted
</Directory>
<Directory /home/jonny/estate/estate>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/jonny/estate/estate/wsgi.py
WSGIDaemonProcess estate python-path=/home/jonny/estate python-home=/home/jonny/estate/venv
WSGIProcessGroup estate
</VirtualHost>
Any help at all will be greatly appreciated. This is my first time deploying a Django project and I am pretty lost. Sorry if I have left out any information or have missed something very obvious.
Error is as simple as it is shown by django. If you are going to upload from the website, you should use media
. static
is used to load the static files, that are intially added directly to directory and which are not changed by the users. If you are adding any files to the server through website, simply use media
. static vs media | static_files_in_django | media_files_in_django(simpleisbetter)