Июл 19

Redmine свободная (free as freedom) система для отслеживания и контроля ошибок. Исходный код распространяется под GNU GPL лицензией. Написана на Ruby on Rails. Является мощнейшим решением среди свободных продуктов.

Установка пакетов Redmine:

# aptitude install redmine redmine-mysql

Инталяционные скрипты предложат настроить пакет. Выберем СУБД mysql и укажем логин/пароль доступа к базе.

Если после этого сравнение таблиц выставляется в latin1_swedish_ci (или в любую другую кодировку отличную от utf8_general_ci) добавляем в /etc/mysql/my.cfg в секцию mysqld директиву collation-server=utf8_general_ci. После чего удаляем полностью БД и создаем новую базу Redmine с сравнением utf8_general_ci. Теперь разворачиваем новую базу Redmine:

cd /usr/share/redmine/
/usr/share/redmine# rake db:migrate RAILS_ENV="production" 

После чего у нас будут все таблицы в utf8_general_ci и с кириллицей не будет никаких проблем.

Настройка mod-passenger
Mod Passenger используется для связки веб сервера Apache и приложений написанных на Ruby On Rails.
С его помощью Apache может работать как веб сервер для ROR приложений.
Установка пакетов:

# aptitude install libapache2-mod-passenger

Загружаем модуль Apache:

# a2enmod passenger

Настраиваем vhost для Redmine:

# vim /etc/apache2/sites-enabled/redmine.example.com
<VirtualHost *:80>

         ServerName redmine.example.com
         ServerAlias redmine.example.com
         DocumentRoot /usr/share/redmine/public
         PassengerDefaultUser www-data

         <Directory /usr/share/redmine/public>
                      Order allow,deny
                      Allow from all
                      RailsEnv production
         </Directory>

</VirtualHost>

Без PassengerDefaultUser www-data Redmine не сможет загружать файлы на сервер.
После этого Redmine должен быть доступен по адресу http://redmine.example.com

Настройка subversion и интеграция с Redmine
Redmine способен отображать изменения в хранилище, вести лог активности, рисовать графики по количеству комитов в хранилище. Так же Redmine может управлять правами доступа к хранилищам на основе своих пользователей и их подписок к проектам, автоматически создавать хранилища для новых проектов.
Установим требуемые пакеты:

# aptitude install subversion 
# aptitude install libapache2-svn libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl

Загрузим все требуемые модули Apache:

# a2enmod dav
# a2enmod dav_svn
# a2enmod perl

Дальше добавим одну строку в конфиг модуля:

vim /etc/apache2/mods-enabled/perl.load

LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
PerlLoadModule Apache::Redmine

Для того, что б пользователи могли авторизоваться в svn под теме же учётными данными что и в Redmine создадим символическую ссылку на скрипт Redmine.pm (можно просто скопировать его, но лучше создать ссылку)

# ln -s /usr/share/redmine/extra/svn/Redmine.pm /usr/lib/perl5/Apache/Redmine.pm

Настроим vhost для svn:

vim /etc/apache2/conf.d/svn.example.com

<VirtualHost *:80>
        ServerName svn.example.com
        ServerAlias svn.example.com

        <Location /svn>        
                 # подключаем модуль dav svn
                 DAV svn
                 SVNParentPath "/var/svn" 

                 # настраиваем авторизацию по логину/паролю
                 AuthType Basic
                 AuthName redmine
                 Require valid-user

                 # подключаем скрипт Redmine.pm
                 PerlAccessHandler Apache::Authn::Redmine::access_handler
                 PerlAuthenHandler Apache::Authn::Redmine::authen_handler

                 # настройки подключения к БД
                 RedmineDSN "DBI:mysql:database=redmine_default;host=localhost" 

                 # логин и пароль для доступа к БД Redmine
                 RedmineDbUser "redmine" 
                 RedmineDbPass "password" 
        </Location>

        <Location /svn-private>
                  DAV svn
                  SVNParentPath "/var/svn" 
                  Order deny,allow
                  Deny from all
                  # only allow reading orders
                  <Limit GET PROPFIND OPTIONS REPORT>
                  Allow from redmine_server_ip
                  </Limit>
        </Location>

