Vorwort
Im letzten Teil ging es um das Installieren von Python und der Virtuellen Umgebung auf dem Produktionsserver. Jetzt haben wir uns mehrere Umgebungen geschaffen - unsere Entwicklungsumgebung bei uns Lokal und unsere Produktionsumgebung auf dem Server. Django lädt seine Einstellungen momentan aus einer settings.py Datei. Diese Datei müssen wir nun in mehrere Dateien aufteilen, sodass wir eine Datei als Basis, eine Datei als Enwticklungsumgebung und eine Datei für die Produktionsumgebung haben. Im Nachhinein können wir dann verschiedene Dateien hinzufügen, z.B. für eine Testumgebung.
Ordner erstellen
# Nachschauen ob unsere settings.py Datei vorhanden ist cd meine_app/meine_app/ ls -l settings.py # Erstellen des settings - Verzeichnis, neben deiner settings.py mkdir settings # Da in settings.py bereits alle Einstellungen Vorhanden sind, können wir das ganze einfach umbenennen in base.py. Das ist die Basis unserer Einstellungen # settings.py in base.py umbenennen mv settings.py settings/base.py # Erstellen weiterer Dateien cd settings/ touch __init__.py development.py production.py init.py
Diese Datei füllen wir mit folgendem Inhalt, damit je nach env unseren richtigen Einstellungen geladen werden.
# Wir importieren alles aus der base.py from .base import * import os # Wenn in unserem env ENV_NAME=production gesetzt ist, werden die Produktionseinstellungen aktiv, sonst die Entwicklungseinstellungen if os.environ.get("ENV_NAME") == 'production': from .production import * else: from .development import * Das ganze kannst du nun testen:
# Füge deinem production.py folgendes hinzu: print("--USING PRODUCTION SETTINGS--") # Bringe ENV_NAME=production in dein env export ENV_NAME=production # Beim Server start sollte nun dein print aus dem production.py angezeigt werden. python manage.py runserver PS: Dein settings - Modul wird im manage.py folgendermaßen aufgerufen:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testproj.settings") Anpassung in development.py
# Zum debuggen, lasse dir Anzeigen ob du deine development settings benutzt print("--- Using development Settings ---") Hole dir einige Einstellungen aus base.py
Folgende Einstellungen musst du aus base.py entfernen und in development.py unterbringen:
# Bewege deinen SECRET_KEY von base.py in development.py SECRET_KEY = "django-insecure-******************************************" # Hole dir deine DEBUG & ALLOWED_HOSTS einstellungen aus base.py DEBUG = True ALLOWED_HOSTS = [] # Beim kopieren der Datenbank musst du BASE_DIR importieren from .base import BASE_DIR DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": BASE_DIR / "db.sqlite3", } } Anpassungen in production.py
Hole dir deinen SECRET_KEY mit python
python3 >>> import secrets >>> print(secrets.token_urlsafe()) AZ-Z_-qBzjZmJuDaX40PZVS3JmcqfdOkGU2H5ErvUPg Baue deine production.py auf:
# Zum debuggen print("--- Using production Settings ---") SECRET_KEY = "********************************" # Für Produktion DEBUG Modus ausschalten DEBUG = False # Wenn du eine Domain über A-Record mit deinem Server verbunden hast, kannst du die Domain nutzen ALLOWED_HOSTS = [".meineapp.de", "192.168.178.23"] # Nutze deine Daten aus - 2. PostgreSQL für django aufsetzen. DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "OPTIONS": { "options": "-c search_path=meine_app_schema" }, "NAME": "meine_app", "USER": "mein_nutzer", "PASSWORD": "**************", "HOST": "localhost", "PORT": "5432" } } Füge dein production.py im .gitignore hinzu
Deine Produktionseinstellungen sollen nie in deine Codehistorie commited werden. Füge deinem .gitignore folgendes hinzu:
meine_app/meine_app/settings/production.py Jetzt kannst du dein production.py auf deinen Server syncen
rsync -r meine_app/meine_app/settings/production.py 192.168.178.23:/srv/www/meine_repository/meine_app/meine_app/settings/production.py Anpassung in base.py
# Du musst deinem BASE_DIR ein .parent hinzufügen, da deine Einstellungen jetzt 1 Verzeichnis tiefer liegen. BASE_DIR = Path(__file__).resolve().parent.parent.parent Deine .bashrc in Produktion
Füge deiner .bashrc folgendes hinzu:
# Setze dein env richtig export ENV_NAME=producti on # Du wirst den nutzer vor allem hier nutzen cd /srv/www/meine_repository # Aktiviere dir gleich dein Python source /srv/www/meine_repository/venv/bin/activate Datenbankmigration - python manage.py migrate
Jetzt kannst du deine Datenbank das erste mal in Produktion migrieren:
ssh mein-nutzer@192.168.178.23 cd meine_app/ python manage.py migrate # So sollte der Output ausschauen: Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK PS: Viel Spaß beim Coden,
Dein Ruben
Top comments (0)