diff --git a/Dockerfile b/Dockerfile index 5ad74e4736..9a10eaa5f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends build-essential git \ redis-tools \ wget + RUN mkdir /code +RUN pip install uWSGI==2.0.13.1 # PostgreSQL client RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 @@ -38,3 +40,5 @@ RUN pip install -r requirements.txt # Now install our code, which may change frequently COPY . /code/listenbrainz/ + +USER daemon diff --git a/docker-compose.yml b/docker-compose.yml index cef8641bab..71b4f9d464 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,12 +15,12 @@ services: - ./data/redis:/data web: build: . - command: python manage.py runserver -h 0.0.0.0 -p 8000 + command: uwsgi /code/listenbrainz-server/docker/uwsgi.ini volumes: - .:/code/listenbrainz-server - ./data/app:/data ports: - - "8000:8000" + - "3031:3031" links: - redis - db @@ -40,3 +40,12 @@ services: depends_on: - db - redis + nginx: + restart: always + build: + context: ./docker/nginx/ + dockerfile: Dockerfile + links: + - web:web + ports: + - "80:80" diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile new file mode 100644 index 0000000000..bb367d1ede --- /dev/null +++ b/docker/nginx/Dockerfile @@ -0,0 +1,3 @@ +FROM nginx:1.10.1 + +COPY nginx.conf /etc/nginx/nginx.conf diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf new file mode 100644 index 0000000000..f7fd76dca2 --- /dev/null +++ b/docker/nginx/nginx.conf @@ -0,0 +1,24 @@ +worker_processes 4; + +events { worker_connections 1024; } + +http { + access_log /dev/stdout; + error_log /dev/stdout info; + + server { + listen 80; + + location / { + include uwsgi_params; + uwsgi_pass web:3031; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + 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_cache_bypass $http_upgrade; + } + } + +} diff --git a/docker/uwsgi.ini b/docker/uwsgi.ini new file mode 100644 index 0000000000..6d742c2fe8 --- /dev/null +++ b/docker/uwsgi.ini @@ -0,0 +1,7 @@ +[uwsgi] +socket = 0.0.0.0:3031 +module = manage +callable = application +chdir = /code/listenbrainz-server +processes = 5 +enable-threads = true diff --git a/manage.py b/manage.py index cf6fa6a46f..1fc8abcb1c 100644 --- a/manage.py +++ b/manage.py @@ -1,12 +1,15 @@ from __future__ import print_function import db from webserver import create_app, schedule_jobs +from werkzeug.wsgi import DispatcherMiddleware import subprocess import os import click import config from urlparse import urlsplit +application = DispatcherMiddleware(create_app()) + cli = click.Group() ADMIN_SQL_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'admin', 'sql')