5

Есть ли у кого-нибудь опыт настройки Amazon Elastic Beanstalk с PostGIS (чтобы я мог воспользоваться Geodjango)?Конфигурирование эластичного бобового стежка Amazon с PostGIS

Есть целый ряд функций, настройки по умолчанию (RDS, показывая MySQL) не поддерживает из коробки: 1. PostgreSQL + PostGIS 2. Возможность установки C/C++ библиотеки, такие как GEOS и Proj .4

заранее спасибо

ответ

9

Если вы хотите использовать GeoDjango с Amazon Elastic Beanstalk вам нужно создать пользовательский AMI, где вы можете установить PostGIS, а затем указать ваш Elastic Beanstalk приложение к этому AMI, когда раскручивается.

Хороший tutorial on how to customize an EBS AMI. Существует также AWS tutorial for that, но я нашел первый, который легче понять. В моем обычном AMI я установил geos, gdal, proj4 и postgis из источника и postgres, используя yum install postgres. Ниже приведены команды, которые я использовал для установки всех библиотек в AMI.

Для приложения django, чтобы найти библиотеки, я также установил дополнительную переменную окружения в консоли AWS EBS. В меню моей среды я пошел в конфигурацию -> конфигурацию программного обеспечения и отредактировал Свойства среды, добавив свойство LD_LIBRARY_PATH, установленное как /usr/local/lib/:$LD_LIBRARY_PATH.

Поскольку экземпляры приложения beanstalk не предназначены для запуска самой базы данных, я также создал размещенную базу данных Amazon RDS Postgres, которая является относительно новой услугой, она поддерживает PostGIS.

Если вы положите это все вместе, вы должны получить очень масштабируемое приложение GeoDjango!

sudo yum install postgresql postgresql-devel postgresql-server postgresql9-contrib gcc gcc-c++ make libtool curl libxml2 libxml2-devel python-devel 

wget http://download.osgeo.org/proj/proj-4.8.0.zip 
unzip proj-4.8.0.zip 
cd proj-4.8.0 
./configure 
make 
sudo make install 
cd .. 

wget http://download.osgeo.org/geos/geos-3.4.2.tar.bz2 
tar -xvf geos-3.4.2.tar.bz2 
cd geos-3.4.2 
./configure 
make 
sudo make install 
cd .. 

wget http://download.osgeo.org/gdal/1.10.1/gdal1101.zip 
unzip gdal1101.zip 
cd gdal-1.10.1 
./configure --with-python=yes 
make 
sudo make install 
cd .. 

wget http://download.osgeo.org/postgis/source/postgis-2.1.1.tar.gz 
tar -xvf postgis-2.1.1.tar.gz 
cd postgis-2.1.1 
./configure 
make 
sudo make install 
+0

Отлично! Спасибо –

+1

Должно ли 'LD_LIBRARYPATH' быть' LD_LIBRARY_PATH'? Это работает для меня после того, как я сделаю это изменение. –

+0

Да, вы правы. Это была опечатка. Спасибо, что указали это, просто обновили ответ. – yellowcap

5

Вы также можете сделать это без обычая AMI, просто использовать ebextensions. Я проверил это с Amazon Instance (2013.09) ami-35792c5c, поэтому используйте его вместо новых. Если у вас есть ваш Django in Elastic Beanstalk 101, вы знаете о ebextensions. Ниже приведенные ниже действия будут быстро развиваться, вы можете использовать следующие ebextensions. Просто поместите следующее в папку .ebextensions в базе вашего репозитория. Я также включают в Postgres 9.3 и Memcached в этих конфигурационных файлах:

00_repo_ostgis.config:

files: 
    "/etc/yum.repos.d/pgdg-93-redhat.repo": 
    mode: "000644" 
    owner: root 
    group: root 
    content: | 
     [pgdg93] 
     name=PostgreSQL 9.3 $releasever - $basearch 
     baseurl=http://yum.postgresql.org/9.3/redhat/rhel-6-$basearch 
     enabled=1 
     gpgcheck=1 
     gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-93 

     [pgdg93-source] 
     name=PostgreSQL 9.3 $releasever - $basearch - Source 
     failovermethod=priority 
     baseurl=http://yum.postgresql.org/srpms/9.3/redhat/rhel-6-$basearch 
     enabled=0 
     gpgcheck=1 
     gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-93 

