Показаны сообщения с ярлыком mongodb. Показать все сообщения
Показаны сообщения с ярлыком mongodb. Показать все сообщения

четверг, 13 октября 2016 г.

Маленькая но информативная книга по Mongodb

Глава 1 — Основы

Начнём мы с изучения основных механизмов работы с MongoDB. Это самое основное, что понадобится для понимания MongoDB, но также мы коснёмся высокоуровневых вопросов — о том, где применима MongoDB.
Для начала нужно понять шесть основных концепций.
  1. MongoDB — концептуально то же самое, что обычная, привычная нам база данных (или в терминологии Oracle — схема). Внутри MongoDB может быть ноль или более баз данных, каждая из которых является контейнером для прочих сущностей.
  2. База данных может иметь ноль или более «коллекций». Коллекция настолько похожа на традиционную «таблицу», что можно смело считать их одним и тем же.
  3. Коллекции состоят из нуля или более «документов». Опять же, документ можно рассматривать как «строку».
  4. Документ состоит из одного или более «полей», которые — как можно догадаться — подобны «колонкам».
  5. «Индексы» в MongoDB почти идентичны таковым в реляционных базах данных.
  6. «Курсоры» отличаются от предыдущих пяти концепций, но они очень важны (хотя порой их обходят вниманием) и заслуживают отдельного обсуждения. Важно понимать, что когда мы запрашиваем у MongoDB какие-либо данные, то она возвращает курсор, с которыми мы можем делать все что угодно — подсчитывать, пропускать определённое число предшествующих записей — при этом не загружая сами данные.

вторник, 11 октября 2016 г.

Установка cms Django + nginx + uWSGI + mongodb + pip на DEBIAN JESSIE


Устанавливаем совместимости Django + pip + dev
  1. # apt install python-django python-pip python-dev //установка приложений
  2. # python --version //установленная версия
  3. # pip --version    //версия
  4. # pip install -U pip //Обновляем pip 

Устанавливаем nginx:

  • # apt install nginx //установка
  • # service nginx stop | start | reload | restart | status | configtest | rotate | upgrade  //действия
  • # nano etc/nginx/sites-available/default //конфигурационный файл nginx
Устанавливаем MONGODB



  • //Импортируем публичный ключ.
  • # apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
  • Подключаем репозиторий
  • # echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list
  • Обновляем информацию
  • # apt update
  • # apt install mongodb-10gen //устанавливаем mongodb
  • # apt install php-pear php5-dev php5-cli//установка php драйверов для mongo
  • # pecl install mongo   //установка драйверов
  • # service mongodb start //стартуем приложение баз данных
  • # mongod --version  //смотрим версию mongodb
  • # nano /etc/mongodb //конфигурационный файл
найдите ваш файл php.ini, и добавьте туда следующий отрывок кода:

extension=mongo.so

Вы должны заметить похожий блок кода где-то в середине файла, который имеет несколько других строк с повторяющимся extension=name. Большинство расширений ограничены комментарием, но строки без символа # представляют собой на данный момент активные расширения.

После того, как вы добавили эту строку, сохраните и закройте файл, затем перезагрузите ваш веб-сервер apache, чтобы изменения вступили в силу.

Устанавливаем изолированное окружение python
  • # apt install virtualenv
Устанавливаем DJANGO
  • # pip install django  
Переходим в домашнюю директорию (там где у нас буду храниться проекты)
  • # cd home
  • # virtualenv uwsgi-tutorial //создаем учебник uwsgi
  • # cd uwsgi-tutorial //переходим в созданную нами учебник
  • # source bin/activate  //активируем учебник в окружении
Инсталлируем в домашней директории(# cd home/) проект mysite
  • # django-admin.py startproject mysite 
  • # cd mysite
  • # pip install uwsgi //устанавливаем  uWSGI - сайт настройки
Создаем тестовый файл(в home/mysite/) и убеждаемся что uWSGI работает
  • nano test.py - вставляем следующий текст: 
    • def application(env, start_response):
          start_response('200 OK', [('Content-Type','text/html')])
          return [b"Hello World"] # python3
          #return ["Hello World"] # python2
Запускаем uWSGI

  • # uwsgi --http :8000 --wsgi-file test.py  //сервер запущен: localhost:8000  (Hello World)
  • web client < - >uWSGI < - > Python
После того как мы убедились что uWSGI работает, мы запустим наш проект в home/mysite/
и увидим что наш DJANGO работает.
Соберем наш проект:
  • # python manage.py migrate      //собираем проект
  • # python manage.py runserver 0.0.0.0:8000 //запускаем сервер нашего проекта manage.py
Мы проверили, что отдельные файлы проекта запускаются через django и  uWSGI, теперь запустим сайт проект собранный нами.
  • # uwsgi --http :8000 --module mysite.wsgi
Конфигурируем наш сайт-проект для работы через nginx
  • # cd etc/nginx/     //переходим в папку nginx
  • # cp uwsgi_params /home/mysite/    //копируем файл uwsgi_params в директорию нашего проекта 
  • # cd home/mysite/          //переходим в директорию нашего проекта 
  • # nano mysite_nginx.conf  //создаем конфигурационный файл для связки с nginx
  • с текстом отсюда  и нашими параметрами
  • # ln -s ~/home/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
Указываем статические файлы:
Перед запуском проекта на nginx необходимо указать django статические файлы в настройках нашего проекта в home/mysite/mysite/settings.py добавим:
  • # nano settings.py
    • вставим этот текст:   STATIC_ROOT = os.path.join(BASE_DIR, "static/")
  • # python manage.py collectstatic
Тестируем наши настройки nginx
  • # service nginx restart  //перезапускаем nginx для применения настроек
Протестируем медиа директорию mkdir /home/mysite/media
  • закинем в эту папку media  image.jpg
  • и в браузере перейдем по ссылке http://адрес_сайта:8000/media/image.jpg
  • Убеждаемся, что картинки видна и идем дальше

Настроем чтобы наш сайт работал через сокет,
  • открываем наш конфигурацинный файл mysite_nginx.com
  • и делаем так:
  • server unix:///home/mysite/mysite.sock; # for a file socket
    # server 127.0.0.1:8001; # for a web port socket (we'll use this first)
  • # service nginx restart       //перезапускаем nginx
  • # uwsgi --socket mysite.sock --wsgi-file test.py
  • открываем адрес нашего проекта в браузере  http://адрес_сайта:8000
ЕСЛИ НЕ РАБОТАЕТ
смотрим логи nginx по адресу /var/log/nginx/error.log
если там что-то типа connect() to unix:///home/mysite/mysite.sock failed (13: Permission denied)
То делаем это

  • # uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666 (не очень хорошо так делать)
  • # uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664 (так будет лучше)
можно добавить пользователя под кем мы работаем в группу nginx (скорее всего это www-data)

После того как мы убедились что тестовый файл(test.py) у нас запускается мы запускаем наш проект mysite.
  • # uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=666
Создадим настройки для запуска uWSGI через ini файл

  • # cd /home/mysite  //переходим в директория нашего проекта
  • # nano mysite_uwsgi.ini           //создаем файл настройки uwsgi
  • внутри файла пишем, то что написано здесь и правим под свой проект
  • # uwsgi --ini mysite_uwsgi.ini   //запустим с настройками