</VirtualHost>

svn-private нужен для того, что б позволить самому Redmine получать доступ к хранилищам без авторизации. Это позволит полностью автоматизировать создание и подключения хранилища к новому проекту. Так же его можно использовать на своих серверах для обновления исходников без необходимости авторизации.
Теперь по адресу http://svn.example.com/svn Должен выводиться диалог авторизации.

Автоматическое создание svn хранилищ при добавлении нового проекта в Redmine
Скрипт /usr/share/redmine/extra/svn/reposman.rb. Он при запуске сверяет созданные проекты в Redmine и существующие svn хранилища. И если есть проект для которого нет хранилища — он создаст его. Для того что б это работало его нужно прописать в crontab.

*/5 * * * * /usr/share/redmine/extra/svn/reposman.rb --redmine redmine.example.com --key=ключ --svn-dir /var/svn --owner www-data --url http://svn.example.com/svn-private/ --verbose

Где —key это API ключ. В Redmine Администрирование — Настройки — Хранилище — API ключ. Выбираем «Сгенерировать ключ» и копируем его в скрипт.
—redmine — хост, на котором висит redmine.
—svn-dir — путь к svn.
—owner владелец хранилища.
—url — путь к svn. (svn-private нужен для того, что б redmine мог получать доступ к хранилищам без авторизации).

Все, настройка завершена. Теперь можно попробовать создать проект, через некоторое время для него автоматически будет создано хранилище. Добавить участников в проект и попробовать авторизоваться с использованием их учётных данных в хранилище.

