четверг, декабря 30

Tomcat и JSESSIONID

Для того, чтобы изменить имя переменной сессии с "JSESSIONID" на, к примеру, "SID", достаточно в файле $CATALINA_HOME/bin/setenv.sh прописать следующую строчку:
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.SESSION_COOKIE_NAME=SID -Dorg.apache.catalina.SESSION_PARAMETER_NAME=sid"

ЗЫ: не забудьте перезапустить Tomcat
ЗЫЫ: в браузерах с залогиненными пользователями кука JSESSIONID не переименуется :) Просто добавится ещё одна с тем же значением

пятница, декабря 10

Tomcat и виртуальный хостинг. часть 2: добавление виртуального хоста

Ранее мы настроили связку Nginx+Tomcat для хостинга. Давайте теперь добавим виртуальный домен example.org

Шаг 1: настраиваем nginx

создаём файл /srv/nginx/vhost_01_example.org.conf:
server { listen 80; server_name example.org *.example.org location / { proxy_pass http://127.0.0.1:8080; include /srv/nginx/proxy.conf; } }

Теперь вы можете выполнить команду "service nginx reload" и, открыв в браузере адрес http://example.org, увидеть домашнюю Tomcat-страницу

Шаг2: настраиваем Tomcat

# cd /srv/tomcat
# mkdir webapps/example.org
# sed -e 's/localhost/example\.org/g' conf/server.d/vhost-localhost.xml > conf/server.d/vhost-example.org.xml

правим server.xml, добавляя новые строки:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE server-xml [ <!ENTITY vhost-localhost SYSTEM "server.d/vhost-localhost.xml"> <!ENTITY vhost-example.org SYSTEM "server.d/vhost-example.org.xml"> ]> ... &vhost-localhost; &vhost-example.org; </Engine> ...

Теперь нужно настроить пользователя для менеджера виртуального хоста.

Добавим нового пользователя manager-example.org с новой одноимённой ролью в /srv/tomcat/conf/tomcat-users.xml:
<role rolename="manager-example.org" />
<user username="manager-example.org" password="12345678" roles="manager-example.org" /&rt;
и внесём изменения в конфигурационный файл Manager-приложения:
# cp -R webapps/localhost/manager webapps/example.org/
# cd webapps/example.org/manager/WEB-INF
# sed -i.bak 's/<role-name>manager<\/role-name>/<role-name>manager-example.org<\/role-name>/g' web.xml

Перезапускаем томкат:
# chown -R tomcat:tomcat /srv/tomcat
# service tomcat6 stop
# tail -f /srv/tomcat/logs/catalina.out ;Ждём остановки Tomcat и жмём Ctrl+C
# service tomcat6 start

Открываем в браузере адрес http://example.org/manager/html и на запрос авторизации вводим логин/пароль для пользователя manager-example.org.

На этом базовая настройка виртуального хоста example.org завершена.


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Tomcat и виртуальный хостинг. часть 1: связка Nginx + Tomcat

Рано или поздно приходишь к тому, что на сервере Tomcat хочется держать не только один сайт. можно конечно же разные сайты делить за тем же Nginx по запросам к подкаталогу "/domain-name", но правильнее будет сделать разнесение по виртуальным хостам. ещё правильнее - разнести "клиентов" ещё и по разным инстансам tomcat (чтобы они "соседей" не "завалили"), но это покажу как-нибудь в другой серии постов.
Итак, наша задача - настройка Tomcat на работу с виртуальными хостами

С чего мы начнём? с базового задела Tomcat под поставленную задачу - со связки Nginx+Tomcat (помимо плюсов самого Nginx, нам не придётся думать об уровне доступа Tomcat для прослушки 80-го порта)

Настройка производится на сервере CentOS 5.5 (но думаю, что и на других версиях не будет отличий ;) ). Так же на сервере должен быть открыт 80-й порт

Устанавливаем nginx "по умолчанию":
# yum install nginx

создаём каталог /srv/nginx и меняем ему владельца и группу на nginx (в этом каталоге мы будем хранить настройки виртуальных хостов для nginx):
# mkdir -p /srv/nginx
# chown nginx:nginx /srv/nginx


правим файл /etc/nginx/conf.d/virtual.conf
# mv /etc/nginx/conf.d/virtual.conf /etc/nginx/conf.d/virtual.conf.orign
# echo "include /srv/nginx/vhost_*.conf;" > /etc/nginx/conf.d/virtual.conf

создаём файл /srv/nginx/proxy.conf со следующим содержимым:
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

это общие настройки для всех виртуальных хостов. В последующем можно будет дописать или поправить его содержимое.

создаём хост "по-умолчанию", для этого создаём файл /srv/nginx/vhost_00_default.conf:
server { listen 80 default; location / { proxy_pass http://127.0.0.1:8080; include /srv/nginx/proxy.conf; } }

Теперь переходим к базовой установке и настройке Tomcat
Скачиваем и распаковываем дистрибутив Apache Tomcat (повествую на примере версии 6.x)
# cd /srv
# wget http://www.sai.msu.su/apache/tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz
# tar xvf apache-tomcat-6.0.29.tar.gz
# mv apache-tomcat-6.0.29 tomcat
# useradd -d /srv/tomcat -s "/sbin/nologin" tomcat

для запуска демона Tomcat от пользователя tomcat можно скомпилировать jsvc, но мне больше нравится нижеприведённый скрипт /etc/init.d/tomcat6:
#!/bin/sh # # /etc/init.d/tomcat6 # # This is the init script for starting up the # Jakarta Tomcat Server # # chkconfig: 234 20 80 # description: Starts and stops the Tomcat daemon # processname: tomcat # # source functions library for 'daemon' function . /etc/init.d/functions TOMCAT_HOME=/srv/tomcat TOMCAT_START=$TOMCAT_HOME/bin/startup.sh TOMCAT_STOP=$TOMCAT_HOME/bin/shutdown.sh TOMCAT_USER=tomcat start() { echo -n $"Starting Tomcat service: " daemon --user $TOMCAT_USER $TOMCAT_START RETURN_CODE=$? echo $? } stop() { echo -n $"Stopping Tomcat service: " daemon --user $TOMCAT_USER $TOMCAT_STOP RETURN_CODE=$? echo $? } status() { ps aux | grep tomcat | grep -v grep } # Handle the different input options case "$1" in start) start ;; stop) stop ;; status) status ;; *) echo $"Usage: $0 {start|stop|status}" exit 1 esac exit 0

Теперь переходим к небольшому "тюнингу" Tomcat, для дальнейшего удобства его администрирования

Для начала, поправим файл /srv/tomcat/conf/server.xml (далее просто server.xml) для работы с Nginx. Для этого найдём
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />
и заменим её на
<Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />
тем самым мы укажем Tomcat, чтобы он слушал порт 8080 только локально

Перейдём к настройке хостов.

удобнее всего править настройки хостов не выискивая их в "портянке" файла server.xml, а вынеся настройки каждого хоста в отдельный файл. Для этого произведём некоторые изменения в файле server.xml

изменяем "шапку" файла, дописав блок DOCTYPE:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE server-xml [ <!ENTITY vhost-localhost SYSTEM "server.d/vhost-localhost.xml"> ]>

создадим подкаталог server.d, в котором будут лежать конфигурационные файлы наших виртуальных хостов:
# cd /srv/tomcat/conf
# mkdir server.d

Вынесем в отдельный файл настройки для localhost... Для этого найдём в server.xml блок "<Host>...</Host>" и сохраним его в server.d/vhost-localhost.xml:
# cd /srv/tomcat/conf
# echo "<?xml version='1.0' encoding='utf-8'?>" > server.d/vhost-localhost.xml
# sed -n -e '/[[:space:]]*<Host.*/,/[[:space:]]<\/Host>/p' server.xml >> server.d/vhost-localhost.xml
# sed -i.bak -n '1h;1!H;${x;s/<Host.*<\/Host>/\&vhost-localhost;/;p}' server.xml

Для работы Tomcat требуется установленная на сервере Java-машина. Путь до неё прописывается в файле /srv/tomcat/bin/setenv.sh:
# echo "JAVA_HOME=/usr/java/default" > /srv/tomcat/bin/setenv.sh

Следующий наш шаг - настройка каталога webapps для будущих виртуальных каталогов
# cd /srv/tomcat
# sed -i 's/webapps/webapps\/localhost/' conf/server.d/vhost-localhost.xml
# mv webapps localhost
# mkdir webapps
# mv localhost webapps/

и заваршающее действие:
# chown -R tomcat:tomcat /srv/tomcat

Готово. теперь можно запускать созданный web-сервер:
# service tomcat6 start
# service nginx start

Зайдите в браузере по адресу http://ваш_сервер - вы должны увидеть Tomcat-страницу по-умолчанию.

Если всё правильно настроено и вы увидели страницу Tomcat, то можно установить автозапуск для демонов:
# chkconfig nginx on
# chkconfig --add tomcat6
# chkconfig tomcat6 on

ЗЫ: комментарии и замечания приветствуются :)

UPD: изменил немного скрипты - местами удалил "ручную" работу и описал для Tomcat 6 вместо Tomcat 7


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

суббота, ноября 13

Debian. mysql server

статья устарела. обновленная версия тут

Сразу после установки настраиваемся на utf8 и удаляем ошибку при запуске демона:

1) устанавливаем сервер MySQL
apt-get install mysql-server

2) удаляем ошибку "Access denied for user ‘debian-sys-maint’@'localhost" (решение найдено тут)
открываем файл /etc/mysql/debian.cnf и находим строчку password:
password = bla-bla-bla