commands: 
    epel_repo: 
    command: yum-config-manager -y --enable epel 
    remi_repo: 
    command: yum-config-manager -y --enable remi 

packages: 
    rpm: 
    pgdg-redhat93-9.3-1: 'http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm' 
    remi: 'http://rpms.famillecollet.com/enterprise/remi-release-6.rpm' 
    qt4-devel: 'http://mirror.centos.org/centos/6/os/x86_64/Packages/qt-4.6.2-28.el6_5.x86_64.rpm' 

01_app_postgis.config:

packages: 
    yum: 
    libtiff-devel: '' 
    libjpeg-devel: '' 
    libzip-devel: '' 
    freetype-devel: '' 
    postgresql-devel: '' 
    gdal: '' 
    gdal-python: '' 
    geos: '' 
    proj: '' 
    libmemcached: '' 
    libmemcached-devel: '' 
    cyrus-sasl-devel: '' 
    zlib-devel: '' 

container_commands: 
    01_collectstatic: 
    command: 'PYTHONPATH=.:..:../lib cd site/<your_project> && ./manage.py collectstatic -c --noinput && cd ../..' 
    leader_only: true 
    02_migrate: 
    command: 'PYTHONPATH=.:..:../lib cd site/<your_project> && ./manage.py migrate --noinput && cd ../..' 
    leader_only: true 

option_settings: 
    - namespace: aws:elasticbeanstalk:container:python 
    option_name: WSGIPath 
    value: site/<your_project>/wsgi.py 
    - namespace: aws:elasticbeanstalk:container:python:staticfiles 
    option_name: /static/ 
    value: site/<your_project>/static/ 
    - option_name: DJANGO_SETTINGS_MODULE 
    value: settings_prod 

Структура моего проекта немного другой. Мой файл настроек и urls.py Я перешел в корень каталога проекта, поэтому мне пришлось изменить путь к настройкам в wsgi.py. Поэтому отрегулируйте это соответствующим образом. Просто используйте параметры container_commands и options_settings, которые вы использовали раньше.

Ваш файл requirements.txt должен содержать как минимум:

Django==1.7.1 
Pillow 
psycopg2 

Я храню большинство других зависимостей питона в ../ Lib, которые я включил в моем PYTHONPATH так моя структура репо, как это:

<your_project>/ 
├── requirements.txt 
├── .ebextensions/ 
│   ├── 00_repos_postgis.config 
│   └── 01_app_postgis.config 
└── site/ 
    ├── <your_project> 
      │ ├── wsgi.py 
      │ ├── settings_prod.py # used for EB, like settings_local.py but uses env vars 
    │   └── settings.py 
   └── lib/ 
     └── <all pip dependencies> 

Checkout инструмент развертывания я построил, он использует ткань. Я взял то, что мне понравилось из инструментов EB CLI, и скорректировался до тех пор, пока он не был адаптирован для django: https://github.com/radlws/django-awseb-tasks

ПРИМЕЧАНИЕ: Очень важно использовать AMI ami-35792c5c при запуске среды. Это единственный, который работал для меня для этой установки. Если другие экземпляры работают, не стесняйтесь редактировать их в этом ответе. Также см. my original question.

+0

Файл 00_repo замечательный! Сегодня я узнаю что-то новое. – po5i

1

Если вы хотите использовать решение radtek и хотите использовать новейший AMAZA (2014.9) Amazon, вы можете столкнуться с проблемами зависимости. This решил это для меня.

+0

Мой ответ старый, не стесняйтесь обновлять спасибо. – radtek

3

Как я упомянул here мое решение для 2017.03 изображение было:

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 

files: 
    "/etc/httpd/conf.d/wsgihacks.conf": 
    mode: "000644" 
    owner: root 
    group: root 
    content: | 
     WSGIPassAuthorization On 

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