понедельник, 31 октября 2011 г.

Помещаем tomcat позади apache2 и подключаем домены третьего уровня

Итак, прошло пара дней, хостинг и домен были подняты.
Далее я перешел к теме которую знал только по наслышке, правда очень хорошо. Конечно апача ставят в переди томката в основном для распределения нагрузки, что мне пока не требовалось, но даже без балансировки котенок Том чувствует себя под защитой воинственного индейца гораздо уверенней. Что же предстояло сделать на этот раз
1. Прячем томкат за апачем с помощью mod_jk
2. Стараемся спрятать урлы томката (контекст и маппинги) на доменах третьего уровня. Сразу оговорюсь - почему стараемся, не во всех случаях это возможно.

В общем можно было посадить томкат за чем-нибудь более легковесным, например nginx'ом, lighttpd или varnish, вариантов много, однако времени в обрез и совсем не в кайф заниматься изучением технологий ради изучения, и так багаж бесполезных знаний после исправления несуществующей проблемы bind трещал по швам.
Понеслась :)
1. Настраиваем mod_jk
В сети оказалось на удивление материалов по этой теме и как ни странно самыми вменямыми оказались какой-то внутренний доковский документ и официальная документация проекта Apache Tomcat Connectors. Просмотрев пару верхних ссылок гугла, я уже бросился компилять коннектор из сырцов, но что-то меня остановило. И правильно. В конце первой страницы гугловой выдачи я нашел тот странный вордовский документ в котором описывалось как ставить mod_jk в убунте. Явно он предназначался или для внутреннего использования, или для клиентов какой-то компании. Хоть документ был и не очень актуальным, он повел меня в правильном направлении. Ставим mod_jk

sudo apt-get install libapache2-mod-jk

Пакет заботливо создал директорию /etc/libapache2-mod-jk а в ней в общем вполне рабочий конфиг - workers.properties. Остается включить mod-jk в настройках апача:
Создаем в /etc/apache2/conf.d файл конфигурации допустим jk.conf имя не имеет значения, т.к. апач инклудит все файлы из каталога /etc/apache2/conf.d в основной конфиг. Соержимое файла примерно такое

  root@Ubuntu-1004-lucid-32-minimal /etc/apache2/conf.d # cat jk.conf
  JkWorkersFile /etc/libapache2-mod-jk/workers.properties
  JkLogFile     /var/log/apache2/mod_jk.log
  JkLogLevel    info
  JkShmFile     /var/run/apache2/mod_jk.shm


Собственно в особых комментариях не нуждается - мы последовательно указываем наш конфиг с определением воркеров, лог-файл и уровень лога, а так же файл куда отображается расшаренная между воркерами память. Выполняем в шелле

a2enmod jk

рестартуем апач, mod-jk работает, о чем видим соотвествующие записи в логах.