в клиенте mysql выполняем команду
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION; # вставляем вместо %password% "подсмотренный" пароль.

3) устанавливаем кодировку utf8 по умолчанию
в файле /etc/mysql/my.cnf добавляем строки для каждого блока []:

[client]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = "set names utf8;"
[mysqldump]
default-character-set = utf8

4) перезапускаем сервер MySQL

5) заходим клиентом и на команду "mysql> show variables like "%character%";show variables like "%collation%";" видим нечто подобное:
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

четверг, ноября 11

Debian. timezone

Для настройки временной зоны и синхронизации,
  • "apt-get install ntp ntpdate" - ставим NTP демона для синхронизации
  • "ntpdate -bs ru.pool.ntp.org" - синхронизируем часы
  • "dpkg-reconfigure tzdata" - выставляем нужную нам временную зону, например Europe/Moscow

подсмотрено тут


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

с CentOS на Debian. iptables

Решил перебраться на сервере с CentOS на Debian

Первое "неудобство", с которым столкнулся, это отсутствие, ставших уже привычными, скриптов восстановления правил для iptables.
Поиск в инете можно сделать и найти вагон и маленькую тележку информации, что в Debian всё убрано и что нужно всё прописывать ручками в интерфейсах и прочее... а можно просто глянуть результат команды "apt-cache search iptables" и увидеть пакет iptables-persistent (как поставить из тестовой ветки)... вот он то нам и нужен

