From fc9c59f80d22a13b4b3151365eff83e3a02a6a7b Mon Sep 17 00:00:00 2001 From: duncte123 Date: Tue, 12 Mar 2024 18:57:41 +0100 Subject: [PATCH] It finally works as a single app! --- Dockerfile | 5 +++-- asgi.py | 20 +++++++++++++++++++- docker-compose.yml | 32 +++++++++++++++++++++++++++++--- entrypoint.sh | 10 +++++++--- nginx_dev.conf | 19 +++++++++++++++++++ tracker | 2 +- 6 files changed, 78 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 87615fd..432eb22 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,7 @@ FROM python:3.12 WORKDIR /app -RUN pip install django~=3.2 +RUN pip install django~=5.0 RUN django-admin startproject tracker_development WORKDIR /app/tracker_development/donation-tracker @@ -39,7 +39,8 @@ COPY --from=client /app/tracker/ tracker COPY ./tracker/tracker tracker COPY ./tracker/setup.py ./ RUN pip install -e . -#RUN pip install 'uvicorn[daphne]' gunicorn +RUN pip install daphne +#RUN pip install gunicorn WORKDIR /app/tracker_development COPY ./settings.py ./wsgi.py ./asgi.py ./local_statics.py ./routing.py ./urls.py /app/tracker_development/tracker_development/ diff --git a/asgi.py b/asgi.py index 4b95a4f..5ebe76b 100644 --- a/asgi.py +++ b/asgi.py @@ -13,4 +13,22 @@ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tracker_development.settings') -application = get_asgi_application() +django_app = get_asgi_application() + +from channels.auth import AuthMiddlewareStack +from channels.routing import ProtocolTypeRouter, URLRouter +from channels.security.websocket import AllowedHostsOriginValidator +from django.urls import path + +import tracker.routing + +application = ProtocolTypeRouter({ + 'http': django_app, + 'websocket': AllowedHostsOriginValidator( + AuthMiddlewareStack( + URLRouter( + [path('', URLRouter(tracker.routing.websocket_urlpatterns))] + ) + ) + ), +}) diff --git a/docker-compose.yml b/docker-compose.yml index e9b6eba..a25c264 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,6 @@ version: "3.7" services: app: -# image: "esamarathon/tracker:latest" build: context: . dockerfile: Dockerfile @@ -11,14 +10,12 @@ services: volumes: - "./db:/app/tracker_development/db" - "./blank.json:/app/tracker_development/blank.json" -# - "./tracker/:/app/tracker_development/donation-tracker/" - "./local.py:/app/tracker_development/tracker_development/local.py" - "static:/var/www/html/static:rw" environment: - TRACKER_ALLOWED_HOSTS="localhost, esatracker.eu.ngrok.io" - TRACKER_DOMAIN="localhost" - TRACKER_DEBUG=True -# - TRACKER_DATABASES='{"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": "db/testdb"}}' - TRACKER_TIME_ZONE="Europe/Amsterdam" - TRACKER_SITE_NAME="ESA Dev Tracker" - TRACKER_SITE_PREFIX="/" @@ -30,6 +27,35 @@ services: - TRACKER_USE_NEW_DONATE_LAYOUT=False ports: - "8000:8000" +# app_ws: +# build: +# context: . +# dockerfile: Dockerfile +# stdin_open: true # docker run -i +# tty: true # docker run -t +## entrypoint: /bin/bash +# entrypoint: daphne -b 0.0.0.0 -p 8001 tracker_development.asgi:application +## entrypoint: gunicorn --bind 0.0.0.0:8001 tracker_development.asgi:application -k uvicorn.workers.UvicornWorker +# volumes: +# - "./db:/app/tracker_development/db" +# - "./blank.json:/app/tracker_development/blank.json" +# - "./local.py:/app/tracker_development/tracker_development/local.py" +# - "static:/var/www/html/static:rw" +# environment: +# - TRACKER_ALLOWED_HOSTS="localhost, esatracker.eu.ngrok.io" +# - TRACKER_DOMAIN="localhost" +# - TRACKER_DEBUG=True +# - TRACKER_TIME_ZONE="Europe/Amsterdam" +# - TRACKER_SITE_NAME="ESA Dev Tracker" +# - TRACKER_SITE_PREFIX="/" +# - TRACKER_SECRET_KEY="HAhAHAHhahahahhahahhahahhahahahahha" +# - TRACKER_STATIC_URL="/static" +# - TRACKER_STATIC_ROOT="/var/www/html/static" +# - TRACKER_HAS_GDOC=False +# - TRACKER_HAS_EMAIL=False +# - TRACKER_USE_NEW_DONATE_LAYOUT=False +# ports: +# - "8001:8001" web: image: nginx:latest volumes: diff --git a/entrypoint.sh b/entrypoint.sh index e4d916d..95e81b9 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -23,9 +23,13 @@ rm -rf /var/ww/html/static/gen || true # Collect all the static assets python manage.py collectstatic --noinput -if [ -x "$(command -v gunicorn)" ]; then -# gunicorn --bind 0.0.0.0:8000 tracker_development.wsgi - gunicorn --bind 0.0.0.0:8000 tracker_development.asgi:application -k uvicorn.workers.UvicornWorker +if [ -x "$(command -v daphne)" ]; then + echo "Using daphne server" + daphne -b 0.0.0.0 -p 8000 tracker_development.asgi:application +elif [ -x "$(command -v gunicorn)" ]; then + echo "Using gunicorn server" + gunicorn --bind 0.0.0.0:8000 tracker_development.wsgi +# gunicorn --bind 0.0.0.0:8000 tracker_development.asgi:application -k uvicorn.workers.UvicornWorker else echo "Gunicorn not installed: Using built-in server." # watchmedo shell-command --patterns="*.css" -R -c "python manage.py collectstatic --noinput" & diff --git a/nginx_dev.conf b/nginx_dev.conf index bdd4c06..1c25de2 100644 --- a/nginx_dev.conf +++ b/nginx_dev.conf @@ -3,7 +3,26 @@ http { upstream tracker { server app:8000; } + +# upstream tracker_ws { +# server app_ws:8001; +# } + + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + server { + location /ws { + proxy_pass http://tracker; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host localhost:8080; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + } + location / { proxy_pass http://tracker; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; diff --git a/tracker b/tracker index 62fce4f..6f54068 160000 --- a/tracker +++ b/tracker @@ -1 +1 @@ -Subproject commit 62fce4ff1a6ce0aa983fae9035bfcf4b20e4f5d0 +Subproject commit 6f54068da3f77472fa58c9410bdebfe89cb8f4cd