deployment
This commit is contained in:
parent
4dd61f9ba6
commit
afdb15d897
4 changed files with 128 additions and 32 deletions
29
.env.example
Normal file
29
.env.example
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# APP URL
|
||||||
|
APP_URL='https://url.of.the.site'
|
||||||
|
|
||||||
|
# Allowed Hosts
|
||||||
|
DJANGO_ALLOWED_HOSTS='django.localhost'
|
||||||
|
|
||||||
|
# Database
|
||||||
|
DB_HOST='db'
|
||||||
|
DB_PORT='5432'
|
||||||
|
DB_PASSWORD='supersecret'
|
||||||
|
DB_USER='fbf'
|
||||||
|
DB_NAME='db_fbf'
|
||||||
|
|
||||||
|
# DEBUG
|
||||||
|
DEBUG=0
|
||||||
|
|
||||||
|
# Secrets
|
||||||
|
SECRET_KEY='evenMoreSuperSecret'
|
||||||
|
|
||||||
|
# CSRF
|
||||||
|
CSRF_TRUSTED_ORIGINS='http://django.localhost'
|
||||||
|
|
||||||
|
# Email
|
||||||
|
EMAIL_HOST=''
|
||||||
|
EMAIL_PORT=587
|
||||||
|
EMAIL_USE_TLS=True
|
||||||
|
EMAIL_HOST_USER=''
|
||||||
|
EMAIL_HOST_PASSWORD=''
|
||||||
|
DEFAULT_FROM_EMAIL=''
|
|
@ -9,20 +9,23 @@ env = environ.Env()
|
||||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
|
||||||
# Quick-start development settings - unsuitable for production
|
# Quick-start development settings - unsuitable for production
|
||||||
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
|
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
|
||||||
|
|
||||||
# SECURITY WARNING: keep the secret key used in production secret!
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
SECRET_KEY = ")g-j2v+*dvjtnz)q-3+*y7*lq$el$im8p^wr@2v$g^u99quq50"
|
SECRET_KEY = env("SECRET_KEY")
|
||||||
|
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
# DEBUG = True
|
|
||||||
DEBUG = env("DEBUG")
|
DEBUG = env("DEBUG")
|
||||||
CSRF_TRUSTED_ORIGINS = ["https://*.nabu-jena.de", "https://*.127.0.0.1"]
|
|
||||||
|
|
||||||
|
# CSRF Stuff
|
||||||
|
CSRF_COOKIE_SECURE = True
|
||||||
|
CSRF_TRUSTED_ORIGINS = (env("CSRF_TRUSTED_ORIGINS"),)
|
||||||
|
|
||||||
# ALLOWED_HOSTS = []
|
# Cookies
|
||||||
|
SESSION_COOKIE_SECURE = True
|
||||||
|
|
||||||
|
# Allowed Hosts
|
||||||
ALLOWED_HOSTS = env("DJANGO_ALLOWED_HOSTS", default=[])
|
ALLOWED_HOSTS = env("DJANGO_ALLOWED_HOSTS", default=[])
|
||||||
|
|
||||||
# Application definition
|
# Application definition
|
||||||
|
@ -32,6 +35,9 @@ INSTALLED_APPS = [
|
||||||
# Jazzmin
|
# Jazzmin
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
"jazzmin",
|
"jazzmin",
|
||||||
|
# -----------------------------------
|
||||||
|
# Django default
|
||||||
|
# -----------------------------------
|
||||||
"django.contrib.admin",
|
"django.contrib.admin",
|
||||||
"django.contrib.auth",
|
"django.contrib.auth",
|
||||||
"django.contrib.contenttypes",
|
"django.contrib.contenttypes",
|
||||||
|
@ -51,6 +57,11 @@ INSTALLED_APPS = [
|
||||||
"crispy_bootstrap5",
|
"crispy_bootstrap5",
|
||||||
"crispy_forms",
|
"crispy_forms",
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
|
# CKEditor
|
||||||
|
# -----------------------------------
|
||||||
|
"ckeditor",
|
||||||
|
"ckeditor_uploader",
|
||||||
|
# -----------------------------------
|
||||||
# My Apps
|
# My Apps
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
"aviary",
|
"aviary",
|
||||||
|
@ -103,7 +114,14 @@ WSGI_APPLICATION = "core.wsgi.application"
|
||||||
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
|
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
|
||||||
|
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
"default": env.db(),
|
"default": {
|
||||||
|
"ENGINE": "django.db.backends.postgresql",
|
||||||
|
"HOST": env("DB_HOST"),
|
||||||
|
"NAME": env("DB_NAME"),
|
||||||
|
"PASSWORD": env("DB_PASSWORD"),
|
||||||
|
"PORT": env("DB_PORT"),
|
||||||
|
"USER": env("DB_USER"),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,14 +155,25 @@ USE_I18N = True
|
||||||
|
|
||||||
USE_TZ = True
|
USE_TZ = True
|
||||||
|
|
||||||
|
|
||||||
# Static files (CSS, JavaScript, Images)
|
# Static files (CSS, JavaScript, Images)
|
||||||
# https://docs.djangoproject.com/en/4.2/howto/static-files/
|
# https://docs.djangoproject.com/en/4.2/howto/static-files/
|
||||||
|
|
||||||
|
# STATIC_URL = "/static/"
|
||||||
|
# STATIC_ROOT = BASE_DIR / "static"
|
||||||
|
# STATICFILES_DIRS = [BASE_DIR / "static"]
|
||||||
|
|
||||||
|
# STATIC_URL = "static/"
|
||||||
|
# STATICFILES_DIRS = [BASE_DIR / "static"]
|
||||||
|
# STATIC_ROOT = BASE_DIR / "staticfiles"
|
||||||
|
# STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
|
||||||
|
|
||||||
|
# Static files (CSS, JavaScript, Images)
|
||||||
|
# https://docs.djangoproject.com/en/4.1/howto/static-files/
|
||||||
|
|
||||||
STATIC_URL = "static/"
|
STATIC_URL = "static/"
|
||||||
STATICFILES_DIRS = [BASE_DIR / "static"]
|
STATICFILES_DIRS = [BASE_DIR / "static"]
|
||||||
STATIC_ROOT = BASE_DIR / "staticfiles"
|
STATIC_ROOT = BASE_DIR / 'staticfiles'
|
||||||
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
|
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
|
||||||
|
|
||||||
# Default primary key field type
|
# Default primary key field type
|
||||||
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
|
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
|
||||||
|
@ -197,7 +226,13 @@ JAZZMIN_SETTINGS = {
|
||||||
# "copyright": "Acme Library Ltd",
|
# "copyright": "Acme Library Ltd",
|
||||||
# List of model admins to search from the search bar, search bar omitted if excluded
|
# List of model admins to search from the search bar, search bar omitted if excluded
|
||||||
# If you want to use a single search field you dont need to use a list, you can use a simple string
|
# If you want to use a single search field you dont need to use a list, you can use a simple string
|
||||||
"search_model": ["auth.User", "auth.Group"],
|
# "search_model": ["bird.User", "auth.Group"],
|
||||||
|
"search_model": [
|
||||||
|
"bird.User",
|
||||||
|
"bird.FallenBird",
|
||||||
|
"rescuer.Rescuer",
|
||||||
|
"aviary.Aviary",
|
||||||
|
],
|
||||||
# Field name on user model that contains avatar ImageField/URLField/Charfield or a callable that receives the user
|
# Field name on user model that contains avatar ImageField/URLField/Charfield or a callable that receives the user
|
||||||
"user_avatar": None,
|
"user_avatar": None,
|
||||||
############
|
############
|
||||||
|
@ -246,11 +281,18 @@ JAZZMIN_SETTINGS = {
|
||||||
# },
|
# },
|
||||||
# Custom icons for side menu apps/models See https://fontawesome.com/icons?d=gallery&m=free&v=5.0.0,5.0.1,5.0.10,5.0.11,5.0.12,5.0.13,5.0.2,5.0.3,5.0.4,5.0.5,5.0.6,5.0.7,5.0.8,5.0.9,5.1.0,5.1.1,5.2.0,5.3.0,5.3.1,5.4.0,5.4.1,5.4.2,5.13.0,5.12.0,5.11.2,5.11.1,5.10.0,5.9.0,5.8.2,5.8.1,5.7.2,5.7.1,5.7.0,5.6.3,5.5.0,5.4.2
|
# Custom icons for side menu apps/models See https://fontawesome.com/icons?d=gallery&m=free&v=5.0.0,5.0.1,5.0.10,5.0.11,5.0.12,5.0.13,5.0.2,5.0.3,5.0.4,5.0.5,5.0.6,5.0.7,5.0.8,5.0.9,5.1.0,5.1.1,5.2.0,5.3.0,5.3.1,5.4.0,5.4.1,5.4.2,5.13.0,5.12.0,5.11.2,5.11.1,5.10.0,5.9.0,5.8.2,5.8.1,5.7.2,5.7.1,5.7.0,5.6.3,5.5.0,5.4.2
|
||||||
# for the full list of 5.13.0 free icon classes
|
# for the full list of 5.13.0 free icon classes
|
||||||
# "icons": {
|
"icons": {
|
||||||
# "auth": "fas fa-users-cog",
|
"auth": "fas fa-users-cog",
|
||||||
# "auth.user": "fas fa-user",
|
"auth.user": "fas fa-user",
|
||||||
# "auth.Group": "fas fa-users",
|
"auth.Group": "fas fa-users",
|
||||||
# },
|
"aviary.Aviary": "fas fa-solid fa-house",
|
||||||
|
"bird.Bird": "fas fa-solid fa-dove",
|
||||||
|
"bird.BirdStatus": "fas fa-solid fa-thermometer",
|
||||||
|
"bird.Circumstance": "fas fa-solid fa-disease",
|
||||||
|
"bird.FallenBird": "fas fa-solid fa-bed",
|
||||||
|
"costs.Costs": "fas fa-solid fa-money-bill",
|
||||||
|
"rescuer.Rescuer": "fas fa-solid fa-user-shield",
|
||||||
|
},
|
||||||
# Icons that are used when one is not manually specified
|
# Icons that are used when one is not manually specified
|
||||||
# "default_icon_parents": "fas fa-chevron-circle-right",
|
# "default_icon_parents": "fas fa-chevron-circle-right",
|
||||||
# "default_icon_children": "fas fa-circle",
|
# "default_icon_children": "fas fa-circle",
|
||||||
|
@ -268,7 +310,7 @@ JAZZMIN_SETTINGS = {
|
||||||
# Whether to link font from fonts.googleapis.com (use custom_css to supply font otherwise)
|
# Whether to link font from fonts.googleapis.com (use custom_css to supply font otherwise)
|
||||||
"use_google_fonts_cdn": True,
|
"use_google_fonts_cdn": True,
|
||||||
# Whether to show the UI customizer on the sidebar
|
# Whether to show the UI customizer on the sidebar
|
||||||
"show_ui_builder": True,
|
"show_ui_builder": False,
|
||||||
###############
|
###############
|
||||||
# Change view #
|
# Change view #
|
||||||
###############
|
###############
|
||||||
|
@ -287,3 +329,12 @@ JAZZMIN_SETTINGS = {
|
||||||
# Add a language dropdown into the admin
|
# Add a language dropdown into the admin
|
||||||
# "language_chooser": True,
|
# "language_chooser": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CKEDITOR_BASEPATH = "/staticfiles/ckeditor/ckeditor/"
|
||||||
|
CKEDITOR_UPLOAD_PATH = "media"
|
||||||
|
|
||||||
|
# Local Settings
|
||||||
|
# try:
|
||||||
|
# from .opvars import *
|
||||||
|
# except ImportError:
|
||||||
|
# print('No Local Settings Found')
|
||||||
|
|
|
@ -9,26 +9,34 @@ services:
|
||||||
expose:
|
expose:
|
||||||
- 8000
|
- 8000
|
||||||
environment:
|
environment:
|
||||||
- DEBUG=False
|
- "DEBUG=${DEBUG}"
|
||||||
- DATABASE_URL=postgresql://django_traefik:django_traefik@db:5432/django_traefik
|
- "ALLOWED_HOSTS=${ALLOWED_HOSTS}"
|
||||||
- DJANGO_ALLOWED_HOSTS=.nabu-jena.de
|
- "CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS}"
|
||||||
|
- "DB_HOST=${DB_HOST}"
|
||||||
|
- "DB_NAME=${DB_NAME}"
|
||||||
|
- "DB_PASSWORD=${DB_PASSWORD}"
|
||||||
|
- "DB_PORT=${DB_PORT}"
|
||||||
|
- "DB_USER=${DB_USER}"
|
||||||
|
- "DEBUG=${DEBUG}"
|
||||||
|
- "DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS}"
|
||||||
|
- "SECRET_KEY=${SECRET_KEY}"
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.django.rule=Host(`fbf.nabu-jena.de`)"
|
- "traefik.http.routers.django.rule=Host(`${DJANGO_ALLOWED_HOSTS}`)"
|
||||||
- "traefik.http.routers.django.tls=true"
|
- "traefik.http.routers.django.tls=true"
|
||||||
- "traefik.http.routers.django.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.django.tls.certresolver=letsencrypt"
|
||||||
db:
|
db:
|
||||||
image: postgres:15-alpine
|
image: postgres:15-alpine
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data_prod:/var/lib/postgresql/data/
|
- ./postgres_data:/var/lib/postgresql/data/
|
||||||
expose:
|
expose:
|
||||||
- 5432
|
- 5432
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_USER=django_traefik
|
- "POSTGRES_USER=${DB_USER}"
|
||||||
- POSTGRES_PASSWORD=django_traefik
|
- "POSTGRES_PASSWORD=${DB_PASSWORD}"
|
||||||
- POSTGRES_DB=django_traefik
|
- "POSTGRES_DB=${DB_NAME}"
|
||||||
traefik:
|
traefik:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
|
|
|
@ -3,29 +3,37 @@ version: '3.8'
|
||||||
services:
|
services:
|
||||||
web:
|
web:
|
||||||
build: ./app
|
build: ./app
|
||||||
command: bash -c 'while !</dev/tcp/db/5432; do sleep 1; done;python manage.py migrate;python manage.py loaddata fixtures/data.json; python manage.py runserver 0.0.0.0:8000'
|
command: bash -c 'while !</dev/tcp/db/5432; do sleep 1; done; python manage.py makemigrations; python manage.py migrate; python manage.py runserver 0.0.0.0:8000'
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/app
|
- ./app:/app
|
||||||
expose:
|
expose:
|
||||||
- 8000
|
- 8000
|
||||||
environment:
|
environment:
|
||||||
- DEBUG=1
|
- "ALLOWED_HOSTS=${ALLOWED_HOSTS}"
|
||||||
- DATABASE_URL=postgresql://django_fbf:django_fbf@db:5432/django_fbf
|
- "CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS}"
|
||||||
|
- "DB_HOST=${DB_HOST}"
|
||||||
|
- "DB_NAME=${DB_NAME}"
|
||||||
|
- "DB_PASSWORD=${DB_PASSWORD}"
|
||||||
|
- "DB_PORT=${DB_PORT}"
|
||||||
|
- "DB_USER=${DB_USER}"
|
||||||
|
- "DEBUG=${DEBUG}"
|
||||||
|
- "DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS}"
|
||||||
|
- "SECRET_KEY=${SECRET_KEY}"
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.django.rule=Host(`django.localhost`)"
|
- "traefik.http.routers.django.rule=Host(`${DJANGO_ALLOWED_HOSTS}`)"
|
||||||
db:
|
db:
|
||||||
image: postgres:15-alpine
|
image: postgres:15-alpine
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/var/lib/postgresql/data/
|
- ./postgres_data:/var/lib/postgresql/data/
|
||||||
expose:
|
expose:
|
||||||
- 5432
|
- 5432
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_USER=django_fbf
|
- "POSTGRES_USER=${DB_USER}"
|
||||||
- POSTGRES_PASSWORD=django_fbf
|
- "POSTGRES_PASSWORD=${DB_PASSWORD}"
|
||||||
- POSTGRES_DB=django_fbf
|
- "POSTGRES_DB=${DB_NAME}"
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:v2.9.6
|
image: traefik:v2.9.6
|
||||||
ports:
|
ports:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue