From 3e7499b6cfe5ef7d3ebaacd0ff14c30842d3b7de Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 22 Jun 2021 02:09:07 +0200 Subject: [PATCH] fix prod mode with asgi for channels, adapt wsgi params and settings for pre-prod --- app/asgi.py | 30 ++++++++++++++++++++++++++++++ app/asgi.sh | 3 +++ app/{bin => }/init.sh | 0 app/settings.py | 6 ++++-- app/{bin => }/wait.sh | 0 app/{bin/app.sh => wsgi.sh} | 12 ++++++------ docker-compose.yml | 6 ++++-- env/debug.env | 5 ----- env/prod.env | 12 ++++++------ env/prod.yml | 30 +++++++++++++++++++++++++----- lib/pdfannotator | 2 +- requirements.txt | 2 ++ 12 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 app/asgi.py create mode 100755 app/asgi.sh rename app/{bin => }/init.sh (100%) rename app/{bin => }/wait.sh (100%) rename app/{bin/app.sh => wsgi.sh} (88%) diff --git a/app/asgi.py b/app/asgi.py new file mode 100644 index 00000000..fd5bbdc9 --- /dev/null +++ b/app/asgi.py @@ -0,0 +1,30 @@ +import os, sys +from django.core.asgi import get_asgi_application + +#sys.path.append(os.path.dirname('.')) +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') +django_asgi_app = get_asgi_application() + +from channels.auth import AuthMiddlewareStack +from channels.routing import ProtocolTypeRouter, URLRouter +from django.urls import re_path +from teleforma.ws import chat + +websocket_urlpatterns = [ + re_path(r'ws/chat/(?P\w+)/$', chat.ChatConsumer.as_asgi()), +] + + +application = ProtocolTypeRouter({ + "http": django_asgi_app, + "websocket": AuthMiddlewareStack( + URLRouter( + websocket_urlpatterns + ) + ), +}) + + + + + diff --git a/app/asgi.sh b/app/asgi.sh new file mode 100755 index 00000000..0546b3ed --- /dev/null +++ b/app/asgi.sh @@ -0,0 +1,3 @@ + +daphne -b 0.0.0.0 -p 8000 asgi:application + diff --git a/app/bin/init.sh b/app/init.sh similarity index 100% rename from app/bin/init.sh rename to app/init.sh diff --git a/app/settings.py b/app/settings.py index 32ba8866..51dc0638 100644 --- a/app/settings.py +++ b/app/settings.py @@ -344,7 +344,7 @@ LOGGING = { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', - 'filename': "/var/log/app.log", + 'filename': "/var/log/app/app.log", 'formatter': 'simple', }, 'console': { @@ -379,7 +379,9 @@ POSTMAN_SHOW_USER_AS = show_user_as #THUMBNAIL_FORCE_OVERWRITE = True -ALLOWED_HOSTS = ['localhost', 'crfpa.dockdev.pilotsystems.net'] +ALLOWED_HOSTS = ['localhost', 'crfpa.dockdev.pilotsystems.net', + 'staging.docker.e-learning.crfpa.pre-barreau.parisson.com', +] JAZZMIN_SETTINGS = { "site_title": "CRFPA", diff --git a/app/bin/wait.sh b/app/wait.sh similarity index 100% rename from app/bin/wait.sh rename to app/wait.sh diff --git a/app/bin/app.sh b/app/wsgi.sh similarity index 88% rename from app/bin/app.sh rename to app/wsgi.sh index 45cc51b2..7fcc668e 100755 --- a/app/bin/app.sh +++ b/app/wsgi.sh @@ -12,8 +12,8 @@ debug_log='/var/log/app/debug.log' # uwsgi params port=8000 -processes=8 -threads=16 +processes=64 +#threads=2 autoreload=3 uid='www-data' gid='www-data' @@ -24,13 +24,13 @@ gid='www-data' # You need at first checkout your sources in 'lib' folder # in host project side, then run : # pip install -e /srv/lib/mypackage... -#pip install mysqlclient==1.3.13 +pip3 install -U uwsgi # Install (staging) libs # /srv/bin/build/local/setup_lib.sh # waiting for other services -sh $app/bin/wait.sh +sh $app/wait.sh # django setup #python $manage wait-for-db @@ -51,9 +51,9 @@ else python $manage collectstatic --noinput - chown www-data: $debug_log + chown -R www-data: $debug_log uwsgi --socket :$port --wsgi-file $wsgi --chdir $app --master \ - --processes $processes --threads $threads \ + --processes $processes \ --uid $uid --gid $gid --logto $uwsgi_log --touch-reload $wsgi fi diff --git a/docker-compose.yml b/docker-compose.yml index 1b97ffd9..83c33c21 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,7 @@ services: context: . args: dev: 1 - command: /bin/sh /srv/app/bin/app.sh --runserver + command: /bin/sh /srv/app/wsgi.sh --runserver volumes: - ./app/:/srv/app - ./bin:/srv/bin @@ -15,8 +15,10 @@ services: - ./var/media:/srv/media - ./var/backup:/srv/backup - ./var/static:/srv/static + - ./var/log/app:/var/log/app + - ./var/log/uwsgi:/var/log/uwsgi ports: - - "8000:8000" + - "9001:8000" links: - postgres - redis diff --git a/env/debug.env b/env/debug.env index 3634c8f5..90cb7436 100644 --- a/env/debug.env +++ b/env/debug.env @@ -1,12 +1,7 @@ DEBUG=True -MYSQL_ROOT_PASSWORD=mysecretpassword -MYSQL_DATABASE=teleforma -MYSQL_USER=teleforma -MYSQL_PASSWORD=mysecretpassword DB_PORT=5432 DB_HOST=postgres - POSTGRES_PASSWORD=mysecretpassword POSTGRES_DATABASE=teleforma POSTGRES_USER=teleforma diff --git a/env/prod.env b/env/prod.env index 886325c1..90cb7436 100644 --- a/env/prod.env +++ b/env/prod.env @@ -1,7 +1,7 @@ -DEBUG=False +DEBUG=True -MYSQL_ROOT_PASSWORD=mysecretpassword -MYSQL_DATABASE=teleforma -MYSQL_USER=teleforma -MYSQL_PASSWORD=mysecretpassword -DB_PORT=3306 +DB_PORT=5432 +DB_HOST=postgres +POSTGRES_PASSWORD=mysecretpassword +POSTGRES_DATABASE=teleforma +POSTGRES_USER=teleforma diff --git a/env/prod.yml b/env/prod.yml index 766b5a00..52e03f0e 100644 --- a/env/prod.yml +++ b/env/prod.yml @@ -1,8 +1,28 @@ version: '3' services: - app: - restart: unless-stopped - env_file: - - env/prod.env - + app: + command: /bin/sh /srv/app/wsgi.sh + restart: unless-stopped + env_file: + - env/prod.env + + channels: + build: + context: . + args: + dev: 1 + command: /bin/sh /srv/app/asgi.sh + volumes: + - ./app/:/srv/app + - ./bin:/srv/bin + - ./lib:/srv/lib + - ./teleforma/:/srv/src/teleforma/teleforma + - ./var/log/app:/var/log/app + ports: + - "9002:8000" + links: + - postgres + - redis + env_file: + - env/prod.env diff --git a/lib/pdfannotator b/lib/pdfannotator index 36687802..c6b95327 160000 --- a/lib/pdfannotator +++ b/lib/pdfannotator @@ -1 +1 @@ -Subproject commit 366878027aafe7f42dbcab8eed55e76259dcecd7 +Subproject commit c6b953270e4e8a7d97853d7a784f8e6df9ed9c53 diff --git a/requirements.txt b/requirements.txt index 915b449d..0295153b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,3 +30,5 @@ xlrd==2.0.1 xlwt==1.3.0 psycopg2==2.8.6 redis==3.5.3 +uwsgi==2.0.19 +daphne==3.0.2 -- 2.39.5