简体   繁体   中英

How to fix permission error when uploading photos with django admin when deployed?

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM