diff --git a/Dockerfile.solr b/Dockerfile.solr new file mode 100644 index 00000000..01ee12cf --- /dev/null +++ b/Dockerfile.solr @@ -0,0 +1,149 @@ +FROM ubuntu:12.04.5 + +# defines root user, to perform privileged operations +USER root + +# enable apt mirrors (best performance due to use the closest repository) +RUN readonly APT_SOURCES="/etc/apt/sources.list" \ + && readonly UBUNTU_RELEASE_NAME="$(cat /etc/lsb-release | grep CODENAME | cut -d '=' -f2)" \ + && sed --in-place \ + --regexp-extended \ + --expression \ + "1s/^/deb mirror:\/\/mirrors\.ubuntu\.com\/mirrors\.txt "${UBUNTU_RELEASE_NAME}"-security main restricted universe multiverse\n\n/" \ + --expression \ + "1s/^/deb mirror:\/\/mirrors\.ubuntu\.com\/mirrors\.txt "${UBUNTU_RELEASE_NAME}"-backports main restricted universe multiverse\n/" \ + --expression \ + "1s/^/deb mirror:\/\/mirrors\.ubuntu\.com\/mirrors\.txt "${UBUNTU_RELEASE_NAME}"-updates main restricted universe multiverse\n/" \ + --expression \ + "1s/^/deb mirror:\/\/mirrors\.ubuntu\.com\/mirrors\.txt "${UBUNTU_RELEASE_NAME}" main restricted universe multiverse\n/" \ + --expression \ + "1s/^/\# Enable Ubuntu mirrors and multiverse\n/" \ + "${APT_SOURCES}" + +# upgrade Ubuntu packages, install security updates and required packages +RUN readonly UBUNTU_PACKAGES=" \ + curl \ + " \ + && apt-get update \ + && apt-get upgrade --assume-yes \ + && apt-get install --no-install-recommends \ + --assume-yes \ + ${UBUNTU_PACKAGES} \ + # remove apt cache in order to improve Docker image size + && apt-get clean + +## Solr +# environment variables +ENV SOLR_VERSION 3.5.0 +ENV SOLR_USER solr +ENV SOLR_UID 8983 +ENV SOLR_PORT 8983 + +# declare required packages +RUN readonly SOLR_PACKAGES=" \ + openjdk-6-jre-headless \ + tomcat6 \ + " \ + # install packages + && apt-get install \ + --no-install-recommends \ + --assume-yes \ + ${SOLR_PACKAGES} \ + # remove apt cache in order to improve Docker image size + && apt-get clean + +# create group +RUN groupadd \ + --system \ + --gid ${SOLR_UID} \ + ${SOLR_USER} \ + # create user and add to group + && useradd \ + --system \ + --uid ${SOLR_UID} \ + --gid ${SOLR_USER} \ + ${SOLR_USER} + +# create temp folder +RUN mkdir /tmp/solr \ + && cd /tmp/solr \ + # download Solr + && curl \ + --silent \ + --show-error \ + --location \ + --output apache-solr-${SOLR_VERSION}.tgz \ + https://archive.apache.org/dist/lucene/solr/${SOLR_VERSION}/apache-solr-${SOLR_VERSION}.tgz \ + # extract Solr + && tar \ + --extract \ + --gunzip \ + --file \ + apache-solr-${SOLR_VERSION}.tgz \ + --directory \ + /opt \ + # link Solr folder + && ln \ + --symbolic \ + --force \ + /opt/apache-solr-${SOLR_VERSION} \ + /opt/solr \ + # change permissions + && chown \ + --recursive \ + ${SOLR_USER}:${SOLR_USER} \ + /opt/apache-solr-${SOLR_VERSION} \ + && chown \ + --recursive \ + ${SOLR_USER}:${SOLR_USER} \ + /opt/solr \ + # purge source files + && cd / \ + && rm \ + --recursive \ + --force \ + /tmp/solr + +ADD schema.xml /opt/apache-solr-3.5.0/example/solr/conf/schema.xml + +## DUMB-init +# more information at: https://github.com/Yelp/dumb-init + +# environment variables +ENV DUMB_INIT_VERSION 1.2.0 + +# download +RUN mkdir \ + --parents \ + /tmp/dumb-init \ + && cd /tmp/dumb-init \ + && curl \ + --silent \ + --show-error \ + --location \ + --remote-name \ + https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64.deb \ + # install + && dpkg \ + --install \ + dumb-init_${DUMB_INIT_VERSION}_amd64.deb \ + # remove temp folder + && cd / \ + && rm \ + --force \ + --recursive \ + /tmp/dumb-init + +## Docker specifics +# expose Solr service port +EXPOSE ${SOLR_PORT} + +# drop back to the regular Solr user - good practice +USER ${SOLR_USER} + +# change workdir to Solr folder +WORKDIR /opt/solr/example + +# docker entrypoint/cmd configuration +ENTRYPOINT ["/usr/bin/dumb-init", "--"] +CMD ["java","-Xmx256m","-jar","start.jar"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 47838ead..85411e7a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: links: - mysql:exmap-mysql - redis:exmap-redis - - elastic:exmap-elastic + - solr:exmap-solr environment: - DEBUG=True - LOCAL_DEV=True @@ -25,6 +25,9 @@ services: - MYSQL_DATABASE=expomap - ELASTICSEARCH_HOST=elastic - EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend + - SEARCH_ENGINE=haystack.backends.solr_backend.SolrEngine + - SEARCH_URI=http://solr:8983/solr + - SEARCH_INDEX_NAME=haystack mysql: restart: always @@ -45,12 +48,10 @@ services: volumes: - ./data/redis:/var/lib/redis - elastic: - restart: always - image: elasticsearch:2.4.6 - container_name: exmap-elastic + solr: + build: + context: . + dockerfile: Dockerfile.solr + container_name: exmap-solr ports: - - 9200:9200 - - 9300:9300 - volumes: - - ./data/elasticsearch:/usr/share/elasticsearch/data + - "8983:8983" diff --git a/proj/settings.py b/proj/settings.py index d03fd1be..662938e2 100644 --- a/proj/settings.py +++ b/proj/settings.py @@ -437,9 +437,9 @@ PYMORPHY_DICTS = { # search backend HAYSTACK_CONNECTIONS = { 'default': { - 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', - 'URL': 'http://%s:9200/' % os.environ.get('ELASTICSEARCH_HOST'), - 'INDEX_NAME': 'haystack', + 'ENGINE': os.environ.get('SEARCH_ENGINE'), + 'URL': os.environ.get('SEARCH_URI'), + 'INDEX_NAME': os.environ.get('SEARCH_INDEX_NAME'), }, } diff --git a/schema.xml b/schema.xml index cb9d9e20..78fe08a8 100644 --- a/schema.xml +++ b/schema.xml @@ -71,7 +71,7 @@ @@ -87,7 +87,7 @@