от Славей Караджов(5-10-2012)

рейтинг (20)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Attachix е свободен софтуер с чиято помощ може лесно да достъпвате и управлявате вашите файловете в Интернет, подобно на Dropbox, Google Drive или други услуги за съхраняване на файлове.

В сравнение със съществуващите услуги Attachix има следните предимства:

  1. Данните и тяхната сигурност са под ваш контрол.
  2. Можете лесно да го интегрирате във вашия бизнес като използвате съществуващата инфраструктура. Например може да използвате съществуващия LDAP за да потвърдите достоверността на даден потребител, да съхранявате файловете във вече съществуващия компютърен център. Или да стартирате attachix от най-изгодния за вас доставчик.
  3. Не е нужно да инсталирате допълнителен софтуер за да достъпвате файловете. Може да използвате WebDAV клиент, който е инсталиран в всички модерни операционни системи или директно от вашият браузър.

Представяне

Attachix е python базиран сървър, който се разпространява под свободен MIT лиценз. Най-новата версия може да свалите директно от git хранилището https://github.com/slaff/attachix. Всъщност attachix е два продукта в едно. Първият продукт е „вградения” Ajax/HTML5 клиент който Ви позволява да достъпвате и управлявате вашите файлове навсякъде с помощта на модерен уеб браузър или мобилно устройство. Работното му име е "JSFront". Вторият продукт е високо производителния сървър написан на python. Той се отличава с ниска консумация на памет и CPU и може да обработва хиляди заявки едновременно. Което го прави подходящ както за малки и средни организации, така и за мулти-национални организации които имат хиляди служители.

В тази статия ще се говори предимно за python сървъра. Той използва в основата си gevent. Gevent е библиотеката която позволява едновременната обработка на множество задачи, без да се употребява голямо количество памет или процесорно време. За пример gevent може да обработва 100 едновременни заявки използвайки 1 MB памет, докато стандартните сървъри се нуждаят от до 10 до 50 и повече MB памет.

Инсталация

Клонирайте последната версия на програмния код на Attachix от github.
Примерен код
git clone https://github.com/slaff/attachix.git
В текущият момент Attachix зависи от следните допълнителни модули за python:
  • gevent 1.x
  • redis-py
  • cjson
  • ujson
  • xml.etree
  • py-sendfile
  • magic
Както и наличието на системата за кеширане Redis.
Използвайте пакетния мениджър за вашата дистрибуция за да инсталирате тези пакети или easy_install.

Пускане на сървъра в експлоатация

След като сте готови с инсталацията може да стартирате вашия сървър за първи път. Трябва да влезнете в под-директория server на директорията където е свален кода на attachix и от там да стартирате самия сървър.
Примерен код
cd /<path-to-attachix>/server/
 python server.py
Когато сървъра се стартира трябва да се появят сходни съобщения
 2012-0x-xx  08:57:06,758 - INFO - Serving on 127.0.0.1:8443 ...
 2012-0x-xx 08:57:06,758 - INFO - Serving on 127.0.0.1:8088 ...
 
За да достъпите стартирания сървър може да насочите вашия браузър или WebDAV клиент към адреса http://127.0.0.1:8088 или https://127.0.0.1:8443 ако искате комуникацията да е криптирана. Потребителското име и парола, които трябва да въведете за първоначалното стартиране, са test и changeme. (Напомняне: Ако използвате вашия браузър не забравяйте, че AJAX клиента е все още в ранен етап на развитие.) Ако решите да използвате WebDAV клиент, то това може да стане от всяка популярна операционна система, както и от операционните системи за мобилни устройства iOS и Android. Ако ползвате Ubuntu може да използвате снимките по-долу за насоки.

Посочете в диалоговия прозорец сървъра, порта и потребителското име.

Не забравяйте да посочите WebDAV като тип услуга (Service Type).

След като въведете вашето потребителско име и парола ще можете да управлявате вашите файлове, по същия начин както и локалните файлове. Ако искате този сървър да се вижда от света посредством Интернет ще се наложи да вземете допълнителни мерки. В този момент Attachix сървъра не е проектиран да бъде показан директно в Интернет. С цел да се предпазите от обичайните HTTP атаки ви препоръчваме да го сложите зад reverse proxy. В момента официалния сайт използва HAProxy като reverse proxy. По-долу е дадена опростена конфигурация на HAproxy за Attachix.
Примерна HAProxy Конфигурация
frontend attachix *:80
         mode http
         default_backend www
 
 frontend attachix-ssl *:443
         mode tcp
         default_backend www-ssl
 
 backend www
         mode http
         server server1 127.0.0.1:8088
 
 backend www-ssl
         mode tcp
         option ssl-hello-chk
         balance source
         server server1 127.0.0.1:8443

Конфигурация

Конфигурацията на Attachix сървъра е доста гъвкава и не особено трудна за разработчик на python. Конфигурацията е разделена на основна част която се намира във файла server/conf/server.py. За всеки "виртуален хост” има допълнителен файл с конфигурация. Файловете се намират в server/conf/vhosts/available/. Виртуалните хостове в Attachix са сходни с виртуалните хостове в популярния апачи уеб сървър. От конфигурационния файл на даден виртуален хост може посочите кое IP, порт, SSL сертификати и „дърво с ресурси” да се използват.

Дърво с ресурси

