create basic django app serving the Gähsnitz website
This commit is contained in:
6
.dockerignore
Normal file
6
.dockerignore
Normal file
@@ -0,0 +1,6 @@
|
||||
.dockerignore
|
||||
.gitignore
|
||||
.venv
|
||||
docker-compose.yml
|
||||
Dockerfile
|
||||
volumes
|
||||
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
.idea/
|
||||
.venv/
|
||||
**/__pycache__/
|
||||
volumes/
|
||||
7
Dockerfile
Normal file
7
Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM python:3.10
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
WORKDIR /code/
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir --requirement requirements.txt
|
||||
COPY . .
|
||||
ENTRYPOINT ["./entrypoint.sh"]
|
||||
9
docker-compose.yml
Normal file
9
docker-compose.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
|
||||
web:
|
||||
build:
|
||||
context: .
|
||||
ports:
|
||||
- "80:8000"
|
||||
volumes:
|
||||
- .:/code:r
|
||||
12
entrypoint.sh
Executable file
12
entrypoint.sh
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
if [ "$DJANGO_PRODUCTION_MODE" == "true" ]; then
|
||||
echo "starting production server ..."
|
||||
gunicorn --bind=0.0.0.0:8000 --workers=2 gaehsnitzproject.wsgi
|
||||
|
||||
else
|
||||
echo "starting development server ..."
|
||||
python manage.py runserver 0.0.0.0:8000
|
||||
|
||||
fi
|
||||
0
gaehsnitz/__init__.py
Normal file
0
gaehsnitz/__init__.py
Normal file
6
gaehsnitz/apps.py
Normal file
6
gaehsnitz/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class GaehsnitzConfig(AppConfig):
|
||||
name = "gaehsnitz"
|
||||
verbose_name = "Gähsnitz Open Air"
|
||||
79
gaehsnitz/static/gaehsnitz/style.css
Normal file
79
gaehsnitz/static/gaehsnitz/style.css
Normal file
@@ -0,0 +1,79 @@
|
||||
html, body, div,
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
a, p, b, i,
|
||||
form, label, input,
|
||||
table, thead, tbody, tr, td {
|
||||
margin: 0;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 600px) and (max-width: 899px) {
|
||||
html, body {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 900px) {
|
||||
html, body {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background-color: #111111;
|
||||
color: #EEEEEE;
|
||||
}
|
||||
|
||||
#title, #navi, #content {
|
||||
flex: 0 1 auto;
|
||||
width: 95%;
|
||||
max-width: 1200px;
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
#title {
|
||||
margin-top: 16px;
|
||||
font-size: 1.6rem;
|
||||
text-align: center;
|
||||
color: #EE9933;
|
||||
text-shadow: 0 0 16px #EE9933;
|
||||
}
|
||||
|
||||
#navi {
|
||||
border-top: 1px solid #663322;
|
||||
border-bottom: 1px solid #663322;
|
||||
color: #663322;
|
||||
padding: 8px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #EE9933;
|
||||
transition: color 100ms;
|
||||
}
|
||||
|
||||
a:hover, a:focus {
|
||||
color: #EEEEEE;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0 0 12px;
|
||||
font-size: 1.3rem;
|
||||
font-weight: bold;
|
||||
color: #EECC66;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 6px 0 10px;
|
||||
}
|
||||
30
gaehsnitz/templates/gaehsnitz/base.html
Normal file
30
gaehsnitz/templates/gaehsnitz/base.html
Normal file
@@ -0,0 +1,30 @@
|
||||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
<title>Gähsnitz Open Air</title>
|
||||
<link rel="stylesheet" type="text/css" href="{% static 'gaehsnitz/style.css' %}">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="title">
|
||||
Gähsnitz Open Air 2022
|
||||
</div>
|
||||
|
||||
<div id="navi">
|
||||
<a href="#">News</a>
|
||||
|
|
||||
<a href="#">A-Z</a>
|
||||
|
|
||||
<a href="#">Bands</a>
|
||||
</div>
|
||||
|
||||
<div id="content">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
9
gaehsnitz/templates/gaehsnitz/index.html
Normal file
9
gaehsnitz/templates/gaehsnitz/index.html
Normal file
@@ -0,0 +1,9 @@
|
||||
{% extends "gaehsnitz/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1>Bald, dooo!</h1>
|
||||
|
||||
<p>Das bisschen Website macht sich von allein, nimmt man an.</p>
|
||||
|
||||
{% endblock %}
|
||||
7
gaehsnitz/urls.py
Normal file
7
gaehsnitz/urls.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from django.urls import path
|
||||
|
||||
from gaehsnitz.views import IndexView
|
||||
|
||||
urlpatterns = [
|
||||
path("", IndexView.as_view(), name="index"),
|
||||
]
|
||||
5
gaehsnitz/views.py
Normal file
5
gaehsnitz/views.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
|
||||
class IndexView(TemplateView):
|
||||
template_name = "gaehsnitz/index.html"
|
||||
0
gaehsnitzproject/__init__.py
Normal file
0
gaehsnitzproject/__init__.py
Normal file
77
gaehsnitzproject/settings.py
Normal file
77
gaehsnitzproject/settings.py
Normal file
@@ -0,0 +1,77 @@
|
||||
import os
|
||||
|
||||
|
||||
def _get_env_production_mode():
|
||||
env_var = os.environ.get("DJANGO_PRODUCTION_MODE", "false")
|
||||
return env_var.lower() == "true"
|
||||
|
||||
|
||||
def _get_env_secret_key():
|
||||
env_var = os.environ.get("DJANGO_SECRET_KEY")
|
||||
assert env_var is not None, "DJANGO_SECRET_KEY environment variable must be set when using production mode"
|
||||
return env_var
|
||||
|
||||
|
||||
def _get_env_allowed_hosts():
|
||||
env_var = os.environ.get("DJANGO_ALLOWED_HOSTS")
|
||||
assert env_var is not None, "DJANGO_ALLOWED_HOSTS environment variable must be set when using production mode"
|
||||
return [host.strip() for host in env_var.split(",")]
|
||||
|
||||
|
||||
def _get_env_static_root():
|
||||
env_var = os.environ.get("DJANGO_STATIC_ROOT")
|
||||
assert env_var is not None, "DJANGO_STATIC_ROOT environment variable must be set when using production mode"
|
||||
return env_var
|
||||
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
PRODUCTION = _get_env_production_mode()
|
||||
|
||||
if PRODUCTION:
|
||||
SECRET_KEY = _get_env_secret_key()
|
||||
DEBUG = False
|
||||
ALLOWED_HOSTS = _get_env_allowed_hosts()
|
||||
STATIC_ROOT = _get_env_static_root()
|
||||
else:
|
||||
SECRET_KEY = "LqKSgoFtED4IFYxf01lBi5MEI4ExSayCakwLjyuzytDJ7vuMq9"
|
||||
DEBUG = True
|
||||
ALLOWED_HOSTS = ["*"]
|
||||
|
||||
INSTALLED_APPS = [
|
||||
"gaehsnitz",
|
||||
"django.contrib.contenttypes",
|
||||
"django.contrib.staticfiles",
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
"django.middleware.security.SecurityMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||
]
|
||||
|
||||
ROOT_URLCONF = "gaehsnitzproject.urls"
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
||||
"DIRS": [],
|
||||
"APP_DIRS": True,
|
||||
"OPTIONS": {
|
||||
"context_processors": [
|
||||
"django.template.context_processors.debug",
|
||||
"django.template.context_processors.request",
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = "gaehsnitzproject.wsgi.application"
|
||||
|
||||
TIME_ZONE = "Europe/Berlin"
|
||||
USE_I18N = False
|
||||
USE_L10N = False
|
||||
USE_TZ = True
|
||||
|
||||
STATIC_URL = "/static/"
|
||||
5
gaehsnitzproject/urls.py
Normal file
5
gaehsnitzproject/urls.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.urls import path, include
|
||||
|
||||
urlpatterns = [
|
||||
path("", include(("gaehsnitz.urls", "gaehsnitz"))),
|
||||
]
|
||||
7
gaehsnitzproject/wsgi.py
Normal file
7
gaehsnitzproject/wsgi.py
Normal file
@@ -0,0 +1,7 @@
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gaehsnitzproject.settings')
|
||||
|
||||
application = get_wsgi_application()
|
||||
21
manage.py
Executable file
21
manage.py
Executable file
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env python
|
||||
"""Django's command-line utility for administrative tasks."""
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gaehsnitzproject.settings')
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError as exc:
|
||||
raise ImportError(
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
"forget to activate a virtual environment?"
|
||||
) from exc
|
||||
execute_from_command_line(sys.argv)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
django==4.0.4
|
||||
gunicorn==20.1.0
|
||||
Reference in New Issue
Block a user