Но CouchDB - это не только NoSQL-хранилище, а ещё и полноценный веб-сервер... после небольшой настройки. Здесь будет предложено готовое решение, годное как для домашнего компьютера, так и для высоконагруженного Интернет-сервера.
Для приёма соединений из Интернета будем использовать лёгкий Nginx. Если Nginx Вам не по душе (с чего бы это?), выбирайте HTTP-сервер на свой вкус.
Устанавливаем Nginx
Скачиваем с официального сайта новую стабильную версию >
http://nginx.org/ru/download.html На момент написания статьи, это была версия 1.0.6. |
Разархивируем. Через граф. интерфейс или командой в терминале
|
Заходим в папку с разархивированным Nginx.
|
Скачиваем и разархивируем новые версии зависимостей: PCRE и ZLIB. Достаточно только разархивировать их: установщик Nginx соберёт всё сам.
|
Собираем и устанавливаем Nginx. Обратите внимание на параметры конфигурации, на версии библиотек: пути должны указывать на разархивированные выше зависимости.
|
Редактируем файл конфигурации.
Официальный пример файла. В конце поста привёл пример своих конфигов Nginx'а. Для тонкой настройки Nginx есть хорошая статья на Хабре. |
Запускаем Nginx.
|
Чтобы Nginx стартовал при загрузке Ubuntu, пишем в терминале
и добавляем в открывшийся файл строку
~$ /usr/local/nginx/sbin/nginx
|
Добавляем домен сайта с которым будем работать в файл 'hosts'. Пишем в терминале
Файл содержит что-то наподобие этого
Сайт будет доступен в браузере по адресу http://НазваниеСайта
|
Если Вы планируете серьёзно заниматься сервером Nginx, подпишитесь на дайджесты рассылок > |
В общем-то, на этом всё: Nginx и CouchDB настроены для работы. А значит, Вы можете создавать на этой системе веб-сайты.
Мне нравится использовать Nginx, т.к. это надёжный, проверенный временем, прокси. Благодаря ему можно значительно снизить нагрузку на продакшн-сервер и настроить короткие ("человеческие") ссылки: в строке браузера вместо, скажем, такого чуда
http://my-site.zone/holidayline/_design/\
holidayline/_list/choice/holiday\
?year=2011&month=10&day=25
написать
http://my-site.zone/2011/10/25
А, вот ещё что. Когда меняется конфигурация, Nginx требует перезапуска. Для этих целей я пишу в терминале
~$ sudo killall -9 nginx
~$ sudo /usr/local/nginx/sbin/nginx
Пример конфигурации Nginx для CouchDB (три файла)
# Файл /usr/local/nginx/conf/nginx.conf
# Используется оптимизация, предложенная в статьях об Nginx
# (см. ссылки выше)
worker_processes 2;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
log_format my_combined
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$upstream_response_time "$host"'
sendfile on;
#tcp_nopush on;
keepalive_timeout 50;
tcp_nodelay on;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
client_max_body_size 64k;
client_body_buffer_size 128k;
proxy_buffer_size 16k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_intercept_errors on;
ssi off;
gzip on;
gzip_min_length 2000;
gzip_buffers 64 8k;
gzip_comp_level 3;
gzip_http_version 1.1;
gzip_proxied any;
gzip_types text/plain
text/css
application/x-javascript
application/json
application/xml;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
upstream backendCouchDB {
server localhost:5984;
}
include site/*;
}
# Файл /usr/local/nginx/conf/proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 35s;
proxy_read_timeout 50s;
proxy_send_timeout 50s;
# Файл /usr/local/nginx/conf/site/ДоменВашегоСайта.conf
# Пример настроек для работы с хранилищем CouchDB.
# Название хранилища > 'cargo'
server {
server_name НазваниеДомена;
listen 80;
# Если будете работать с несколькими сайтами на одном
# компьютере, Вы будете рады, что вынесли некоторые
# настройки в отдельный файл
include /usr/local/nginx/conf/proxy.conf;
# Требуется для репликации больших баз CouchDB
client_max_body_size 1000m;
# Оптимизация. См. по ссылкам выше статьи по Nginx.
client_body_buffer_size 64k;
proxy_buffer_size 1k;
proxy_buffers 16 1K;
proxy_busy_buffers_size 8k;
proxy_temp_file_write_size 8k;
# Если при разработке сайта необходимр знать, куда направляет
# запросы Nginx, переключаем в 'on'
access_log off;
# Подружим Nginx с CouchDB
# @see http://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy
# Я использую перенаправление внешних запросов к хранилищу
# CouchDB исключительно с помощью Nginx. Но есть и другая
# возможность создавать короткие ссылки.
# @see http://wiki.apache.org/couchdb/Rewriting_urls
# Главная страница сайта ссылается на статический файл HTML
location = / {
proxy_pass
http://backendCouchDB/cargo/_design/cargo/index.html;
break;
}
location = /index.html {
proxy_pass
http://backendCouchDB/cargo/_design/cargo/index.html;
break;
}
# Адрес вида http://domain.zone/in формируется из представления
location = /in {
proxy_pass
http://backendCouchDB/cargo/_design/cargo/_show/in/in-configure;
break;
}
# В этом сайте я использую приставки 'cargo' и '/cargo/design',
# чтобы обращаться со страниц непосредственно к документам
# хранилища
location /cargo/design {
rewrite ^/cargo/design/(.*) /cargo/_design/cargo/$1 break;
proxy_pass http://backendCouchDB;
break;
}
location /cargo {
proxy_pass http://backendCouchDB;
break;
}
# Ссылку на иконку и файлы для роботов имеет смысл закешировать
location = /favicon.ico {
proxy_pass
http://backendCouchDB/cargo/_design/cargo/favicon.ico;
expires 50d;
break;
}
location = /robots.txt {
proxy_pass
http://backendCouchDB/cargo/_design/cargo/robots.txt;
expires 50d;
break;
}
# Карту сайта формируем динамически, из представления
location = /sitemap.xml {
proxy_pass
http://backendCouchDB/cargo/_design/cargo/_list/sitemap/page;
expires 10d;
break;
}
# Мы должны пропускать запросы, начинающиеся с '/_utils/script',
# если сайт использует js-библиотеки, идущие вместе с CouchDB
location /_utils/script {
rewrite
^/_utils/script/(.*)
/_utils/script/$1
break;
proxy_pass http://backendCouchDB;
break;
}
# В этих папках хранятся библиотеки, которые могут быть
# затребованы сайтом
location ~ /cargo/design/vendor {
rewrite
^/cargo/design/vendor/(.*)
/cargo/_design/cargo/vendor/$1
break;
proxy_pass http://backendCouchDB;
break;
}
location ~ /vendor/couchapp {
rewrite
^/vendor/couchapp/(.*)
/cargo/_design/cargo/vendor/couchapp/$1
break;
proxy_pass http://backendCouchDB;
break;
}
# Для репликации и отслеживания изменений в документах CouchDB
location ~ ^/(.*)/_changes {
proxy_pass http://backendCouchDB;
proxy_buffering off;
expires off;
access_log off;
}
}
Комментариев нет:
Отправить комментарий