time

Установка GeoDjango, PostgreSQL 9, PostGIS под Ubuntu/CentOS

Решил собрать в одном месте описание по установке связки GeoDjango + PostgreSQL + PostGIS под Ubuntu и CentOS.

Теория по ГИС + python хорошо описана в книге Erik Westra, Python Geospatial Development.

Практика по GeoDjango есть тут.

Новое в PostgreSQL 9.

Ubuntu

Под Ubuntu последние версии Postgresql, Proj, GEOS, GDAL есть в двух дополнительных репозитариях

sudo add-apt-repository ppa:pitti/postgresql
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update
sudo apt-get install postgresql-9.0 postgresql-server-dev-9.0 postgresql-contrib-9.0 proj libgeos-3.2.2
libgeos-c1 libgeos-dev libgdal1-1.8.0 libgdal1-dev build-essential libxml2 libxml2-dev checkinstall

В репозитарии ubuntugis-unstable есть postgis, но идет без шаблонов (templates). Поэтому установим postgis из сорцов

wget http://postgis.refractions.net/download/postgis-1.5.2.tar.gz
tar zxvf postgis-1.5.2.tar.gz && cd postgis-1.5.2/
sudo ./configure && sudo make && sudo checkinstall --pkgname postgis-1.5.2 
--pkgversion 1.5.2-src --default

Установим недостающие python-модули

pip install psycopg2==2.4.1 pyproj

Установил psycopg2 версии 2.4.1, т.к. 2.4.2 выкидывает ошибку

psycopg2.ProgrammingError: autocommit cannot be used inside a transaction

Укажем пароль для пользователя postgres

sudo passwd postgres

Добавим в /etc/postgresql/9.0/main/pg_hba.conf

local all postgres trust
local all all md5

Создадим шаблон для будущих баз с поддержкой ГИС.

sudo su - postgres
wget http://docs.djangoproject.com/en/dev/_downloads/create_template_postgis-1.5.sh
sh create_template_postgis-1.5.sh

Создадим тестувую базу

createdb -T template_postgis testgis

Укажем путь к библиотеке GDAL в settings.py (я использую django 1.3)

GDAL_LIBRARY_PATH = "/usr/lib/libgdal1.8.0.so.1"

Проверим установленные компоненты (предполагается, что django-проект уже создан).

./manage.py shell

#GDAL
>>> from django.contrib.gis import gdal
>>> gdal.HAS_GDAL
True

#GEOS
>>> from django.contrib.gis import geos
>>> geos.geos_version()

#Proj
import pyproj
pyproj.__version__
pyproj.test()

Запустим тесты GeoDjango, для этого добавим в INSTALLED_APPS - django.contrib.gis и создадим файл postgis.py в корне проекта с таким содержанием

TEST_RUNNER = 'django.contrib.gis.tests.GeoDjangoTestSuiteRunner'

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'testgis',
        'USER': 'postgres',
        'PASSWORD': 'qwerty',
#        'OPTIONS': {
#            'autocommit': True,
#        }
    }

}

GDAL_LIBRARY_PATH = "/usr/lib/libgdal1.8.0.so.1"

Запустим тесты

python manage.py test --settings=postgis

CentOS

Под CentOS добавим новые репозитарии: PostgreSQL Yum и EPEL.

rpm -Uhv http://yum.pgrpms.org/reporpms/9.0/pgdg-centos-9.0-2.noarch.rpm
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

Подправим файл /etc/yum.repos.d/CentOS-Base.repo и исключим установку postgresql пакетов из базового репозитария

[base]
name=CentOS-$releasever - Base
...
exclude=postgresql*
exclude=geos*

#released updates 
[updates]
name=CentOS-$releasever - Updates
...
exclude=postgresql*
exclude=geos*

Установим PostgreSQL

yum install gcc gcc-c++ postgresql90-contrib postgresql90-docs postgis90 postgis90-utils 
postgis90-docs postgresql90-server postgresql90-devel proj geos

Обновление с PostgreSQL 8.4 на 9.0 описанно тут.

Инициализируем БД

service postgresql-9.0 initdb
service postgresql-9.0 start

Установим python 2.6 и pip (Еще один репозитарий с python2.6 для CentOS)

yum install python26-devel python26-setuptools
easy_install-2.6 pip

Создадим виртуальное окружение, добавим туда нужные модули

pip-2.6 install Django pyproj psycopg2==2.4.1

Укажем пароль для пользователя postgres.

passwd postgres

Добавим в /var/lib/pgsql/9.0/data/pg_hba.conf

local all postgres trust
local all all md5

Перезапустим postgresql

service postgresql-9.0 restart

Создадим шаблон

sudo su - postgres
wget http://docs.djangoproject.com/en/dev/_downloads/create_template_postgis-1.5.sh
export PATH=/usr/pgsql-9.0/bin:$PATH
sh create_template_postgis-1.5.sh
createdb -T template_postgis testgis

Установим checkinstall

wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz
tar zxvf checkinstall-1.6.2.tar.gz && cd checkinstall-1.6.2
make
make install
yum install rpm-build

Установим последнюю версию GDAL

wget http://download.osgeo.org/gdal/gdal-1.8.1.tar.gz
tar zxvf gdal-1.8.1.tar.gz && cd gdal-1.8.1
./configure
make
/usr/local/sbin/checkinstall
rpm -i /usr/src/redhat/RPMS/i386/gdal-1.8.1-1.i386.rpm

Укажем путь к библиотеке GDAL в settings.py (django 1.3)

GDAL_LIBRARY_PATH = "/usr/local/lib/libgdal.so"

Дополнения и примеры

blog comments powered by Disqus