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 @@