Вторая проблема - Посадить разные части приложения на разные домены третьего уровня и по возможности убрать лишее в url приложения. Веб-приложение состояло из двух частей. Одна написана с использованием Wicket, другая на простом сервлете, с простеньким самопальным диспетчером и шаблонами Velocity. Как известно у томката маппинги настраиваются от url веб-приложения. Т.е. если мы задеплоили приложение WebApp.war в котором сервлет отмаплен на url - /* то это значит что сервлет будет обрабатывать запросы вид http://server_address/WebApp/*. Задача была сделать так что бы сервлет обрабатывал все запросы вида webapp.server_address Забегая вперед скажу что это хорошо получилось только для случая использования чистого сервлета, сразу не получилось использовать в случае веб-фреймворка Wicket. Однако это было допустимо и так и решил сделать.


1. Добавляем виртуальный хост апача для сервлета
Сервлет у нас отмаплен  в веб-приложении на путь /drv/*
Создаем в /etc/apache2/sites-available/ файл с описанием нашего виртуального хоста, например drv.example.ru с таким содержимым

root@Ubuntu-1004-lucid-32-minimal /etc/apache2/sites-available # cat drv.example.ru

<VirtualHost *:80>

      ServerAdmin webmaster@localhost
      ServerName drv.example.ru

      JkMount /* ajp13_worker
      JkLogFile  /var/log/apache2/drv.modjk.log
      JkLogLevel  debug

      RewriteEngine on
      RewriteRule /(.*) /WebApp/drv/$1 [PT]
      RewriteLog /var/log/apache2/drv.rewrite.log
      RewriteLog 9

      ErrorLog /var/log/apache2/drv.error.log

      # Possible values include: debug, info, notice, warn, error, crit,
      # alert, emerg.
      LogLevel warn

      CustomLog /var/log/apache2/drv.access.log combined

</VirtualHost>

Ключевым я бы тут назвал строку RewriteRule /(.*) /WebApp/drv/$1 [PT], все остальное довольно прозрачно - директивой JkMount /* ajp13_worker говорим что все урл от корня этого виртуального сервера должны обрабатываться jk воркером ajp13_worker (он у нас один :) )
RewriteRule /(.*) /WebApp/drv/$1 [PT] - тоже вполне понятная директива, magic здесь в флагах passthrough ([PT]) - без них не работает.
Т.к. диспетчер самопальный не составило особого труда понять какие url приходят в сервлет на самом деле, викинуть ненужное и обрабатывать правильно, т.е. в итоге сервлет работал по адресу drv.example.ru

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

понедельник, 11 апреля 2011 г.

Злоупотребления...

Задумался о смысле слова злоупотребление - значит употребить во зло. Например злоупотребление служебным положением - употребить это самое положение во зло. Т.е. подразумевается что обычно служебное положение употребляют в добро. Что же тогда значит злоупотребление вредными привычками?

вторник, 5 апреля 2011 г.

Хостинг и домен за 2 часа.

Хостинг и домен стал покупать за неделю до сдачи проекта. Учитывая что в программной части еще зияли огромные дыры, разобраться с этим нужно было в кратчайшие сроки. В итоге уложился на все про все в несколько часов, которые были разнесены по двум длям, т.к. процедуры обычно не быстрые и работать приходилось по ночам. Итак, помчались :)
1. Хостинг.

Андминская часть

Первым хотел описать мысли о программировании, но затем все таки рашил первой описать админскую часть. По двум соображениям - там все достаточно просто и нет простора пофилосовствовать :) Второе - пока все еще немного свежо в памяти, как известно админская часть забывается быстрее чем программирование :)
Итак, что нужно было сделать в админском плане
1. Купить хостинг
2. Зарегистрировать и поднять на нем домен
3. Развернуть проект
4. Поставить frontend перед томкатом 
5. Сделать  более вменяемые урлы

Итак следующими постами обо всем по порядку.

воскресенье, 3 апреля 2011 г.

Запуск нового проекта

Запускал на неделе новый проект не связанный с основной работой. Получилось на мой взгляд не плохо. Веб-приложение - plain-сервлеты с отображением WML на фронт-энде, Wiсket в бэк енде. Проект длиной около 2,5 месяца. Начинать проект с нуля - всегда очень интересно, уже ничего не спишешь на legacy код, да и вообще, очередная проверка себя как архитектора, проектировщика, ну и кодера конечно :) По прежнему лучше всего конечно последняя роль, но все таки годы принятия ахитектурных решений не проходят даром, в общем и целом архитектурно решение выгялдит правильным, но не смотря на столь юный возраст (2,5 мес) проект уже обзавелся своими скелетами в шкафу, ну и прочими атрибутами "взрослого" :) проекта. Но повторюсь в целом он концептуально верный. Хочу написать серию постов по этому поводу, т.к. интересномых вещей было предостаточно.
Разбить посты хочу по следующему принципу
1. Программирование, Wicket
2. Хостинг, домен, администрирование.

вторник, 29 марта 2011 г.

[Из старого] На внедрение Аксапты в К-Трейде. :)


Главный диспетчер прилег на землю и перевел дух. "Ну и жара же здесь... И запах, все время этот смрадный запах" - подумал он. Когда год назад говорили, что все это плохо пахнет, они даже не подозревали как близки они к истине. Год назад?... Да, действительно это было год назад - тогда все они молодые, дерзкие, веселые - смело смотрели в будущее - там открывались заманчивые перспективы, море, яхты - словом Восхождение для них было долгожданной дорогой в новый, лучший мир. Мир бесконечного праздника и вечного счастья. Он еще помнил как они встав в круг и взявшись за руки кричали "Мы команда!", "Да!", "Мы победим!!!". И они пошли. Пошли навстречу своей мечте. Презрев горести и невзгоды. Отправной точкой Восхождения для них стал бугорок с черным покосившимся крестом и оградкой с надписью "ТН".

среда, 23 марта 2011 г.

Перенес посты по артиксу в отдельный блог

http://linuxinretail.blogspot.com/ - концептуально-черный, как линуксовая консоль :)  Вобщем-то времена когда консоль была только черная ушли в далекое прошлое, моя консоль например выглядит так.
И это еще очень консервативная :) Иногда можно встретить ну очень разухабистые консоли. Но все таки концептуально она черная, поэтому и блог решил сделать черный. Попытка сделать полноценный сайт из blogger.com  и перевести его на домен http://artix.su провалилась, хоть и не с треском. Не хватило возможности как-то вменяемо разместить документацию по проекту для просмотра в онлайн. В раздел скачать я ее конечно добавлю, но это уже не то что хотелось. Поэтому останется два разных сайта, насколько будет пересекаться их контент пока не ясно, возможно напишу какой-нибудь кросс-пост новостей, а возможно блог будет чуть менее официальным СМИ чем сайт. Так или иначе кому интересно развитие этого проекта - добро пожаловать на http://linuxinretail.blogspot.com/  
Здесь же останется мой персональный блог, очень скоро перетащу сюда сообщения из я.ру, благо блоггер несколько минут назад подсказал более удобный способ, чем я предполагал ранее, попробую воспользоваться им, если получится, там тоже есть о чем написать :) 

Windows 7 SP1

Вот уж не ожидал такой свиньи от MS. Как бы там раньше его ненавидели или любили, но все таки для меня он всегда был стандартом качества и заботы о пользователе. Приехал сегодня сабж, стал обновляться. Полоска бегает бегает, потом выдает вердикт - "Отказ". Что за отказ - не понятно. В журнале обновления написано Состояние установки - "Отказ", Сведения об ошибке: Код 80070570. Звучит жутковато. Рядом заботливо помещена ссылка - "Получить справку по этой ошибке" которая показыват что-то типа "1 результат для "WindowsUpdate_80070570" "WindowsUpdate_dt000"", далее просто пустая страница. Становится еще более жутко.

среда, 9 марта 2011 г.

Профессиональная деформация

Утром после завтрака собираюсь выпить витамин, бросаю взгляд на банку, и возникает какое-то отталкивающее чувство, что не надо бы их пить... Не могу понять что случилось, ведь пью их давно. Приглядываюсь - сбоку красуется надпись "Бета". Думаю - "Вот блин, как могут витамины бэты выпускать, это же здоровье, я понимаю GoogleTV на телевизорах Sony был бэта, ну куда ни шло, но витамины, это уже перебор, да еще прям как красуется надпись как будто бы хвалятся... Тут начинает подключаться разум, беру поближе, приглядываюсь... Бета-каротин... что-то мне знакомое, так так... Ага.". Беру витамин и выпиваю.