5

Qualcuno ha qualche esperienza nella configurazione di Amazon Elastic Beanstalk con PostGIS (in modo che io possa trarre vantaggio da Geodjango)?Configurazione Amazon Beanstalk elicoidale con PostGIS

ci sono una serie di caratteristiche che la configurazione di default (RDS, con MySQL) attualmente non supporta dalla scatola: 1. PostgreSQL + PostGIS 2. La possibilità di installare C/C++ le librerie, come GEOS e Proj .4

Grazie in anticipo

risposta

9

Se si desidera utilizzare geodjango con Amazon Elastic Beanstalk è necessario creare un costume AMI in cui è possibile installare PostGIS e quindi puntare l'Elastic Beanstalk Applicazione a quello AMI quando a girare in su.

Ecco un buon tutorial on how to customize an EBS AMI. C'è anche un AWS tutorial for that ma ho trovato il primo più facile da capire. Sulla mia AMI personalizzata ho installato geos, gdal, proj4 e postgis dal sorgente e postgres usando yum install postgres. Di seguito sono riportati i comandi che ho usato per installare tutte le librerie nell'AMI.

Per l'applicazione django per trovare le librerie, ho impostato anche una variabile ambientale aggiuntiva nella Console EBS di AWS. Nella barra dei menu del mio ambiente, sono passato alla configurazione -> configurazione software e modificato le proprietà dell'ambiente aggiungendo la proprietà LD_LIBRARY_PATH impostata come /usr/local/lib/:$LD_LIBRARY_PATH.

Poiché le istanze dell'app beanstalk non sono previste per eseguire il database stesso, ho anche creato un database ospitato Amazon RDS Postgres che è un servizio relativamente nuovo, supporta PostGIS.

Se metti tutto insieme, dovresti ottenere un'app GeoDjango molto scalabile!

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

Perfetto! Grazie –

+1

Se 'LD_LIBRARYPATH' è' LD_LIBRARY_PATH'? Funziona per me dopo aver apportato questo cambiamento. –

+0

sì, hai ragione. Quello era un errore di battitura lì. Grazie per avermelo fatto notare, ho appena aggiornato la risposta. – yellowcap

5

Si può anche fare a meno di un costume AMI, basta usare ebextensions. Ho provato questo con Amazon Instance (2013.09) ami-35792c5c, quindi usa quello invece di quelli più recenti. Se hai il tuo Django in Elastic Beanstalk 101 completato, sai di ebextensions. Le ebextension qui sotto andranno rapidamente puoi usare le seguenti estensioni. Basta inserire quanto segue nella cartella .ebextensions alla base del repository. Includo anche Postgres 9.3 e memcached in questi file di configurazione:

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 

La struttura del mio progetto è un po ' diverso. Il mio file delle impostazioni e urls.py mi sono spostato nella directory principale della directory del progetto, quindi ho dovuto modificare il percorso delle impostazioni in wsgi.py. Quindi aggiustalo di conseguenza. Utilizza i comandi contenitore_opzioni e le opzioni_opzioni che stavi utilizzando in precedenza.

Il file requirements.txt dovrebbe contenere al minimo:

Django==1.7.1 
Pillow 
psycopg2 

ho immagazzinare la maggior parte altre dipendenze python in ../ Lib, che includo nel mio PYTHONPATH così la mia struttura repo è come questo:

<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 strumento di distribuzione che ho costruito, utilizza tessuti. Ho preso ciò che mi piaceva dagli strumenti EB CLI e adattato finché non è stato adattato per django: https://github.com/radlws/django-awseb-tasks

NOTA: È estremamente importante utilizzare AMI ami-35792c5c quando si avvia l'ambiente. È l'unico che ha funzionato per me per questa configurazione. Se altre istanze funzionano, sentiti libero di modificarle in questa risposta. Vedi anche my original question.

+0

Il file 00_repo è fantastico! Imparo qualcosa di nuovo oggi – po5i

1

Se si desidera utilizzare la soluzione di radtek e si desidera utilizzare l'ultima versione di Amazon AMI (2014.9), è possibile che si verifichino problemi di dipendenza. This risolto per me.

+0

La mia risposta è vecchia, sentitevi liberi di aggiornare grazie. – radtek

3

Come ho detto here mia soluzione per un'immagine di 2017,03 era:

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