среда, 1 апреля 2009 г.

Foxmarks + nginx + WebDAV = синхронизация закладок

Если у вас вдруг имеется компьютер с Debian (или с другой nix-системой), постоянно подключенный к интернету, и нужно синхронизировать закладки браузера с нескольких машин через интернет, то неплохим решением будет поднять web-сервер на этом компьютере (будем называть его сервером), настроить протокол WebDAV, поставить в браузер плагин Foxmarks, настроить плагин на работу с собственным сервером и радоваться жизни. В качестве сервера я использовал VDS с 64Мб памяти и 1Гб места на жестком.

Т.к. на VDS установлен Debian Etch, пришлось подключить репозитории testing. Далее ставим очень легкий web-сервер nginx:
# apt-get install nginx
Далее создаем файл /etc/nginx/sites-available/bookmarks следующего содержания:

server {
listen 8080;
server_name your.domain.name;

client_body_temp_path /path/to/temp;
charset utf-8;

auth_basic get-out;
auth_basic_user_file /etc/nginx/pass;

location / {
root /path/to/your/bookmarks;
dav_methods PUT DELETE MKCOL COPY MOVE;
create_full_put_path on;
dav_access user:rw group:rw all:r;
}
}

В этом файле нужно настроить следующее:
  • 8080 - порт для соединений. Если вы собираетесь синхронизироваться из офиса, где перекрыта часть портов, здесь есть смысл поставить один из открытых портов.
  • your.domain.name - доменное имя вашего сервера.
  • /path/to/temp - путь к временной папке.
  • /etc/nginx/pass - путь к файлу с именами пользователей и паролями, его мы создадим позже.
  • /path/to/your/bookmarks - путь к папке, куда и будет производиться синхронизация.
  • user:rw group:rw all:r - права для вновь создаваемых сервером файлов.
Теперь включим эту настройку:
# ln -s /etc/nginx/sites-available/bookmarks /etc/nginx/sites-enabled/bookmarks

Для создания файлика с паролями нам понадобится утилита htpasswd из пакетов apache2-utils или mini-httpd. Можно сгенерировать файл на другой машине и затем перенести его (или просто скопировать содержимое). Для создания файла выполним следующее:
# htpasswd -c /etc/nginx/pass username
Первый параметр - это файл, путь к которому мы указали в настройках nginx. username - имя пользователя, с которым мы будем заходить на сервер. В процессе работы утилита спросит 2 раза новый пароль для пользователя и отрапортует об успехе.

Можно смело перезапускать nginx для применения настроек:
# /etc/init.d/nginx restart

Далее ставим Foxmarks в Iceweasel (Firefox). При первом запуске плагин попробует настроить нам учетную запись на своем сервере, нужно отказаться от этого. Первым делом идем в настройки браузера, в раздел "Приватность" -- "Исключения...", пишем в поле "Адрес сайта" адрес нашего сервера и жмем кнопку "Включить". Закрываем окно. Это нужно потому, что браузер по-умолчанию блокирует cookies от каких-попало сайтов.

Теперь идем в настройки Foxmarks (можно быстро попасть туда, нажав на иконке в статусной строке). Здесь необходимо настроить следующее:
  • Первым делом на вкладке "Дополнительно" нужно включить опцию "Использование собственного сервера" и вписать 2 адреса к файлам для синхронизации закладок и паролей. Например, такие адреса:
    http://your.domain.name/bookmarks.json
    http://your.domain.name/passwords.json
  • На вкладке "Учетная запись" нужно заполнить поля "Имя пользователя" и "Пароль" теми данными, которые вы указали утилите htpasswd.
И всё. Жмем на кнопку синхронизации и радуемся жизни. Идею такой настройки подсказали в jabber-конференции debian@conference.jabber.ru

Обновление
При первой синхронизации может возникнуть проблема, связанная наверное с отсутствием файлов на сервере. Нужно зайти в Foxmarks и на вкладке "Дополнительно" нажать кнопку "Отправить" напротив "Перезаписать закладки на сервере". Это нужно делать при первой для сервера синхронизации. При появлении нового клиента это делать уже не нужно, т.к. вы убьете свои закладки на сервере.