Search code examples
djangosolramazon-elastic-beanstalkdjango-oscar

Automatically setup Apache Solr with Django - Oscar on AWS Elastic Beanstalk


I need to ensure that Apache Solr is installed with my django-oscar application, and have been using these instructions with an .ebextensions config file to automatically install Solr and rebuild the index.

Here is the .ebextensions/03_solr.config

container_commands:
  01_install_solr:
    command: "wget http://archive.apache.org/dist/lucene/solr/4.7.2/solr-4.7.2.tgz &&
    tar xzf solr-4.7.2.tgz &&
    cd solr-4.7.2.example/solr/collection1 && 
    mv conf conf.original && 
    ln -s /opt/python/current/app/deploy/solr conf &&
    cd ../.. && 
    java -jar start.jar"
  02_rebuild_index:
    command: "python manage.py rebuild_index --noinput"

What do I need to add/update here to get the solr to install automatically on

eb deploy

?

Update: changed the bash to a single command. It looks like the process is completing, but on executing java -jar start.jar, the .ebextensions/03_solr.config task executes the

org.eclipse.jetty.server.AbstractConnector - Started [email protected]:8983

This process should really be a background process, as currently it is causing the deploy to hang, and timeout without deploying the new application. According to this SO post, to start a delayed job AFTER the new application version is deployed takes some work. Any suggestions? To clarify:

Run the

java -jar start.jar

command as a non-blocking, background process for EB?


Solution

  • So the answer did end up being the need to use the post deployment hooks, as described. Terminating and restarting the EB EC2 instance and a fresh deploy solved the issue.

    container_commands:
      01_install_solr:
        command: "cd /opt/python/current/app &&
        wget http://archive.apache.org/dist/lucene/solr/4.7.2/solr-4.7.2.tgz &&
        tar xzf solr-4.7.2.tgz &&
        cd solr-4.7.2/example/solr/collection1/ &&
        cp -r conf conf.original &&
        ln -s /opt/python/current/app/deploy/solr conf"
        leader_only: true
      02_rebuild_index:
        command: "python manage.py rebuild_index --noinput"
        leader_only: true
    commands:
      create_post_dir:
        command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
        ignoreErrors: false
    
      files:
        "/opt/elasticbeanstalk/hooks/appdeploy/post/start_solr.sh":
          mode: "000755"
          owner: root
          group: root
          content: |
            #!/usr/bin/env bash
            nohup java -jar /opt/python/current/app/solr-4.7.2/example/start.jar queue:work --daemon >/dev/null 2>&1 &