From 5fa3dfdafbac8f3358127068367ed89d54e36b78 Mon Sep 17 00:00:00 2001 From: gw3000 Date: Wed, 12 Jul 2023 11:52:48 +0200 Subject: [PATCH] deployment --- app/core/settings.py | 25 +++++++++++++++++-------- app/requirements.txt | 2 ++ docker-compose.prod.yml | 6 +++--- traefik.prod.toml | 2 +- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/core/settings.py b/app/core/settings.py index 4bdcccf..4976e15 100644 --- a/app/core/settings.py +++ b/app/core/settings.py @@ -11,8 +11,12 @@ https://docs.djangoproject.com/en/4.2/ref/settings/ """ import os +import environ from pathlib import Path +env = environ.Env() + + # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -24,10 +28,12 @@ BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = ")g-j2v+*dvjtnz)q-3+*y7*lq$el$im8p^wr@2v$g^u99quq50" # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +# DEBUG = True +DEBUG = env('DEBUG') -ALLOWED_HOSTS = [] +# ALLOWED_HOSTS = [] +ALLOWED_HOSTS = env('DJANGO_ALLOWED_HOSTS', default=[]) # Application definition @@ -65,6 +71,7 @@ INSTALLED_APPS = [ MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", + "whitenoise.middleware.WhiteNoiseMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", @@ -108,12 +115,13 @@ DATABASES = { "default": { # "ENGINE": "django.db.backends.sqlite3", # "NAME": BASE_DIR / "db.sqlite3", - "ENGINE": "django.db.backends.postgresql", - "NAME": "django_traefik", - "USER": "django_traefik", - "PASSWORD": "django_traefik", - "HOST": "db", - "PORT": "5432", + # "ENGINE": "django.db.backends.postgresql", + # "NAME": "django_traefik", + # "USER": "django_traefik", + # "PASSWORD": "django_traefik", + # "HOST": "db", + # "PORT": "5432", + 'default': env.db(), } } @@ -158,6 +166,7 @@ USE_TZ = True STATIC_URL = "static/" STATICFILES_DIRS = [BASE_DIR / "static"] +STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' # Default primary key field type # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field diff --git a/app/requirements.txt b/app/requirements.txt index 5b93fb9..f7b026a 100644 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -1,10 +1,12 @@ Django>=4.2 +django-environ>=0.9 crispy-bootstrap5>=0.6 django-allauth>=0.50 django-bootstrap-datepicker-plus>=4.0 django-bootstrap-modal-forms>=2 django-crispy-forms>=1 django-jazzmin>=2.6.0 +environ>=1 gunicorn>=20.1 names>=0.3.0 psycopg2-binary>=2.9 \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 2ecf2e2..8ddbd66 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -11,12 +11,12 @@ services: environment: - DEBUG=0 - DATABASE_URL=postgresql://django_traefik:django_traefik@db:5432/django_traefik - - DJANGO_ALLOWED_HOSTS=.your-domain.com + - DJANGO_ALLOWED_HOSTS=.nabu-jena.de depends_on: - db labels: - "traefik.enable=true" - - "traefik.http.routers.django.rule=Host(`django-traefik.your-domain.com`)" + - "traefik.http.routers.django.rule=Host(`fbf.nabu-jena.de`)" - "traefik.http.routers.django.tls=true" - "traefik.http.routers.django.tls.certresolver=letsencrypt" db: @@ -41,7 +41,7 @@ services: - "./traefik-public-certificates:/certificates" labels: - "traefik.enable=true" - - "traefik.http.routers.dashboard.rule=Host(`dashboard-django-traefik.your-domain.com`)" + - "traefik.http.routers.dashboard.rule=Host(`dashboard-fbf.nabu-jena.de`)" - "traefik.http.routers.dashboard.tls=true" - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt" - "traefik.http.routers.dashboard.service=api@internal" diff --git a/traefik.prod.toml b/traefik.prod.toml index 0b205a8..20895fb 100644 --- a/traefik.prod.toml +++ b/traefik.prod.toml @@ -20,7 +20,7 @@ dashboard = true exposedByDefault = false [certificatesResolvers.letsencrypt.acme] - email = "your@email.com" + email = "postmaster@nabu-jena.de" storage = "/certificates/acme.json" [certificatesResolvers.letsencrypt.acme.httpChallenge] entryPoint = "web"