устанавливаем пакет командой "apt-get install iptables-persistent"
теперь у нас есть скрипт /etc/init.d/iptables-persistent, который и будет восстанавливать правила после запуска системы.
А сами правила теперь вместо /etc/sysconfig/iptables лежат в /etc/iptables/rules
соответственно, после тестирования правил, сохраняемся по команде "iptables-save > /etc/iptables/rules".

В остальном больше никаких изменений нет - у меня прекрасно заработал всё тот же мой скрипт iptables.sh


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

среда, сентября 8

а они всё прут и прут. о_О

Народ, скажите, что за хрень такая? При том, что я НИЧЕГО с этими сайтами не делаю - ни оптимизации, ни каких-либо изменений в контенте! на том, который под 2 тыщи % посещений вообще всего 4 html странички статичного текста...



понедельник, сентября 6

Zend Studio и поддержка Ant-скриптов. Продолжение

Как выясняется, мало включить поддержку Ant, так надо ещё и JVM поменять для выполнения Ant-скриптов, чтобы не получать UnsupportedClassVersionError.

По-умолчанию Zend Studio (проверял на 7.2.1) использует JRE 1.5.0_08 и при при запуске Ant-скриптов на задачах, связанных с SSH, получаем UnsupportedClassVersionError
Решается очень просто:

1) Включается поддержка Java
1.1) Открываем диалог создания нового проекта "File > New > Other..."
1.2) В диалоге ставим галочку на "Show All Wizards", если она не стоит (у меня так её и вовсе уже почему-то нет) и жмём Next
1.3) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Java
1.4) Закрываем диалог создания проекта
2) В настройках в разделе "Java > Installed JREs" добавляем путь до нужной нам версии JRE и ставим возле неё галочку

ЗЫ: перезагружать Zend Studio не обязательно
ЗЫЫ: пробовал поменять VM для Zend Studio на 1.6, но IDE начала зависать на некоторых диалогах, да и для ant-скриптов всё равно использовала свою JRE, а не указанную через ZendStudio.ini





Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Zend Studio и поддержка Ant-скриптов

Собственно, в интернете достаточно (если покопаться) написано про то, как включить поддержку Ant в Zend Studio.

Мною найден ещё один способ - использование ant БЕЗ включения :) извращение, но имеет право на жизнь. подкатом описаны оба способа.

1-й способ: "без включения" поддержки Ant.
Особенность заключается в том, что ant-скрипты всё равно РАБОТАЮТ даже при выключенной поддержке :) и, если вам не понадобится расширять ant своими или сторонними библиотеками (такими например, как поддержка ssh), то этого вполне достаточно.

Открываем справку через "Help > Help contents" и открываем раздел "Ant view" как указано на картинке ниже. В открывшемся разделе кликаем по ссылке выделенной на картинке красной линией. вуаля - мы имеем представления, в которое можно добавлять ant-скрипты и выполнять их.
Да, чтобы представление полностью заработало (появились кнопки), потребуется перезапустить Zend Studio.



Способ рабочий, но из категории "так делать не надо" - правильнее будет включить полноценную поддержку ant-разработки, о чём я напишу во-втором способе:

2-й способ: с включением поддержки Ant (знания подчерпнуты на просторах интернета)
1) Меню "File > New > Other..."
2) Кликаем по "Show All Wizards", чтобы увидеть скрытые мастера, а в частности, раздел Java
3) Выбираем "Java Project from Existing Ant buildfile" и жмём "Next"
4) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Ant
5) Закрываем диалог создания нового проекта
6) Перезапускаем Zend Studio







Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!