在AWS Elastic Beanstalk上部署Geodjango应用程序

3

我正在尝试在AWS Elastic Beanstalk上部署一个geodjango应用程序。配置是64位Amazon Linux 2017.09 v2.6.6运行Python 3.6。当我尝试部署时,出现了以下错误:

Requires: libpoppler.so.5()(64bit) Error: Package: gdal-java-1.9.2-8.rhel6.x86_64 (pgdg93) Requires: libpoppler.so.5()(64bit)

我要如何安装所需的包?我已经阅读了在 AWS Beanstalk 或 EC2 实例上配置带有 GeoDjango 支持的 Django,但我仍然遇到问题。我的 ebextensions 目前看起来是这样的:
commands:
  01_yum_update:
  command: sudo yum -y update
02_epel_repo:
  command: sudo yum-config-manager -y --enable epel
03_install_gdal_packages:
  command: sudo yum -y install gdal gdal-devel

packages:
  yum:
     git: []
     postgresql95-devel: []
     gettext: []
     libjpeg-turbo-devel: []
     libffi-devel: []

我认为在上述的.ebextensions文件中将poppler-devel.x86_64添加到package列表中应该可以解决问题。如果这样不行,请尝试使用yum search poppler返回的其他软件包之一。 - progfan
1个回答

10

为了我的未来项目以及任何想要开始使用geodjango的人,我将回答自己的问题。更新至2020年7月的答案:

创建一个ebextensions文件,在部署时安装EC2实例上的GDAL:

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

如上所示,该脚本使用测试函数检查gdal是否已存在。然后下载并安装Geos、Proj和GDAL库到usr/local目录下。在撰写本文时,geodjango(Django 3.0)支持最高到Geos 3.7、Proj 5.2(还需要projdatum,但当前版本不需要),以及GDAL 2.4。警告: 安装过程可能会花费很长时间。另外,我不是Linux专业人员,因此有些命令可能是冗余的,但它可以运行。

最后,我将以下两个环境变量添加到我的Elastic Beanstalk配置中:

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

如果您仍然遇到问题,我建议检查日志并通过ssh登录EC2实例以检查是否已安装。原始来源于此文章


太好了!很高兴你喜欢这篇文章,感谢你的总结。我目前正在解决一个问题,即EC2偶尔会被终止并产生一个新的实例,导致gdal库丢失。如果我成功解决了这个问题,我会在文章中发布更新。 - sean.hudson
为了未来的实例,最好将构建作为Beanstalk部署过程的一部分下载。有关详细信息,请参见此答案 - jmq
非常感谢!GEOS部分有一个小错误。

Geos

cd / sudo mkdir -p /usr/local/geos cd usr/local/geos/geos-3.7.2现在您不能切换到目录/geos-3.7.2,因为此目录尚未被创建。只需从此行代码中删除“/geos-3.7.2”,使其变为:

Geos

cd / sudo mkdir -p /usr/local/geos cd usr/local/geos然后它就可以工作了 :-)!
- Paul Strobel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接