5

Czy ktoś ma doświadczenie w konfigurowaniu produktu Amazon Elastic Beanstalk za pomocą usługi PostGIS (aby móc korzystać z funkcji Geodjango)?Konfigurowanie produktu Amazon Elastic Beanstalk za pomocą PostGIS

Istnieje szereg cech, które ustawienie domyślne (RDS, wyposażony MySQL) nie obsługuje obecnie z pudełka: 1. PostgreSQL + PostGIS 2. Możliwość zainstalowania C/C++ bibliotek, takich jak GEOS i Proj .4

góry dzięki

Odpowiedz

9

Jeśli chcesz korzystać z Amazon Elastic geodjango Beanstalk trzeba utworzyć niestandardowy AMI gdzie można zainstalować postgis a następnie wskaż swój Elastic Beanstalk Zastosowanie tej AMI podczas rozpędzania.

Oto dobry tutorial on how to customize an EBS AMI. Istnieje również AWS tutorial for that, ale pierwszą łatwiej było zrozumieć. Na moim niestandardowym AMI zainstalowałem geos, gdal, proj4 i postgis ze źródła oraz postgres używając yum install postgres. Poniżej znajdują się polecenia, których użyłem do zainstalowania wszystkich bibliotek w AMI.

Aby aplikacja django mogła znaleźć biblioteki, ustawię dodatkową zmienną środowiskową w konsoli AWS EBS. W pasku menu mojego środowiska poszedłem do konfiguracji -> konfiguracja oprogramowania i edytowałem środowisko środowiskowe, dodając właściwość LD_LIBRARY_PATH ustawiona jako /usr/local/lib/:$LD_LIBRARY_PATH.

Ponieważ instancje aplikacji beanstralk nie są przeznaczone do uruchamiania samej bazy danych, ustawiłem również hostowaną bazę danych, która jest stosunkowo nową usługą, obsługuje PostGIS.

Jeśli umieścisz to wszystko razem, powinieneś otrzymać bardzo skalowalną aplikację 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

Perfect! Dziękuję –

+1

Czy 'LD_LIBRARYPATH' powinna być' LD_LIBRARY_PATH'? Działa to dla mnie po wprowadzeniu tej zmiany. –

+0

tak, masz rację. To był literówka. Dzięki za wskazanie, właśnie zaktualizowałem odpowiedź. – yellowcap

5

Można również zrobić to bez zwyczaju AMI, wystarczy użyć ebextensions. Przetestowałem to na przykładzie Amazon Instance (2013.09) ami-35792c5c, więc użyj tego zamiast nowych. Jeśli masz ukończone Django in Elastic Beanstalk 101, wiesz o rozszerzeniach e-mail. Poniższe ebextensions szybko się uruchomią, możesz skorzystać z następujących ebextensions. Po prostu umieść następujące elementy w folderze .ebextensions u podstawy repozytorium. Ja także PostgreSQL 9.3 i memcached w tych plikach config:

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 

Struktura moim projekcie jest nieco różne. Mój plik ustawień i urls.py przeniosłem się do katalogu głównego mojego katalogu projektu, więc musiałem zmienić ścieżkę do ustawień we wsgi.py. Dostosuj to odpowiednio. Po prostu użyj poleceń container_commands i options_settings, z których korzystałeś wcześniej.

Plik requirements.txt powinna zawierać co najmniej:

Django==1.7.1 
Pillow 
psycopg2 

przechowywać większość innych zależności Python w ../ Lib które obejmują w moim PYTHONPATH więc moja struktura repo jest tak:

<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> 

Zamówienie narzędzie wdrażania zbudowałem, wykorzystuje tkaninę. Wzięłam to, co mi się podobało, z narzędzi EB CLI i dostosowałem go, aż został dostosowany do django: https://github.com/radlws/django-awseb-tasks

UWAGA: Niezwykle ważne jest używanie AMI ami-35792c5c podczas uruchamiania swojego środowiska. To jedyny, który pracował dla mnie w tej konfiguracji. Jeśli działają inne instancje, możesz je edytować w tej odpowiedzi. Zobacz także my original question.

+0

Plik 00_repo jest świetny! Dziś uczę się czegoś nowego. – po5i

1

Jeśli chcesz korzystać z rozwiązania radtek i chcesz korzystać z najnowszej wersji Amazon AMI (2014.9), możesz napotkać problemy z zależnościami. This rozwiązał to dla mnie.

+0

Moja odpowiedź jest stara, zachęcamy do aktualizacji dzięki. – radtek

3

jak wspomniałem here moje rozwiązanie dla 2017.03 obrazem było:

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: []