[Django]-Deploying a Geodjango Application on AWS Elastic Beanstalk

10๐Ÿ‘

โœ…

Iโ€™m going to answer my own question for the sake my future projects and anyone else trying to get started with geodjango. Updating this answer as of July 2020

Create an ebextensions file to install GDAL on the EC2 instance at deployment:

01_gdal.config

commands:
  01_install_gdal:
    test: "[ ! -d /usr/local/gdal ]"
    command: "/tmp/gdal_install.sh"
files:
  "/tmp/gdal_install.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      sudo yum-config-manager --enable epel
      sudo yum -y install make automake gcc gcc-c++ libcurl-devel proj-devel geos-devel

      # Geos
      cd /
      sudo mkdir -p /usr/local/geos
      cd usr/local/geos/geos-3.7.2
      sudo wget geos-3.7.2.tar.bz2 http://download.osgeo.org/geos/geos-3.7.2.tar.bz2
      sudo tar -xvf geos-3.7.2.tar.bz2
      cd geos-3.7.2
      sudo ./configure
      sudo make
      sudo make install
      sudo ldconfig

      # Proj4
      cd /
      sudo mkdir -p /usr/local/proj
      cd usr/local/proj
      sudo wget -O proj-5.2.0.tar.gz http://download.osgeo.org/proj/proj-5.2.0.tar.gz
      sudo wget -O proj-datumgrid-1.8.tar.gz http://download.osgeo.org/proj/proj-datumgrid-1.8.tar.gz
      sudo tar xvf proj-5.2.0.tar.gz
      sudo tar xvf proj-datumgrid-1.8.tar.gz
      cd proj-5.2.0
      sudo ./configure
      sudo make
      sudo make install
      sudo ldconfig

      # GDAL
      cd /
      sudo mkdir -p /usr/local/gdal
      cd usr/local/gdal
      sudo wget -O gdal-2.4.4.tar.gz http://download.osgeo.org/gdal/2.4.4/gdal-2.4.4.tar.gz
      sudo tar xvf gdal-2.4.4.tar.gz
      cd gdal-2.4.4
      sudo ./configure
      sudo make
      sudo make install
      sudo ldconfig

As shown, the script checks whether gdal already exists using the test function. It then downloads the Geos, Proj, and GDAL libraries and installs them in the usr/local directory. At the time of writing this, geodjango (Django 3.0) supports up to Geos 3.7, Proj 5.2 (which also requires projdatum. Current releases do not require it), and GDAL 2.4 Warning: this installation process can take a long time. Also I am not a Linux professional so some of those commands may be redundant, but it works.

Lastly I add the following two environment variables to my Elastic Beanstalk configuration:

LD_LIBRARY_PATH: /usr/local/lib:$LD_LIBRARY_PATH
PROJ_LIB: usr/local/proj

If you still have troubles I recommend checking the logs and ssh-ing in the EC2 instance to check that installation took place. Original credit to this post

๐Ÿ‘คleelum1

Leave a comment