From: Guillaume Pellerin Date: Tue, 22 Jun 2021 00:09:07 +0000 (+0200) Subject: fix prod mode with asgi for channels, adapt wsgi params and settings for pre-prod X-Git-Tag: 2.1~66^2^2~17 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=3e7499b6cfe5ef7d3ebaacd0ff14c30842d3b7de;p=teleforma.git fix prod mode with asgi for channels, adapt wsgi params and settings for pre-prod --- 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/app.sh b/app/bin/app.sh deleted file mode 100755 index 45cc51b2..00000000 --- a/app/bin/app.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -# paths -app='/srv/app' -manage=$app'/manage.py' -wsgi=$app'/wsgi.py' -static='/srv/static/' -media='/srv/media/' -src='/srv/src/' -uwsgi_log='/var/log/uwsgi/app.log' -debug_log='/var/log/app/debug.log' - -# uwsgi params -port=8000 -processes=8 -threads=16 -autoreload=3 -uid='www-data' -gid='www-data' -# patterns='*.js;*.css;*.jpg;*.jpeg;*.gif;*.png;*.svg;*.ttf;*.eot;*.woff;*.woff2' - -# Install a package in development mode -# without rebuidling docker image. -# 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 - -# Install (staging) libs -# /srv/bin/build/local/setup_lib.sh - -# waiting for other services -sh $app/bin/wait.sh - -# django setup -#python $manage wait-for-db - -# initial setup -# if [ ! -f .init ]; then -# bash $app/bin/init.sh -# touch .init -# fi - -# app start -if [ "$1" = "--runserver" ]; then - python $manage runserver 0.0.0.0:8000 -else - # static files auto update - # watchmedo shell-command --patterns="$patterns" --recursive \ - # --command='python '$manage' collectstatic --noinput' $app & - - python $manage collectstatic --noinput - - chown www-data: $debug_log - - uwsgi --socket :$port --wsgi-file $wsgi --chdir $app --master \ - --processes $processes --threads $threads \ - --uid $uid --gid $gid --logto $uwsgi_log --touch-reload $wsgi -fi diff --git a/app/bin/init.sh b/app/bin/init.sh deleted file mode 100755 index 1aa59bf6..00000000 --- a/app/bin/init.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# paths -app='/srv/app' -manage=$app'/manage.py' - -python $manage migrate --noinput -python $manage create-admin-user -python $manage create-default-organization -python $manage build-front - -# @todo searching every fixtures file in each folder -python $manage loaddata $app/organization/job/fixtures/organization-job.json -python $manage loaddata $app/organization/projects/fixtures/organization-projects-repositorysystems.json - -bash /srv/doc/build.sh diff --git a/app/bin/wait.sh b/app/bin/wait.sh deleted file mode 100755 index e4c94500..00000000 --- a/app/bin/wait.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -/srv/bin/misc/wait-for-it/wait-for-it.sh -h $DB_HOST -p $DB_PORT; -/srv/bin/misc/wait-for-it/wait-for-it.sh -h redis -p 6379; diff --git a/app/init.sh b/app/init.sh new file mode 100755 index 00000000..1aa59bf6 --- /dev/null +++ b/app/init.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# paths +app='/srv/app' +manage=$app'/manage.py' + +python $manage migrate --noinput +python $manage create-admin-user +python $manage create-default-organization +python $manage build-front + +# @todo searching every fixtures file in each folder +python $manage loaddata $app/organization/job/fixtures/organization-job.json +python $manage loaddata $app/organization/projects/fixtures/organization-projects-repositorysystems.json + +bash /srv/doc/build.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/wait.sh b/app/wait.sh new file mode 100755 index 00000000..e4c94500 --- /dev/null +++ b/app/wait.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +/srv/bin/misc/wait-for-it/wait-for-it.sh -h $DB_HOST -p $DB_PORT; +/srv/bin/misc/wait-for-it/wait-for-it.sh -h redis -p 6379; diff --git a/app/wsgi.sh b/app/wsgi.sh new file mode 100755 index 00000000..7fcc668e --- /dev/null +++ b/app/wsgi.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# paths +app='/srv/app' +manage=$app'/manage.py' +wsgi=$app'/wsgi.py' +static='/srv/static/' +media='/srv/media/' +src='/srv/src/' +uwsgi_log='/var/log/uwsgi/app.log' +debug_log='/var/log/app/debug.log' + +# uwsgi params +port=8000 +processes=64 +#threads=2 +autoreload=3 +uid='www-data' +gid='www-data' +# patterns='*.js;*.css;*.jpg;*.jpeg;*.gif;*.png;*.svg;*.ttf;*.eot;*.woff;*.woff2' + +# Install a package in development mode +# without rebuidling docker image. +# You need at first checkout your sources in 'lib' folder +# in host project side, then run : +# pip install -e /srv/lib/mypackage... +pip3 install -U uwsgi + +# Install (staging) libs +# /srv/bin/build/local/setup_lib.sh + +# waiting for other services +sh $app/wait.sh + +# django setup +#python $manage wait-for-db + +# initial setup +# if [ ! -f .init ]; then +# bash $app/bin/init.sh +# touch .init +# fi + +# app start +if [ "$1" = "--runserver" ]; then + python $manage runserver 0.0.0.0:8000 +else + # static files auto update + # watchmedo shell-command --patterns="$patterns" --recursive \ + # --command='python '$manage' collectstatic --noinput' $app & + + python $manage collectstatic --noinput + + chown -R www-data: $debug_log + + uwsgi --socket :$port --wsgi-file $wsgi --chdir $app --master \ + --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