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

Posted

技术标签:

【中文标题】在 AWS Elastic Beanstalk 上部署 Geodjango 应用程序【英文标题】:Deploying a Geodjango Application on AWS Elastic Beanstalk 【发布时间】:2018-09-13 05:06:24 【问题描述】:

我正在尝试在 AWS Elastic Beanstalk 上部署 geodjango 应用程序。配置为运行 Python 3.6 的 64 位 Amazon Linux 2017.09 v2.6.6。尝试部署时出现此错误:

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

如何安装所需的软件包?我通读了Setting up Django with GeoDjango Support in AWS Beanstalk or EC2 Instance,但我仍然遇到问题。我的 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: []

【问题讨论】:

我认为将poppler-devel.x86_64 添加到上述.ebextensions 文件中的package 列表中应该可以做到这一点。如果这不起作用,请尝试yum search poppler 返回的其他软件包之一。 【参考方案1】:

为了我未来的项目以及其他任何尝试开始使用 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

如图所示,脚本使用 test 函数检查 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

如果您仍然遇到问题,我建议您检查 EC2 实例中的日志和 ssh-ing 以检查安装是否发生。原始感谢this post

【讨论】:

很好!!很高兴您喜欢这篇文章,并感谢您的总结。我目前正在处理一个问题,即 EC2 偶尔会被终止并且一个新的被假脱机,导致 gdal 库丢失。如果我设法让它工作,我会发布这篇文章的更新。 为了将来的实例,最好将构建下载作为 Beanstalk 部署过程的一部分。详情请见this answer。

以上是关于在 AWS Elastic Beanstalk 上部署 Geodjango 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Elastic Beanstalk 上扩展 Magento

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

在 AWS Elastic Beanstalk 上运行节点和反应

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

在aws elastic beanstalk上上传文件?