py-phias

Python application that can operate with FIAS (Russian Address Object DB)

Простое приложение для работы с БД ФИАС, написано для Python 2.7, использует БД PostgreSQL

Содержание

Возможности

  1. API (выходной формат - JSON), основные функции которого:
    • Актуализация AOID, AOGUID.
    • Получение полного дерева адресного объекта по AOID.
    • Поиск адресного объекта по произвольной строке, выдает 10 самых релеватных результатов, может быть "мягким", с более широкими вариациями и исправлением опечаток (для подсказок), или "строгим" (к примеру, для автоматического импорта из внешних систем).
  2. Автоматическое развертывание базы ФИАС
    • Из директории с файлами XML (like 'AS_ADDROBJ_20160107_xxx.XML').
    • Из локального файла архива (.rar).
    • Напрямую с HTTP сервера ФНС.
  3. Актуалиация базы (из XML, HTTP) с возможностью выбора необходимых обновлений.

Установка

Протестирована работа на следующих ОС: Windows (8.1) и Debian Jessie

Зависимости

Внимание! Только Python 2.7+ (на 3+ не тестировал), только PostgreSQL, только Sphinx. MySQL/MariaDB, ElasticSearch/Solr не поддерживаются и, скорее всего, не будут.

Для работы приложения необходимо достаточное кол-во RAM (1Gb+) и ~5.5Gb места на диске (3-3.5Gb для скачивания архива с базой, 350-400Mb для индексов Sphinx, 1Gb для базы). Также необходимы root права (администратора, для Windows), для работы searchd и предварительной установки. Рекомендую устанавливать или на отдельном сервере, или на своей машине, либо же на VPS. На shared хостинге работоспособность не гарантируется (только если хостер Вам сам все установит и настроит, и разрешит запуск демонов - читай: "невозможно")

Предварительно обязательно установить и настроить:

  1. Python 2.7.x, pip Для Windows качаем - ставим, для Debian:

    sudo apt-get install python-setuptools
    sudo easy_install pip
    sudo pip install --upgrade pip 
    
  2. PostgreSql 9.5 и выше (из-за синтаксиса ON CONFLICT ... DO) Для Windows, как обычно, качаем - ставим, для Debian:

    sudo sh -c 'echo deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main 9.5 > /etc/apt/sources.list.d/postgresql.list'
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    sudo apt-get update
    sudo apt-get install postgresql-9.5
    

    Затем создайте пользователя и базу данных и установите расширение pg_trgm:

    sudo adduser phias
    sudo -u postgres psql
    postgres=# CREATE DATABASE fias_db;
    postgres=# CREATE USER phias WITH password 'phias';
    postgres=# GRANT ALL privileges ON DATABASE fias_db TO phias;
    postgres=# ALTER USER phias WITH SUPERUSER;
    postgres=# \q
    sudo -u phias psql -d fias_db -U phias
    postgres=# CREATE EXTENSION pg_trgm SCHEMA public;
    
  3. Sphinx 2.2.1 и новее: Windows, Debian:

    cd /tmp
    wget http://sphinxsearch.com/files/sphinx-2.2.10-release.tar.gz
    tar xzf sphinx-2.2.10-release.tar.gz
    cd sphinx-2.2.10-release
    sudo apt-get install postgresql-server-dev-9.5
    ./configure --without-mysql --with-pgsql
    make
    sudo make install
    
  4. Web-сервер с поддержкой WSGI, любой, по Вашему желанию.

Windows

  1. Установить lxml, скачав отсюда.

  2. Установить unrar.exe (можно установить WinRar целиком).

  3. Установить sphinxapi последней версии (либо взять из директории Sphinx):

    python -m pip install https://github.com/Romamo/sphinxapi/zipball/master
    
  4. Установить приложение, скачав релиз https://github.com/jar3b/py-phias/archive/v0.0.2.zip, распакуйте его в удобное Вам место и запустите оттуда python -m pip install -r requirements.txt

Debian Linux

  1. Установить libxml:

    sudo apt-get install python-dev libxml2 libxml2-dev libxslt-dev
    
  2. Установить unrar (non-free):

    sudo sh -c 'echo deb ftp://ftp.us.debian.org/debian/ stable main non-free > /etc/apt/sources.list.d/non-free.list'
    sudo apt-get update
    sudo apt-get install unrar
    
  3. Установить sphinxapi последней версии:

    sudo pip install https://github.com/Romamo/sphinxapi/zipball/master
    
  4. Установить, собственно, приложение:

  • полностью:

    sudo mkdir -p /var/www/py-phias
    sudo chown phias: /var/www/py-phias
    wget https://github.com/jar3b/py-phias/archive/v0.0.2.tar.gz
    sudo -u phias tar xzf v0.0.1.tar.gz -C /var/www/py-phias --strip-components=1
    cd /var/www/py-phias
    sudo pip install -r requirements.txt
    
  • как repo:

    sudo mkdir -p /var/www/py-phias
    sudo chown phias: /var/www/py-phias
    cd /var/www
    sudo -u phias -H git clone --branch=master https://github.com/jar3b/py-phias.git py-phias
    sudo pip install -r requirements.txt
    

Настройка

Первоначальная настройка базы данных

  1. Настроим конфиг, для этого необходимо изменить параметры в Вашем wsgi-entrypoint (в моем случае passenger_wsgi.py): прописать параметры доступа к базе, демону Sphinx и путь, куда будут сохраняться данные Sphinx; по этому пути дополнительно необходимо создать 3 папки: log, run и data. Все доступные настройки можно увидеть в aore/config/common.py

  2. Создадим базу:

    • из архива sudo -u phias python manage.py -b create -s /tmp/fias_xml.rar
    • из директории sudo -u phias python manage.py -b create -s /tmp/fias_xml_unpacked
    • онлайн, с сервера ФНС sudo -u phias python manage.py -b create -s http
    • Также, можно указать конкретную версию ФИАС только при http загрузке, с ключом --update-version <num>, где num - номер версии ФИАС, все доступные версии можно получить, выполнив manage.py -v.

    Внимание! Если Вы инициализируете БД из архива или директории, для последующего корректного обновления необходимо прописать номер версии ФИАС, которую Вы только что установили, в базе приложения, таблица CONFIG

  3. Проиндексируем Sphinx:

    • Windows: python manage.py -c -i C://sphinx//indexer.exe -o C://sphinx//sphinx.conf
    • Debian: sudo python manage.py -c -i indexer -o /usr/local/sphinx/etc/sphinx.conf
  4. Затем запустим searchd:

    • Windows:
      • Устанавливаем службу: C:\Sphinx\bin\searchd --install --config C:\Sphinx\sphinx.conf.in --servicename sphinxsearch
      • и запускаем: net start sphinxsearch
    • Debian: sudo searchd --config /usr/local/sphinx/etc/sphinx.conf
  5. Настроим WSGI server, я использую nginx + passenger (см. файл passenger_wsgi.py). Вы можете использовать любое приемлемое сочетание.

Description
Python application that can operate with FIAS
Readme 229 KiB
Languages
Python 100%