Browse Source

add comunicação websocket ao nginx

pull/2523/head
Leandro Roberto 7 years ago
parent
commit
033ed47d2e
  1. 35
      config/nginx/sapl.conf
  2. 46
      daphne_start.sh
  3. 5
      docker-compose.yml
  4. 6
      docs/instalacao31.rst
  5. 4
      sapl/settings.py
  6. 7
      start.sh

35
config/nginx/sapl.conf

@ -1,37 +1,58 @@
upstream sapl_server { upstream sapl_server {
server unix:/var/interlegis/sapl/run/gunicorn.sock fail_timeout=0; server unix:/var/interlegis/sapl/run/gunicorn.sock fail_timeout=0;
}
upstream channels_server {
server unix:/var/interlegis/sapl/run/daphne.sock;
} }
server { server {
listen 80; listen 80;
server_name sapl.test; server_name sapl.test;
client_max_body_size 4G; client_max_body_size 4G;
location /static/ { location /static/ {
alias /var/interlegis/sapl/collected_static/; alias /var/interlegis/sapl/collected_static/;
} }
location /media/ { location /media/ {
alias /var/interlegis/sapl/media/; alias /var/interlegis/sapl/media/;
} }
location / { location / {
try_files $uri @proxy_to_app;
}
location /ws/ {
try_files $uri @proxyto_ws;
}
location @proxyto_ws {
proxy_pass http://channels_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
proxy_redirect off; proxy_redirect off;
if (!-f $request_filename) { if (!-f $request_filename) {
proxy_pass http://sapl_server; proxy_pass http://sapl_server;
break; break;
} }
} }
error_page 500 502 503 504 /500.html; error_page 500 502 503 504 /500.html;
location = /500.html { location = /500.html {
root /var/interlegis/sapl/sapl/static/; root /var/interlegis/sapl/sapl/static/;

46
daphne_start.sh

@ -0,0 +1,46 @@
#!/bin/bash
# As seen in http://tutos.readthedocs.org/en/latest/source/ndg.html
SAPL_DIR="/var/interlegis/sapl"
# Seta um novo diretório foi passado como raiz para o SAPL
# caso esse tenha sido passado como parâmetro
if [ "$1" ]
then
SAPL_DIR="$1"
fi
NAME="SAPL" # Name of the application (*)
DJANGODIR=/var/interlegis/sapl/ # Django project directory (*)
SOCKFILE=/var/interlegis/sapl/run/daphne.sock # we will communicate using this unix socket (*)
USER=`whoami` # the user to run as (*)
GROUP=`whoami` # the group to run as (*)
NUM_WORKERS=3 # how many worker processes should Gunicorn spawn (*)
# NUM_WORKERS = 2 * CPUS + 1
TIMEOUT=60
MAX_REQUESTS=100 # number of requests before restarting worker
DJANGO_SETTINGS_MODULE=sapl.settings # which settings file should Django use (*)
DJANGO_ASGI_MODULE=sapl.asgi # WSGI module name (*)
echo "Starting $NAME as `whoami` on base dir $SAPL_DIR"
# parameter can be passed to run without virtualenv
if [[ "$@" != "no-venv" ]]; then
# Activate the virtual environment
cd $DJANGODIR
source /var/interlegis/.virtualenvs/sapl/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
fi
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
exec daphne \
-u $SOCKFILE ${DJANGO_ASGI_MODULE}:application \
--access-log /var/log/sapl/daphne_access.log \
-v2

5
docker-compose.yml

@ -9,7 +9,7 @@ sapldb:
volumes: volumes:
- sapldb_data:/var/lib/postgresql/data/ - sapldb_data:/var/lib/postgresql/data/
ports: ports:
- "5432:5432" - "5434:5432"
saplredis: saplredis:
image: redis:5.0.3-stretch image: redis:5.0.3-stretch
restart: always restart: always
@ -28,6 +28,9 @@ sapl:
EMAIL_HOST_USER: usuariosmtp EMAIL_HOST_USER: usuariosmtp
EMAIL_SEND_USER: usuariosmtp EMAIL_SEND_USER: usuariosmtp
EMAIL_HOST_PASSWORD: senhasmtp EMAIL_HOST_PASSWORD: senhasmtp
USE_CHANNEL_LAYERS: 'True'
PORT_CHANNEL_LAYERS: 6379
HOST_CHANNEL_LAYERS: saplredis
TZ: America/Sao_Paulo TZ: America/Sao_Paulo
volumes: volumes:
- sapl_data:/var/interlegis/sapl/data - sapl_data:/var/interlegis/sapl/data

6
docs/instalacao31.rst

@ -150,6 +150,10 @@ Criação da `SECRET_KEY <https://docs.djangoproject.com/es/1.9/ref/settings/#st
FRONTEND_CUSTOM = [True/False] FRONTEND_CUSTOM = [True/False]
USE_CHANNEL_LAYERS = True
HOST_CHANNEL_LAYERS: localhost
PORT_CHANNEL_LAYERS: 6379
SITE_URL = '[Insira este parâmetro]' SITE_URL = '[Insira este parâmetro]'
TZ = 'America/Sao_Paulo' TZ = 'America/Sao_Paulo'
@ -294,6 +298,8 @@ Django-Channels
Para ativar Django-Channels e a comunicação via websockets utilizada pelo entry-point sessao/online de sapl-frontend coloque no arquivo .env a variável: Para ativar Django-Channels e a comunicação via websockets utilizada pelo entry-point sessao/online de sapl-frontend coloque no arquivo .env a variável:
USE_CHANNEL_LAYERS = True USE_CHANNEL_LAYERS = True
HOST_CHANNEL_LAYERS: localhost
PORT_CHANNEL_LAYERS: 6379
Ao ativar o channels, no ambiente de desenvolvimento é necessário ativar um servidor redis. Utilize/Instale o docker e execute: Ao ativar o channels, no ambiente de desenvolvimento é necessário ativar um servidor redis. Utilize/Instale o docker e execute:

4
sapl/settings.py

@ -210,12 +210,14 @@ ASGI_APPLICATION = "sapl.routing.application"
USE_CHANNEL_LAYERS = config('USE_CHANNEL_LAYERS', cast=bool, default=False) USE_CHANNEL_LAYERS = config('USE_CHANNEL_LAYERS', cast=bool, default=False)
HOST_CHANNEL_LAYERS = config('HOST_CHANNEL_LAYERS', cast=str, default='localhost')
PORT_CHANNEL_LAYERS = config('PORT_CHANNEL_LAYERS', cast=int, default=6379)
CHANNEL_LAYERS = { CHANNEL_LAYERS = {
'default': { 'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer', 'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': { 'CONFIG': {
"hosts": [('127.0.0.1', 6379)], "hosts": [(HOST_CHANNEL_LAYERS, PORT_CHANNEL_LAYERS)],
}, },
}, },
} }

7
start.sh

@ -39,8 +39,9 @@ create_env() {
echo "USE_SOLR = ""${USE_SOLR-False}" >> $FILENAME echo "USE_SOLR = ""${USE_SOLR-False}" >> $FILENAME
echo "SOLR_COLLECTION = ""${SOLR_COLLECTION-sapl}" >> $FILENAME echo "SOLR_COLLECTION = ""${SOLR_COLLECTION-sapl}" >> $FILENAME
echo "SOLR_URL = ""${SOLR_URL-http://localhost:8983}" >> $FILENAME echo "SOLR_URL = ""${SOLR_URL-http://localhost:8983}" >> $FILENAME
echo "USE_CHANNEL_LAYERS = ""${USE_CHANNEL_LAYERS-True}" >> $FILENAME
echo "PORT_CHANNEL_LAYERS = ""${PORT_CHANNEL_LAYERS-6379}" >> $FILENAME
echo "HOST_CHANNEL_LAYERS = ""${HOST_CHANNEL_LAYERS-'saplredis'}" >> $FILENAME
echo "[ENV FILE] done." echo "[ENV FILE] done."
} }
@ -109,5 +110,5 @@ echo "| ███████║██║ ██║██║ ████
echo "| ╚══════╝╚═╝ ╚═╝╚═╝ ╚══════╝ |" echo "| ╚══════╝╚═╝ ╚═╝╚═╝ ╚══════╝ |"
echo "-------------------------------------" echo "-------------------------------------"
/bin/sh gunicorn_start.sh no-venv & /bin/sh gunicorn_start.sh no-venv & /bin/sh daphne_start.sh no-venv &
/usr/sbin/nginx -g "daemon off;" /usr/sbin/nginx -g "daemon off;"

Loading…
Cancel
Save