Deployment Setup

Zusätzlich zu den in der Entwickler-Dokumentation erwähnten Abhängigkeiten muss am Server auch noch LessCSS installiert sein, damit die im Projekt vorhandenen *.less-Dateien in CSS umgewandelt werden können.

Der LessCSS-Compiler muss dann noch in django-compressor integriert werden, was durch folgende config erfolgen kann:

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_PRECOMPILERS = (
   ('text/less', '/srv/pyconde/local/bin/lessc -x {infile} {outfile}'),
)

Deployment & Systemaufbau

Für PyConDE haben wir in der Regel 3 Systeme:

  1. Lokales Entwicklungssystem
  2. Stage-System
  3. Produktivsystem

Während wir für die lokale Entwicklung kein Deployment im eigentlichen Sinn brauchen, existiert für die Stage- und Produktivumgebung Fabric-Script, das den Deploymentprozess hier automatisiert.

Zunächst jedoch eine kurze Einführung zu den Umgebungen (2) und (3).

Stage- und Produktivumgebung

Stage und Prod. sind prinzipiell gleich aufgebaut: Innerhalb eines Root-Verzeichnisses, das gleichzeitig auch eine Virtualenv darstellt, existieren folgende Verzeichnisse:

  • log
  • htdocs (für statische Dateien)
  • pycon_de_website (das ausgecheckte Projektverzeichnis)

Zusätzlich existiert in diesem Verzeichnis noch eine supervisord.conf-Datei, über die Django verwaltet wird.

Neben dem unterschiedlichen Root-Verzeichnis, verwenden Stage und Live natürlich auch unterschiedliche Datenbanken, weshalb für jede Umgebung eine eigene Settingsdatei angelegt werden sollte, welche Einstellungen von pyconde.conf.global_settings importiert. Ein solche Datei (pyconde/settings.py) könnte so aussehen:

from conf.global_settings import *

DEBUG = TEMPLATE_DEBUG = THUMBNAIL_DEBUG = True

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'pyconde2013-staging',
        'USER': 'pyconde2012-staging',
        'PASSWORD': '123123123',
        'HOST': 'localhost',
        'PORT': '',
    }
}

CMS_USE_TINYMCE = False

MEDIA_ROOT = os.path.join(PROJECT_ROOT, '..', '..', 'htdocs', 'site_media')
STATIC_ROOT = os.path.join(PROJECT_ROOT, '..', '..', 'htdocs', 'static_media')
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_PRECOMPILERS = (
   ('text/less', '/srv/pyconde/local/bin/lessc -x {infile} {outfile}'),
)

EMAIL_HOST = 'mail.gocept.net'
INSTALLED_APPS += ('gunicorn',)
DEFAULT_FROM_EMAIL = 'pyconde-stage@example.com'

Diese Beispielkonfiguration verwendet sowohl PostgreSQL als auch gunicorn, weshalb in dieser Umgebung auch psycopg2 und gunicorn verfürbar sein müssen.

Deployment mit Fabric

Das Deployment erfolgt mittels Fabric. Hierfür empfiehlt es sich, für jede der beiden Umgebungen ein eigenes Config-File anzulegen, das das Verzeichnis, sowie den zu verwendenen Branch enthält. Ein Beispiel für eine stage.ini wäre:

root=/srv/pyconde/env_pyconde_2012-staging
branch=develop

Zusätzlich benötigt man SSH-Zugriff auf den Server-Benutzer (in diesem Fall u.a. “pyconde”).

Hat man all das, reicht ein einfaches fab -c stage.ini upgrade um die aktuelle Stage-Umgebung neu zu deployen.

Inhalt

Verwandte Themen

Diese Seite