133 Responses to “Установка Redmine на Debian/Ubuntu”

  1. Chaser Says:

    Отлично, вполне вероятно, что пригодится в недалеком будущем для рутины. Еще бы рассказал о интеграции с git… эх… :)

  2. jeka Says:

    Вообще как-то забыл, допишу в ближайшее время.

  3. Иван Says:

    Последняя инструкция не работает. Не создается вкладка хранилище. В чем проблема?

  4. jeka Says:

    Запустите reposman.rb вручную с опцией —verbose и посмотрите все ли нормально.(желательно перед этим создать новый проект, что б он попытался создать хранилище)

  5. Иван Says:

    Запустил reposman.rb. Ответ — repository for project PROJECT created.
    Появилась вкладка Хранилище — однако она пустая. А в crontab не работает.
    Причем если записывать в reposman.log отчет об ошибках, в нем появляются строки this script requires activeresource
    и run gem install activeresource to install it.
    Но последняя команда после запуска и установки activeresource ничего не изменяет.
    В crontab’е у меня в конце —url file:///var/local/svn.

  6. jeka Says:

    А вручную с http пускали? Пустая вкладка это нормально, значит редмайн подключился к хранилищу. Просто там ещё ничего нет.

  7. Иван Says:

    В смысле вручную?

  8. jeka Says:

    Когда из консоли пускали reposman.rb в –url использовали file или http? Просто по вашему описанию — когда вы его пустили сами(не из крона), все прошло нормально. Можете ещё в кроне перенаправить вывод в файл и посмотреть какие там ошибки. */5 * * * * some_script >> /path/logfile 2>&1 (только права на лог проверьте). Проблема скорее всего где-то с правами, редмайн по каким-то причинам не может достучаться /var/local/svn. В эту сторону надо копать как мне кажется. Или использовать http и не париться)

  9. jeka Says:

    И к стати, под каким юзером в кронтабе скрипт исполняется?

  10. Иван Says:

    В crontab’е использовал url file и запускал под root’ом, а в логе выдает про activeresource (в предыдущем комментарии). А как использовать http?

  11. jeka Says:

    —url http://svn.example.com/svn-private/
    и в vhost’e svn-private прописать

  12. Иван Says:

    Нужно создать файл svn.example.com? DocumentRoot — /var/svn/ или как у меня var/local/svn? И где узнать RedmineDbUser и RedmineDbPass? SVNParentPath будет «/var/local/svn», поскольку у меня нет папки /var/svn, я правильно понимаю?

  13. jeka Says:

    DocumentRoot и SVNParentPath там, где у вас лежат хранилища(/var/local/svn). RedmineDbUser и RedmineDbPass можно посмотреть в /etc/redmine/default/database.yml

  14. Иван Says:

    Я не могу понять почему в reposman.log появляется this script requires activeresource, хотя после запуска команды gem install activeresource в log’е опять появляется ошибка, связанная с activeresource. В чем может быть проблема?

  15. jeka Says:

    Какая ОС на сервере? Попробуйте поставить через пакетный менеджер/порты(хз если в фряхе порт, потом посмотрю). В дебиане есть пакеты:
    $ aptitude search activeresource
    p libactiveresource-ruby — Connects objects and REST web services
    p libactiveresource-ruby1.8 — Connects objects and REST web services
    Попробуйте их поставить. Хотя и gem должен был помочь.

  16. Иван Says:

    Ubuntu 10.04. Команды, приведенные вами для activeresource не работают.

  17. Иван Says:

    Еще один вопрос. Как сделать так чтобы появлялись папки trunk, branches, tags.

  18. jeka Says:

    $ svn checkout http://….
    $ mkdir trunk branches tags
    $ svn commit -m «my comment»
    Или воспользоваться гуишным клиентом. Kdesvn например или что-то другое, что больше понравиться. Мне и консольного хватает.

  19. jeka Says:

    А, а если автоматом то хз. Думаю можно поправить reposman.rb. Просто мне это не особо нужно.

  20. Иван Says:

    Когда запускаю /usr/share/redmine/extra/svn/reposman.rb —redmine redmine.example.com —key=ключ —svn-dir /var/svn —owner www-data —url http://svn.example.com/svn-private/ —verbose появляется:

    Unable to connect to http://redmine.example.com /sys/: Failed. Response code = 403. Response message = Forbidden. В чем проблема?

  21. Марина Says:

    Сейчас можно ставить из репозитория, берется он на сайте BitNami, на убунту стал как родной.

  22. Fatboy Slim Says:

    Всё замечательно, но автор статьи тактично умолчал один важный пункт!

    Не работает авторизация в svn через perl модуль в Ubuntu 10.10!
    Это один из багов который к счастью лечится обновлениями.

    Поэтому, перед всеми вышеописанными в статье манипуляциями выполняем 2 команды:

    sudo apt-get update
    sudo apt-get upgrade

    И только после этого… начинаем конфигурировать систему!

  23. jeka Says:

    Я это все настраивал на Ubuntu 10.04, Debian Lenny/Squeeze, там таких проблем не было, надо будет в статью добавить версии дистров.

  24. Fatboy Slim Says:

    jeka, это как я понял нормальное явление. Вот например настройки почты postfix+dovecot что прекрасно работают под 10.10, на последнем сервере 11.04 вообще не работают. Честно говоря разбираться не стал. 10.10 доволен как слон, ну… с небольшими оговорками, которые в принципе излечимы.
    Так что всё новое — не значит лучше.

    Но это так, к слову.

    Спасибо за статью! По ней настраивал! :)

  25. Erop Says:

    Всем привет, все сделал как в инструкции, при попытки зайти на страницу /svn сайта, просить авторизацию. При вводе логина из базы редмайна, в репозиторий не пускает :( куда покурить еще можно? спасибо

  26. Василий Says:

    Это одна строка в конфиге?
    LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
    PerlLoadModule Apache::Redmine

    Если да, то выдает ошибку:
    apache2: Syntax error on line 204 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/perl.load: LoadModule takes two arguments, a module name and the name of a shared object file to load it from

  27. Василий Says:

    И вообще:
    Если у меня на одном домене http://project.lcl.ru (не локально) и Redmine (http://project.lcl.ru/redmine) и svn (http://project.lcl.ru/svn), то как в подобном случае должны выглядеть конфиги? Ведь ServerName уже не пропишешь? Или я загоняю?

  28. jeka Says:

    1 строка: LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
    2 строка: PerlLoadModule Apache::Redmine

    Если нужно разместить в одном домене — все директивы нужно вынести в отдельные локации( Location /redmine….) и DocumentRoot’ы перенести в них.

  29. Василий Says:

    Не работает авторизация через пользователей Redmine в SVN по адресу http://project.lcl.ru/svn, версия Ubuntu 10.4, все инструкции выполнены. В чем может быть проблема?

  30. jeka Says:

    Какая версия редмайна? В 1.2.0 в хеши паролей добавили соль. Руки не дошли написать об этом здесь еще.
    http://www.redmine.org/boards/2/topics/24386?r=24723#message-24723
    Вот тут я выложил патч для апачевского mod_auth_mysql.

  31. Василий Says:

    Redmine 0.9.3.stable. Для общей авторизации требуется только:
    Цитата: «Дальше добавим одну строку в конфиг модуля: …»
    и Цитата: «Настроим vhost для svn». Ведь так?

  32. jeka Says:

    Симлинк на Redmine.pm сделали?

  33. Василий Says:

    Да. А в кроне надо http://… писать?

  34. Василий Says:

    А кронтаб так должно быть: http://project.lcl.ru/svn/svn-private?

  35. jeka Says:

    Строка в кроне — это для автоматического создания хранилищ для новых проектов. По поводу же авторизации — переводите уровень логирования апача в дебаг и смотрите логи. Пока не будет хоть какой-то информации из логов — сложно сказать что не так.

  36. Василий Says:

    Вот так выглядит конфиг апача:

    ServerAdmin webmaster@localhost

    DocumentRoot /var/www

    Options FollowSymLinks
    AllowOverride None

    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all

    RailsBaseUri /redmine

    Я добавил симлинк в DocumentRoot (/var/www) на /var/svn (Папка, где создаются хранилища)
    Для авторизации через SVN нужно теперь добавить:

    и далее строки из вашего конфига…

    и строки из вашего конфига…

    Так или нет?

  37. Василий Says:

    Теги «» были удалены из предыдущего комментария.

  38. Василий Says:

    Теги Documentt и Locationn были удалены

  39. Василий Says:

    В лог apach’a выдает следующее:
    ip-adress — redmine [30/Aug/2011:14:36:45 +0700] «GET /svn/ HTTP/1.1″ 401 660 «-» «Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1″

  40. jeka Says:

    401 код. Значит авторизация все же есть, просто юзер/пароль не подходит? Пользователя добавили в проект, которому принадлежит хранилище?

  41. Василий Says:

    «Пользователя добавили в проект, которому принадлежит хранилище?». Я же захожу на http://project.lcl.ru/svn (т.е. в этой папке все хранилища) — появляется диалог авторизации, который не пускает с любым пользователем из Redmine. Если я захожу на http://project.lcl.ru/svn/project1, то авторизации нет, и я спокойно в браузере просматриваю каталоги проекта project1.

  42. jeka Says:

    Значит проект в редмайне общедоступный, смотрите в Настройки — информация.

  43. Василий Says:

    А как добавить пользователя в хранилище?

  44. jeka Says:

    Пользователь в проекте = пользователь в хранилище. Добавляйте пользователей в проект(Настройки — Участники) и они смогут авторизоваться в хранилище.

  45. Василий Says:

    Добавил участника в проект — зашел на http://project.lcl.ru/svn/project1, авторизовался, появилась следующее:

    Could not open the requested SVN filesystem

  46. jeka Says:

    Вы не создали хранилище. Настройте скрипт из статьи для автоматического создания для новых проектов хранилищ или svnadmin help.

  47. Василий Says:

    Другой вопрос: я создал хранилище, все вроде бы работает по вашей инструкции (отдельное вам спасибо). Вы не знаете, как делать svncheckout в Windows, используя TortoiseSVN? Сейчас выдает ошибку:
    Error: Repository moved permanently to please relocate

  48. jeka Says:

    Я с подобной проблемой сталкивался только когда изменял адрес хранилища, нужно сделать svn sw —relocate старый_адрес новый_адрес.
    Конкретно где релокейт в TortoiseSVN сделать можно не знаю, не использовал.
    Но подобная проблема у меня возникала только с уже существующими хранилищами.

  49. Василий Says:

    Почему-то после успешного создания хранилища, если снять «Общедоступный» в настройках Redmine, через некоторое время (я думаю из crontab’а) появляется ошибка в Redmine для данного проекта: Хранилище не содержит записи и/или исправления.

  50. jeka Says:

    Скрипт для создания хранилищ весит в кроне? Вероятно он права на директорию сбивает, проверьте владельца — им должен быть юзер веб-сервера, посмотрите umask

  51. Василий Says:

    Еще один глупый вопрос (по Linux): www-data — это группа юзеров апача?

  52. jeka Says:

    да

  53. Василий Says:

    Заново поставил Redmine и SVN. Теперь когда в консоли делаю:
    ruby /usr/share/redmine/extra/svn/reposman.rb —redmine http://sitedomain/redmine —key=nZWGFxvyz8AYH8BUDGhY —svn-dir /var/svn —owner www-data —url file:///var/svn/ —verbose
    Получаю ошибку:
    Unable to connect to http://sitedomain/redmine/sys/: 756: unexpected token at ‘ …’

  54. jeka Says:

    Redmine точно доступен по этому адресу с сервера?

  55. Василий Says:

    Ты имеешь ввиду в браузере по адресу: http://sitedomain/redmine? Да, доступен.

  56. jeka Says:

    С той же системы где скрипт пускаешь в смысле. Еще глянь в логе есть ли обращения и с каким кодом веб-сервер отдает страницу cat access.log|grep ип_сервера|less

  57. Василий Says:

    С той же системы где скрипт пускаешь в смысле — не понял, это как?

    cat access.log|grep ип_сервера|less —
    cat: access.log: Нет такого файла или каталога

  58. Василий Says:

    cat access.log|grep ип_сервера|less –
    cat: access.log: Нет такого файла или каталога — затупил…
    На самом деле такая последняя запись в log’е, если в браузере redmine запускаешь:
    ип_сервера — — [24/Feb/2012:14:56:35 +0700] «GET /favicon.ico HTTP/1.1″ 404 502 «-» «Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11″

  59. Василий Says:

    Downgrading activeresource from 3.1.0 to 2.3.11 did the trick for me.

  60. Василий Says:

    Почему-то не работает авторизация в svn пользователями Redmine. При переходе на http://sitedomain/svn появляется диалог авторизации, но при вводе user и password из Redmine авторизация не проходит. В чем может быть проблема?

  61. Василий Says:

    У меня вопрос по настройке уведомлений по почте. Я настроил postfix на сервере, но при отправлении тестового письма из Redmine появляется ошибка: Во время отправки письма произошла ошибка (hostname was not match with the server certificate)
    В логе следующее: lost connection after STARTTLS. Что не так?

  62. jeka Says:

    http://davidroetzel.wordpress.com/2011/01/14/rails-3-actionmailer-tls-certificate-verification/
    Возможно, у тебя подобная проблема(сам я с таким не сталкивался).

  63. Hectorquien Says:

    Если попробовать дать предельно упрощенное определение определение в доступной форме Bitcoin, то можно отметить, что это по всему миру принимается в оплату любой покупки По итогам 2017 года зафиксировали существенное увеличение обмена] крипто-валюты Bitcoin. Это объясняется тем, что в Японии, , она и вовсе признана официально. | |Эта крипто-валюта создана и с успехом функционирует в интернете, и базируется она на математической обработке сложных алгоритмов при помощи определенной программы.|Пользуясь такой валютой, как Bitcoin, предприниматели, среди большого количества других преимуществ, увидели вариант подстраховки имеющихся денежных средств от инфляции (обесценивания), и что ещё более важно, стали инвестировать в новые проекты для извлечения прибыли.|Биткоин, наряду с прочими крипто-валютами, сегодня получает всё большую известность.|Благодаря присущим ему преимуществам, самым главным из которых является децентрализованность, появился вариант выполнять коммерческие сделки, не тратя собственные денежные средства на разнице обменных курсов и без взимания каких-либо специальных и .] Таким образом, отсутствие централизованного органа надзора гарантирует любому обладателю крипто-валюты Bitcoin анонимность при выполнении транзакций, при этом он считается равноправным участником системы.
    https://wmsell.biz/exchange_qiwi_na_bitcoin/

  64. BarryPes Says:

    Если Вы решили быстро, безопасно, выгодно осуществить продажу, покупку или обмен электронной валюты Bitcoin, мы рекомендуем профессиональный online-сервис на портале Betatransfer.net. Этот обменник может гарантировать быстрые, анонимные и безопасные денежные операции с рублевыми карточками как Сберегательного банка России, так и прочих финучреждений — ВТБ, Альфа-Банк и Тинькофф банк. Кроме этого, возможны валютные переводы на WIRE, поддерживаются направления webmoney и Яндекс.Деньги, проработаны и другие популярные системы.

    Своим посетителям мы предоставляем самые привлекательные условия:

    — сервис в автоматическом режиме корректирует валютные курсы согласно трендам на финансовом рынке;
    — выгодные обменные курсы;
    — оперативная помощь группы поддержки посетителей;
    — конвертация средств осуществляется достаточно быстро, в течение получаса;
    — мы можем предоставить бонусы для постоянных клиентов.

    Так, все, кто имеет дело с виртуальными средствами (online-коммерсанты, фрилансеры, владельцы интернет-магазинов и др.) получают превосходную возможность исполнять мгновенные финансовые трансферы, пополнять баланс, свободно распоряжаться личными средствами и выполнять любые операции с валютой. Плюс ко всему, на веб-сайте Betatransfer.net можно получить индивидуальное рабочее пространство для хранения частных сведений по всем вашим транзакциям, быстро и удобно погасить кредит в ВТБ24, а также хранить сведения по балансу и намечаемым платежам. Большой запас денежных средств обменника обеспечит вам не только наиболее заманчивый курс обмена Bitcoin, и не на одни лишь рубли, возможна также конвертация фактически по всем направлениям и валютам. К тому же, на нашем портале разработана программа для партнеров, предлагающая весьма выгодные условия для профессиональных рефоводов, которые имеют активные подписи для форумов, блоги и свои сайты, также поощряются группы в социальных сетях. Для этих клиентов предусматривается гонорар — 0,8%, что составляет приблизительно 30 процентов от прибыли обменного пункта, а также обратная связь, которая возможна по электронной почте, скайпу, онлайн-чату или вайберу (адреса имеются на портале). Betatransfer.net предоставляет нужный набор инструментов для финансовых операций с биткоином с помощью услуги по покупке, обмену и продаже валюты посредством весьма известных платежных систем.

    Наш биткоин-обменник Betatransfer.net предоставляет свои услуги для исполнения транзакций в любом направлении, а самое главное, делает это анонимно, в любое время, с гарантией безопасности и очень быстро.

    вики криптовалюта

  65. Randallereta Says:

    Hi there! walmart online pharmacy very good site.

  66. EROscounty Says:

    Visitors to workshop can find many questionnaires girl of any age and nationality performing body to body massage in the city New York.

    Masseuses are able not only to give pleasure in this way, but also to the strong semi-gentlemen. Girls perform japanese a massage that will produce a Strong gender a vivid impression.
    Prices for nude massage depends on qualification Beauties and the skills that she possesses. Before making a choice, carefully study the prices for services and customer feedback about the work of one or another masseur specialist. We are sure that the search for a real professional masseur will be crowned with success and you will be satisfied with the quality of our services. Specialists are skilled workers in their field and they will help you relax after a hard day.

    We have a massage parlour Brooklyn. — Soapy massage

  67. Stephenrhype Says:

    sullivan pharmacy roslindale ma http://stilnox.forum-prive.com/ natural penile enlargement pills

  68. Perrycruck Says:

    Hello there! online pharmacy oxycodone 30mg great web site.

  69. Normanref Says:

    Hi! discount online pharmacy excellent web page.

  70. EROscounty Says:

    Visitors to workshop can find many questionnaires girl of any age and nationality performing four hands massage in the city Manhattan.

    Beauties are able not only to give pleasure in this way, but also to the strong semi-gentlemen. Specialists perform nuru a massage that will produce a male a vivid impression.
    Prices for erotic massage depends on qualification Specialist and the skills that she possesses. Before making a choice, carefully study the prices for services and customer feedback about the work of one or another masseur specialist. We are sure that the search for a real professional masseur will be crowned with success and you will be satisfied with the quality of our services. Masseurs are skilled workers in their field and they will help you relax after a hard day.

    We work in Manhattan. — best massage nyc

  71. Jamessax Says:

    Hi there! canada online pharmacy beneficial web site.

  72. Jamessax Says:

    Hi! online pharmacy technician school very good internet site.

  73. Jamessax Says:

    Howdy! rx online pharmacy great web page.

  74. CleanAnnenna Says:

    Our Cleaning сompany is giving close attention skillall our own workers and tracks the timely increase of their vocational training. To our professionals by virtue of the more challenging works, workers will ensure the cleanliness of the most hard-to-reach zones.
    You can choose suitable for your company mode — day / evening / night.

    Maid is personal housekeeper, she comes at any convenient for owners apartments time and does the list in advance of the stipulated works. It is now necessary service, which allows to maintain apartment or house in complete order, and not spending all free time on the decision all household problems. AT case ifyou need coming servant Spring Creek, our employees provide her for your company.

    Us can order worker- maid Marine Park several times in week . Mate will coming to you in advance approved time of day, and produce preset list of processes . To you enough required give an assessment quality doneservices and enjoy clean and cozy home .

    Home cleaning maid service Manhattan — Maids Brooklyn

  75. RobertRal Says:

    Hello! russian pharmacy online excellent internet site.

  76. Robertsworp Says:

    Hello there! propecia no script beneficial web site.

  77. PatrickSorgo Says:

    Hi there! canadian pharmacy cialias excellent web site.

  78. PatrickSorgo Says:

    Hello! cialis from international pharmacies very good web site.

  79. JeremyTHODS Says:

    Howdy! cialis coupon very good website.

  80. StevencoNee Says:

    Hello there! online direct payday loan lenders great website.

  81. DanielChuff Says:

    Hello there! cialis online canadian pharmacy excellent web site.

  82. DanielChuff Says:

    Howdy! best online pharmacy school programs great website.

  83. PhilipFluer Says:

    Howdy! cigna best online pharmacy good internet site.

  84. bbzAnnenna Says:

    У нас имеется к продаже МЕШАЛКИ, Отстойники для воды, истовые мешалки, Система механического обезвоживания осадка (мешочного типа), Поворотные колодцы, Тонкослойные модули (БМТ), Канализационные насосные станции (КНС), ОДЪЕМНЫЕ УСТРОЙСТВА И МЕТАЛЛОКОНСТРУКЦИИ Модульные здания, ВОДООЧИСТНОЕ ОБОРУДОВАНИЕ Скиммеры для очистки жидкости от нефтепродуктов, масел, жиров, ПОДЪЕМНЫЕ УСТРОЙСТВА И МЕТАЛЛОКОНСТРУКЦИИ Металлоконструкции фермы, ОЧИСТКА ЛИВНЕВЫХ СТОЧНЫХ ВОД Пескоотделители, НАСОСНОЕ И КОМПРЕССОРНОЕ ОБОРУДОВАНИЕ (Грунфос, КСБ, Вило, КИТ, Взлёт, ТВП) Компрессор роторно-пластинчатый, ВОДОПОДГОТОВКУ Озонаторы и хлотаторы, а также все для автомойки Очистное сооружение для моек легкового транспорта.

    У нас вы найдете Ремонт очистных сооружений, а также блок биологической загрузки, мы можем произвести Насосы для скважин. Бурение артезианских скважин, Оценка запасов подземных вод, Монтаж водоснабжения.

    В компании обслуживает скважины, производит Канализация загородного дома.

    оборудование для обезвоживания осадков а главное биозагрузка купить ббз московская область

  85. ShaneThync Says:

    Howdy! online steroid pharmacy great site.

  86. WillisTounC Says:

    Hello! alprazolam online pharmacy good internet site.

  87. WillisTounC Says:

    Howdy! best canadian pharmacy online great web site.

  88. WillisTounC Says:

    Hi there! online pharmacy uk beneficial internet site.

  89. WalterDurse Says:

    Howdy! canadian pharcharmy online’s homepage great web site.

  90. LouieCyday Says:

    Hello! cvs pharmacy online very good web page

  91. JamesCab Says:

    Hello there! online pharmacy oxycontin great web page.

  92. JamesCab Says:

    Hi there! pharmacy online usa great site.

  93. JamesCab Says:

    Howdy! order from canadian pharmacy great internet site.

  94. Michaelswink Says:

    Hi! canadian pharmacies online great web site.

  95. Michaelswink Says:

    Howdy! online canadian pharmacy reviews good web site.

  96. JamesCab Says:

    Hello! indian online pharmacy excellent site.

  97. Michaelswink Says:

    Hello there! pharmacy technician online courses excellent web site.

  98. StephenDip Says:

    Howdy! cialis daily use beneficial website.

  99. StephenDip Says:

    Hi! cialis 5mg cost great website.

  100. StephenDip Says:

    Howdy! cialis free trial coupon good website.

  101. Michaelswink Says:

    Hi there! pharmacy tech certification online very good site.

  102. StephenDip Says:

    Hello there! cialis 30 day trial very good web page.

  103. Michaelswink Says:

    Hello! canada pharmacy online very good website.

  104. Michaelswink Says:

    Hi there! legit online pharmacies excellent website.

  105. StephenDip Says:

    Hello there! cialis coupons very good web page.

  106. LarryEffix Says:

    Hello there! online pharmacy phentermine great website.

  107. StephenDip Says:

    Hello there! best online pharmacies canada excellent web site.

  108. LarryEffix Says:

    Howdy! online pharmacy technician course good internet site.

  109. StephenDip Says:

    Hello! canadian online pharmacies beneficial web page.

  110. StephenDip Says:

    Hi there! canadian pharmacy express great website.

  111. StephenDip Says:

    Howdy! canadian drugs without prescription very good website.

  112. StephenDip Says:

    Hello! online pharmacy great web site.

  113. Robertkergy Says:

    Howdy! pharmacy no prescription excellent website.

  114. StephenDip Says:

    Hello! best online pharmacy good web page.

  115. Calvinanelo Says:

    Hi! prescription without a doctor’s prescription excellent web page.

  116. Calvinanelo Says:

    Hello! canada drugs online great web page.

  117. Gregoryadvof Says:

    Hello there! reputable mexican pharmacies online excellent site

  118. Calvinanelo Says:

    Hi! canada drugs no prescription needed excellent web site.

  119. Calvinanelo Says:

    Hi! top 10 mail order pharmacies excellent web site.

  120. Richardblono Says:

    Howdy! international pharmacies that ship to the usa good site.

  121. Richardblono Says:

    Hello there! canadian pharcharmy online very good web site.

  122. Richardblono Says:

    Hello! canadian online phar ( Companies ) very good site.

  123. Thomasnobia Says:

    Howdy! tadalafil excellent web site.

  124. Richardblono Says:

    Hello! online pharmacy with no prescription great web site.

  125. Richardblono Says:

    Howdy! canadian mail order pharmacies to usa good site.

  126. Richardblono Says:

    Hello there! canadian pharmacy very good website.

  127. Richardblono Says:

    Hello there! pharmacies drug stores beneficial site.

  128. Richardblono Says:

    Hi! mexican pharmacy no prescription needed great web site.

  129. Lucaswooro Says:

    Hi there! pharmacy tech online beneficial internet site.

  130. Lucaswooro Says:

    Howdy! live pharmacy ce online great internet site.

  131. Lucaswooro Says:

    Hello there! indian online pharmacy good web site.

  132. Lucaswooro Says:

    Hello! alprazolam online pharmacy beneficial web site.

  133. DouglasItalo Says:

    Hi there! modafinil online pharmacy very good internet site.

Написать ответ