Дървото с ресурси за всеки виртуален хост определя какви ресурси ще се показват под какъв адрес. Кодът по-долу, от файла /conf/vhosts/available/default.py,
Примерен код
 root = resource.WebdavResource(
 
 storage.StorageProvider(path=self.config['dataFolder']),
                                self.locking,
                                self.auth,
                                self.notifier
                                       )
Дефинира че всички елементи ще могат да се достъпват посредством WebDAV протокола, самите данни ще се намират в директорията посочена от променливата dataFolder в server/conf/server.py и ще има мениджър за заключване на файловете(locking), мениджър за ограничаване достъпа до тях само от оторизирани потребители(auth), както и система за известяване при взаимодействие с данните в посоченото дърво(notifier).

Видове ресурси

Конфигурацията на Attachix позволява посочването на различни типове ресурси. Ако искате да позволите достъпа до локална директория и да може да менажирате файловете в нея е най-добре да изберете WebDAV ресурс. Както в примера по-горе. Ако искате да добавите ресурс който да е самостоятелен файл, като favicon.ico например, или директория със статични картинки и CSS файлове които ще може само да четете без да може да управлявате и променяте то може да използвате StaticResource. Кодът в следващия пример
Примерен код
 root.putChild(
               '~js',
               resource.StaticResource(storage.StorageProvider('../clients/jsf
 ront/'),
                                       expirationDays=2)
 )
Ви позволява да четете всички файлове от JavaScript клиента през уеб браузъра си или WebDAV клиент от /~js/ . Ако искате да дефинирате от къде идва favicon.ico файла, то може да добавите във вашата конфигурация редовете по-долу
Примерен код
 faviconResource = resource.StaticResource(
                      storage.FileStorageProvider(self.config['basePath']+'/static/public/favicon.ico'),
                      expirationDays= 2
                   )
 
 faviconResource.isLeaf = True
 root.putChild('favicon.ico', faviconResource)
Може да добавите и ресурси, които на практика са само огледало към вече съществуващи ресурси. Това става използвайки ProxyResource
Примерен код
 root.putChild('lbgj', resource.ProxyResource('http://linux-bg.org'))
В примерът по-горе при опит да отворите пътя /lbg/ информацията ще бъде изискана от Linux-BG и ще бъде показа от attachix сървъра сякаш се намира там.

Защита на достъпа до ресурси

Важно е да може да ограничите достъпа до споделяните ресурси в Интернет. Attachix предлага различни оторизатори (Authentication Providers). В тях може да се дефинира как да се представи даден потребител пред оторизиращите системи. При използване на уеб приложения може да използвате Basic Authentication или Digest Authentication. Всеки оторизатор допълнително предоставя информацията на оторизиращата система(authentication backends) за проверка. Оторизиращата система съдържа в себе си съществената логика необходима за проверка на потребителско име и парола например. Това означава, че може да използвате вече съществуващи такива системи, като вашата LDAP или PAM система. По-долу е даден пример за използване на DigestAuthentication и оторизираща система която съхранява информацията на потребители кодирано във локален файл.
Примерен код
 self.auth = auth.DigestAuthProvider(self.config['realm'],
                                     authBackend.Md5FileBackend(file=self.config['basePath']+'/static/private/md5_passwd'),
                                     userProvider=self.user
                     )
А следния код демонстрира използването на PAM оторизираща система.
Примерен код
 self.auth = auth.BasicAuthProvider(
                                  self.config[‘realm’], 
                                 authBackend.PamBackend(),
                                userProvider=self.user
                      )

Добавяне на известители

Attachix сървъра ви позволява да известите различни вътрешни или външни системи след успешно изпълнение на задачи върху вашите ресурси. Примерно при добавяне на нови файлове, при изтриване на стари или при промяна на техните атрибути. Наличните известители(notifier) се намират в директорията server/core/notify/plugins/available/. Може да добавите колкото желаете известите към даден ресурс. Един известител може да изпраща ел.поща, друг може да изпраща информацията към външна система за генериране на малки картинки или извличане на мета данни и т.н. Всеки известител може да посочи от кои HTTP методи се интересува. Примерно известителя на промени(changes.py) има следната дефиниция:
Примерен код
 class Plugin(base.Plugin):
     subscribe = ['PUT', 'MKCOL','POST', 'PROPPATCH', 'COPY','MOVE', 'DELETE']
Всички посочени по-горе настройки ще ви помогнат да настроите Attachix сървъра според вашите нужди или нуждите на вашата огранизация.

Дали може да се подобри това или онова?

Attachix с проект със свободен лицен и се нуждае от вашата помощ. Разгледайте кода (https://github.com/slaff/attachix) и вижте дали може да подобрите python сървъра или JavaScript клиента. Ако имате въпроси може да използвате групите (https:/ /groups.google.com/forum/#!forum/attachix). В този момент разрабочик на основните компоненти е Славей Караджов. Но има още много неща за подобряване и добавяне. Примерно липсват възможности за двупосочна синхронизация на информацията между клиентите и сървъра, както и offline режим на работа, който позволява записване на промените без да е нужно да има Интернет връзка и да ги синхронизира при наличието на Интернет. Ако ви харесва този проект и го използвате успешно ще се радваме да чуем за това. Вашите градивни предложения и критика са ни от голяма полза. Изпратете ги на slaff {at} linux- bg.org или пишете в страницата на групата.


<< | Проект на „Линукс за българи“ и МТИТС - скрипт за сканиране >>