Pergunta

This is my first time deploying Django to a recently acquired Linode server and I'm curious if someone can look over my deployment and help me fix some nagging issues and advise me whether i'm doing things incorrectly.

Directory Structure

home\
    -public\
        -example.com\
            -public\
                -.htaccess
                -index.html
            -log\
            -application\
                -mysite\
                    -mysite\
                    -manage.py
                    -static\
                    -myapp\
                    -logs\

How is this for deployment structure for Django?

Incorrect URL Naming

I've hosted the Django application called 'myapp' on my domain 'example.com'. Following the instructions on the Django website I've made it so that the urls.py for the app must begin with '/myapp'. This has resulted in the domain for the app becoming 'example.com/myapp'.

How can I set it so that example.com is simply the Django app I've written? I'd like to simply navigate to example.com and it load my app instead of example.com/myapp.

Even weirder is that I would've thought that example.com would load my index.html file however it tries to find a URL mapping for Django instead...

Django Log File Writing Permissions

Whenever I SSH onto my machine to either 'syncdb' or 'collectstatic', the logging module creates the log file I've named in my settings.py file. This causes problems for me because I am the owner of the file and apache2 (www-data) cannot write to it. It's just annoying having to manually delete the log file after every command before I restart the apache server.

Here is my /etc/apache2/sites-available/example.com file:

# domain: example.com
# public: /home/setheron/public/example.com/

WSGIPythonPath /home/setheron/public/example.com/applications/mysite:/home/setheron/env/lib/python2.7/site-packages

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin setheron@setheron.com
  ServerName  www.example.example.com
  ServerAlias example.com

  WSGIScriptAlias / /home/setheron/public/example.com/applications/mysite/mysite/wsgi.py

  Alias /static/ /home/setheron/public/example.com/applications/mysite/static/
  <Directory /home/setheron/public/example.com/applications/mysite/static/>
        Order deny,allow
        Allow from all
  </Directory>

  <Directory /home/setheron/public/example.com/applications/mysite/mysite>
  <Files wsgi.py>
        Order deny,allow
        Allow from all
  </Files>
  </Directory>

  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html index.php
  DocumentRoot /home/setheron/public/example.com/public

  # Log file locations
  LogLevel warn
  ErrorLog  /home/setheron/public/example.com/log/error.log
  CustomLog /home/setheron/public/example.com/log/access.log combined
</VirtualHost>
Foi útil?

Solução

If you want Django serving the entire site, get rid of your public directory, indexes and whatnot. Other than /static, you should only need your WSGIScriptAlias directive. Fix the urls.py to say that your site should be coming from /, rather than /myapp.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top