From 6ef16787ab778a42263148a6272bab72f7c0fa33 Mon Sep 17 00:00:00 2001 From: Laurent Bossavit Date: Wed, 4 May 2016 19:22:56 +0200 Subject: [PATCH] Rework Docker setup, provide for remote DB, add example JSON --- .gitignore | 2 +- Dockerfile | 15 -------------- Dockerfile-backend | 10 +++++++++ Dockerfile-postgres | 4 ++++ backend.py | 13 +++++++++--- docker-compose.yml | 21 +++++++++++++++++++ examples/event.json | 50 +++++++++++++++++++++++++++++++++++++++++++++ setup.sh | 3 --- 8 files changed, 96 insertions(+), 22 deletions(-) delete mode 100644 Dockerfile create mode 100644 Dockerfile-backend create mode 100644 Dockerfile-postgres create mode 100644 docker-compose.yml create mode 100644 examples/event.json delete mode 100755 setup.sh diff --git a/.gitignore b/.gitignore index 3b242c7..904be3d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ __pycache__/ *.py[cod] *$py.class - +.DS_Store diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2ff707c..0000000 --- a/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM ubuntu:15.10 -WORKDIR /setup -RUN apt-get update -RUN apt-get install -y postgresql-9.4 -RUN apt-get install -y postgresql-server-dev-9.4 -RUN apt-get install -y postgis -RUN apt-get install -y python3-dev -RUN apt-get install -y python3-pip -RUN pip3 install --system uwsgi -ADD /setup* /setup/ -ADD /requirements.txt /setup/ -USER postgres -RUN service postgresql start && /setup/setup.sh -WORKDIR /app -CMD service postgresql start && uwsgi --http :8080 --wsgi-file backend.py --callable app diff --git a/Dockerfile-backend b/Dockerfile-backend new file mode 100644 index 0000000..5fe5e19 --- /dev/null +++ b/Dockerfile-backend @@ -0,0 +1,10 @@ +FROM ubuntu:15.10 +RUN apt-get update +RUN apt-get install -y postgresql-server-dev-all +RUN apt-get install -y python3-dev +RUN apt-get install -y python3-pip +RUN pip3 install uwsgi +ADD /requirements.txt /app/ +WORKDIR /app +RUN pip3 install -r requirements.txt +CMD uwsgi --http :8080 --wsgi-file backend.py --callable app diff --git a/Dockerfile-postgres b/Dockerfile-postgres new file mode 100644 index 0000000..211806d --- /dev/null +++ b/Dockerfile-postgres @@ -0,0 +1,4 @@ +FROM postgres:9.5 +RUN apt-get update +RUN apt-get install -y postgis +ADD /setup.sql /docker-entrypoint-initdb.d/ diff --git a/backend.py b/backend.py index 74ab95b..95ab272 100644 --- a/backend.py +++ b/backend.py @@ -1,14 +1,21 @@ # backend.py # openeventdatabase +import os import falcon import psycopg2 import uuid import json +def db_connect(): + db_host = os.getenv("DB_HOST","localhost") + db_password = os.getenv("POSTGRES_PASSWORD","") + db = psycopg2.connect(dbname="oedb",host=db_host,password=db_password,user="postgres") + return db + class StatsResource(object): def on_get(self, req, resp): - db = psycopg2.connect("dbname=oedb") + db = db_connect() cur = db.cursor() cur.execute("SELECT count(*) as events_count, max(createdate) as last_created, max(lastupdate) as last_updated from events;") stat = cur.fetchone() @@ -23,7 +30,7 @@ class StatsResource(object): class EventResource(object): def on_get(self, req, resp, id): - db = psycopg2.connect("dbname=oedb") + db = db_connect() cur = db.cursor() # get event geojson Feature cur.execute(""" @@ -66,7 +73,7 @@ WHERE events_id=%s;""", (id,)) else: when = "["+event_start+", "+event_stop+")" # connect to db and insert - db = psycopg2.connect("dbname=oedb") + db = db_connect() cur = db.cursor() # get the geometry part geometry=json.dumps(j['geometry']) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c881130 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: '2' + +services: + postgres: + build: + context: . + dockerfile: Dockerfile-postgres + environment: + POSTGRES_DB: oedb + POSTGRES_PASSWORD: + backend: + build: + context: . + dockerfile: Dockerfile-backend + ports: + - 8080:8080 + environment: + DB_HOST: postgres + POSTGRES_PASSWORD: + volumes: + - .:/app/ diff --git a/examples/event.json b/examples/event.json new file mode 100644 index 0000000..e8c8ee7 --- /dev/null +++ b/examples/event.json @@ -0,0 +1,50 @@ +{ + "geometry": + { + "type": "Polygon", + "coordinates": [ + [ + [ + 2.3581337928771973, + 48.9261508727225 + ], + [ + 2.3581552505493164, + 48.925847757044224 + ], + [ + 2.3575007915496826, + 48.9258266093701 + ], + [ + 2.3577260971069336, + 48.92278125079759 + ], + [ + 2.3581552505493164, + 48.92259795940312 + ], + [ + 2.3625540733337402, + 48.92277420114101 + ], + [ + 2.362285852432251, + 48.92628480697097 + ], + [ + 2.3581337928771973, + 48.9261508727225 + ] + ] + ] + } + , + "properties":{ + "type":"football" + ,"what":"France-Roumanie 2016" + ,"what:series":"Euro 2016" + ,"start":"2016-06-10T21:00+01:00" + ,"stop":"2016-06-10T23:30+01:00" + } +} \ No newline at end of file diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 36301d8..0000000 --- a/setup.sh +++ /dev/null @@ -1,3 +0,0 @@ -pip3 install -r requirements.txt -createdb oedb -psql oedb < setup.sql