diff --git a/.env b/.env index e028ff2c7c7b709ba904887c02151414753c63ba..29cca1b86adf589fa833f55db16dab4bae252694 100644 --- a/.env +++ b/.env @@ -1,4 +1,5 @@ POSTGRES_USER=ics POSTGRES_PASSWORD=icspwd POSTGRES_DB=csentry_db -PGDATA_VOLUME=./data +PGDATA_VOLUME=./data/postgres +ELASTIC_DATA_VOLUME=./data/elastic diff --git a/Makefile b/Makefile index 78966b991f8f1f99b5c6a71c2a8e01a6858cc1a5..d7220b3dab036458de5053d779c2dccdf37ea51c 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ release: refresh \ release: ## build, tag, and push all stacks db: ## start postgres and redis for development - docker-compose up -d postgres redis worker + docker-compose up -d postgres redis elasticsearch worker init_db: ## initialize the dev database docker-compose run --rm web flask db upgrade head diff --git a/app/factory.py b/app/factory.py index 8d11576e682df5ce6d9d7620f36e49a0de4522f6..060d6922ef3bcd3417eb22435b6657fba2d5cbf1 100644 --- a/app/factory.py +++ b/app/factory.py @@ -14,6 +14,7 @@ import sqlalchemy as sa import rq_dashboard from flask import Flask from whitenoise import WhiteNoise +from elasticsearch import Elasticsearch from . import settings, models from .extensions import ( db, @@ -113,6 +114,11 @@ def create_app(config=None): app.config["SESSION_REDIS"] = session_redis_store fsession.init_app(app) cache.init_app(app) + app.elasticsearch = ( + Elasticsearch([app.config["ELASTICSEARCH_URL"]]) + if app.config["ELASTICSEARCH_URL"] + else None + ) admin.init_app(app) admin.add_view(UserAdmin(models.User, db.session, endpoint="users")) diff --git a/app/settings.py b/app/settings.py index 14784a87c4cb46edf2e9a6fd0e73dd7ad3340216..254a6e7a2b725daa725836bc757c9d8d9b18d357 100644 --- a/app/settings.py +++ b/app/settings.py @@ -36,6 +36,8 @@ CACHE_REDIS_URL = "redis://redis:6379/1" REDIS_URL = "redis://redis:6379/2" QUEUES = ["default"] +ELASTICSEARCH_URL = "http://elasticsearch:9200" + LDAP_HOST = "esss.lu.se" LDAP_BASE_DN = "DC=esss,DC=lu,DC=se" LDAP_USER_DN = "OU=ESS Users" diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 239d28fb7d78aefd486a3cab25dae32ee64dad65..a36399ad0700533b0c53a8b5f72e4129eee3f576 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -26,3 +26,8 @@ services: volumes: - ./postgres/create-test-db.sh:/docker-entrypoint-initdb.d/create-test-db.sh - ${PGDATA_VOLUME}:/var/lib/postgresql/data/pgdata + elasticsearch: + volumes: + - ${ELASTIC_DATA_VOLUME}:/usr/share/elasticsearch/data + ports: + - "9200:9200" diff --git a/docker-compose.yml b/docker-compose.yml index 7700c3226b894d294daa2f9752ea8f06acbb92d9..ac0a31960f1a1a1a99bb9bd969e972d176248a85 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,7 @@ services: depends_on: - postgres - redis + - elasticsearch worker: image: registry.esss.lu.se/ics-infrastructure/csentry:master container_name: csentry_worker @@ -28,3 +29,15 @@ services: redis: image: redis:4.0 container_name: csentry_redis + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2 + container_name: csentry_elasticsearch + environment: + - cluster.name=csentry-cluster + - bootstrap.memory_lock=true + - discovery.type=single-node + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ulimits: + memlock: + soft: -1 + hard: -1 diff --git a/requirements-to-freeze.txt b/requirements-to-freeze.txt index 7d087bb041c85a3eaaa52019a57e8b4c96750253..336128f5b605057fb25f8060277e2c5d457d64ca 100644 --- a/requirements-to-freeze.txt +++ b/requirements-to-freeze.txt @@ -1,3 +1,4 @@ +elasticsearch flask>=1.0.0 flask-admin flask-caching diff --git a/requirements.txt b/requirements.txt index 21a2a7bf853d4036b38f77d32f4bd0d14fa55e4c..c3ff3a87c1f2e5b6079a7cdb74f3e3ec821f36a1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,7 @@ certifi==2018.4.16 chardet==3.0.4 click==6.7 colorama==0.3.9 +elasticsearch==6.3.1 et-xmlfile==1.0.1 Flask==1.0.2 Flask-Admin==1.5.1