No description
Find a file
2023-07-10 21:15:37 +02:00
aviary Zustand Volieren #16 2023-07-09 22:48:33 +02:00
bird new migrations file 2023-07-10 21:15:37 +02:00
core aviary first view and template 2023-07-01 09:21:58 +02:00
fixtures new data fixture 2023-07-10 21:15:26 +02:00
rescuer E-Mail Finder/Retter entfernen #14 2023-07-08 22:40:38 +02:00
sites Merge branch 'main' of github.com:guntherweissenbaeck/django_fbf 2023-07-07 09:36:08 +02:00
static Merge branch 'main' of github.com:guntherweissenbaeck/django_fbf 2023-07-07 09:36:08 +02:00
templates Retter in Finder umbenennen #13 2023-07-08 22:25:32 +02:00
.gitignore gitignore knows more vscode stuff 2023-06-10 15:42:18 +02:00
manage.py init django project and set language de 2023-06-06 15:57:49 +02:00
README.md Deployment Howto in Readme 2023-07-07 19:19:46 +02:00
requirements.txt added names package to requirements 2023-07-03 23:04:53 +02:00

The Fallen Birdy Form

Throw old database

In case you've got an preexisting database, delete it and do the following:

python3 manage.py makemigrations
python3 manage.py migrate

Add Test Data

To add testdata, use the loaddata functionality of django:

python3 manage.py loaddata fixtures/data.json

Test Account

The test account you can use:

  • user: admin
  • password: abcdef

Deployment

This is a little reminder what you will need to deploy the app.

Secret Key

Generate Secret Key:

openssl rand -base64 36

Environment

# .env
# URL
APP_URL='fbf.nabu-jena.de'

# Switch off debugging in production
DEBUG=False

# Security from checks
SECRET_KEY='LaLaLa'
SECURE_SSL_REDIRECT=True
SESSION_COOKIE_SECURE=True
CSRF_COOKIE_SECURE=True
CSRF_TRUSTED_ORIGINS='https://fbf.nabu-jena.de'

# Email
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST='smtp.strato.de'
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER='postmaster@nabu-jena.de'
EMAIL_HOST_PASSWORD='LaLaLa'
DEFAULT_FROM_EMAIL="fbf-admin@nabu-jena.de"% 

Settings in Django Core

import os
...
DEBUG = False
ALLOWED_HOSTS = ['*']
...
STATICFILES_DIRS = [BASE_DIR / "static", ]
STATIC_ROOT = '/static/'
STATIC_URL = '/static/'
...
# Email backend
EMAIL_BACKEND = os.getenv('EMAIL_BACKEND')
EMAIL_HOST=os.getenv('EMAIL_HOST')
EMAIL_PORT=os.getenv('EMAIL_PORT')
EMAIL_USE_TLS=os.getenv('EMAIL_USE_TLS')
EMAIL_HOST_USER=os.getenv('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD=os.getenv('EMAIL_HOST_PASSWORD')
DEFAULT_FROM_EMAIL=os.getenv('DEFAULT_FROM_EMAIL')

# CSRF
CSRF_TRUSTED_ORIGINS=[os.getenv('CSRF_TRUSTED_ORIGINS')]

Docker Stack

# docker-compose.yaml
version: '3.7'

services:
  django_gunicorn:
    build:
      context: .
    env_file:
      - .env
    volumes:
      - static:/static
      - ./django_project:/app
    restart: always
    container_name: lvr_django

  nginx:
    build: ./nginx
    volumes:
      - static:/static
    depends_on:
      - django_gunicorn
    restart: always
    container_name: lvr_nginx
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami-http.entrypoints=web"
      - "traefik.http.routers.whoami-http.rule=Host(`${APP_URL}`)"
      - "traefik.http.routers.whoami.rule=Host(`${APP_URL}`)"
      - "traefik.http.routers.whoami.tls.certresolver=default"
      - "traefik.http.routers.whoami.tls=true"
    networks:
      - traefik_proxy
      - default

networks:
  traefik_proxy:
    external:
      name: traefik_proxy

volumes:
  static:

Dockerfile

# Dockerfile
FROM python:3.10-alpine

RUN apk add --update --no-cache postgresql-client jpeg-dev
RUN apk add --update --no-cache --virtual .tmp-build-deps \
      gcc libffi-dev libc-dev linux-headers postgresql-dev \
      musl-dev zlib zlib-dev

RUN pip install --upgrade pip

COPY ./requirements.txt .
RUN pip install -r requirements.txt

# This is not installed by default
RUN pip install tzdata

COPY ./django_project /app

WORKDIR /app

COPY ./entrypoint.sh /
ENTRYPOINT ["sh", "/entrypoint.sh"]

Entrypoint Shell Script

# entrypoint.sh
#!/bin/sh

python manage.py migrate --no-input
python manage.py collectstatic --no-input

gunicorn core.wsgi:application --bind 0.0.0.0:8000