Project

General

Profile

Actions

Django hosting by ungleich

Status

This document is IN PRODUCTION (since 2016-04-08)

How to use

  1. Configure your app
  2. Deploy your app
  3. Install project specific python requirements into the pyvenv
  4. Restart uwsgi to restart your app
  5. Go to http://your-hostname/ and enjoy!

Configure your app

WSGI

  • Ensure that there is projectname/wsgi.py in your project root

Database

Add the following to your settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'app',
    }
}

Static and media files

Static files should be placed in /home/app/app/static and media files in /home/app/app/media.

Use the following code for configuration:

PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')

Deploy (first time)

You can login to your VM as user app:

ssh app@MYHOSTNAME
git clone <path-to-your-project> ~/app
  • Deploy / update your app into the folder ~app/app (that is the app folder in the home of the user app)
  • We recommended to use git to deploy it

Deploy (update)

ssh app@MYHOSTNAME
cd ~/app
git pull

Install python requirements into the pyvenv

Pyvenv has been installed to ~app/pyvenv for you.
Required packages for the hosting like PostgreSQL support and uwsgi support have already been placed.

You need to use pyvenv found in ~app/pyvenv, as uwsgi loads this pyvenv before loading your app.

To install your requirements use:

. ~/pyvenv/bin/activate
pip install ...

Restarting the app

  • sudo systemctl restart uwsgi

Viewing logfiles

  • nginx access log: tail -F /var/log/nginx/access.log
  • nginx error log: tail -F /var/log/nginx/error.log
  • uwsgi log: tail -F /var/log/uwsgi/app/app.log

Description of the stack

Technologies

  • Debian
  • nginx
  • PostgreSQL
  • uwsgi
  • pyvenv

Configuration

  • user "app"
    • in group "adm" (to view logfiles)
  • PostgreSQL with
    • database "app"
    • Listens only on localhost / socket (no remote connections)

Updated by Nico Schottelius about 2 months ago ยท 25 revisions