Мы хотим запустить trac. обычно его запускают из-под Apache, но мы не будем этого делать. Вместо этого мы запустим Trac Standalone - самостоятельный веб-сервер, который и будет хостить trac. На странице проекта Trac Standalone можно подробнее прочитать об этом способе запуска.
Считаем, что trac у нас уже установлен.
Запустим trac на 9990 порту на проекте prj1:
$ tracd --port 9990 /home/trac/prj1
Отлично, tracd стартовал.
Теперь подумаем про аутентификацию пользователей.
Вначале создаем даем двум пользователям, vasya и petya, привилегии админов trac:
$ trac-admin /home/trac/prj1 permission add vasya TRAC_ADMIN
$ trac-admin /home/trac/prj1 permission add petya TRAC_ADMIN
Теперь создаем файлик, который будет содержать имена пользователей и хеш-суммы их паролей. Каждая строка в файле формируется следующим образом:
username:realm:md5sum(username:realm:password)
Например, если пользователь petya имеет пароль password1, а realm мы задали как 'trac', то строка для petya в файле будет такой:
petya:trac:7f9c7f2ecd9894a028ce8c10ede46719
где 7f9c7f2ecd9894a028ce8c10ede46719 - md5-хешсумма от строки 'petya:trac:password1'.
Пусть мы создали этот файл для двух пользователей (пароль для vasya: 'password2'):
petya:trac:7f9c7f2ecd9894a028ce8c10ede46719
vasya:trac:1bacebce4824deae3bb3c9851c22fbbc
Теперь этот файл (trac_users.txt) можно указать в настройках tracd:
$ tracd --port 9990 --auth=prj1,trac_users.txt,trac /home/trac/prj1
На этом все.
Общее·количество·просмотров·страницы
Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи
среда, 23 июня 2010 г.
воскресенье, 20 июня 2010 г.
Назначение и изменение прав на каталоги и файлы в unix
Назначение и изменение прав на каталоги и файлы в unix:
Стандартные права Unix, SUID, SGID, Sticky биты
Хорошее, годное и подробное руководство.
Стандартные права Unix, SUID, SGID, Sticky биты
Хорошее, годное и подробное руководство.
вторник, 15 июня 2010 г.
Связка nginx - Tomcat: прокидывание реального IP пользователя до Томката
При разработке Evaphone мы решили все томкаты проксировать с помощью nginx. Это хорошо известная схема - frontend server - backend server. Frontend сервер (в нашем случае - nginx) занимается отдачей статики, а на backend он проксирует запросы на динамику. Такая схема работы позволяет снизить нагрузку на "тяжелый" бэкенд и увеличить производительность приложения.
Внутри нашего приложения используется информация о пользователи, а именно, IP-адрес. Когда запрос проксируется nginx'ом, то, естественно, реальный IP-адрес пользователя подменяется адресом машины, на которой работает nginx. Однако, nginx не "теряет" реальный IP-адрес. Вместо этого он передает его в HTTP-заголовке "x-real-ip". Это настраивается следующим конфигом nginx:
В этот конфиг вместо ___tomcat_app_url___ нужно подставить URL приложения на томкате, куда будет передаваться запрос. Например, может быть следующий URL: http://127.0.0.1:8080/myapp (это если tomcat и nginx работают на одной машине). Этот конфиг говорит томкату, что все запросы по адресу <ваш_ip>/tomcat нужно проксировать на ___tomcat_app_url___.
Теперь рассмотрим настройку Tomcat. Мы знаем, что реальный айпишник приходит к нам в заголовке запроса "x-real-ip". Подмену адреса (вернее, вытягивание реального айпишника) мы делаем с помощью сервлетного фильтра:
Код достаточно понятный. Что мы делаем:
Осталось только замэппить наш фильтр на все приложение. В файле web.xml добавляем следующие строки:
На этом все!
Пара ссылок:
Настройка nginx для работы с apache и tomcat серверами на примере Ubuntu 10.04 Server
Nginx + Tomcat - тред на форуме nginx
JSP+Tomcat+nginx - тред на форуме RSDN
UPD 11 Июля 2010: Улучшенный код:
Внутри нашего приложения используется информация о пользователи, а именно, IP-адрес. Когда запрос проксируется nginx'ом, то, естественно, реальный IP-адрес пользователя подменяется адресом машины, на которой работает nginx. Однако, nginx не "теряет" реальный IP-адрес. Вместо этого он передает его в HTTP-заголовке "x-real-ip". Это настраивается следующим конфигом nginx:
location = /tomcat {
proxy_pass ___tomcat_app_url___;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
В этот конфиг вместо ___tomcat_app_url___ нужно подставить URL приложения на томкате, куда будет передаваться запрос. Например, может быть следующий URL: http://127.0.0.1:8080/myapp (это если tomcat и nginx работают на одной машине). Этот конфиг говорит томкату, что все запросы по адресу <ваш_ip>/tomcat нужно проксировать на ___tomcat_app_url___.
Теперь рассмотрим настройку Tomcat. Мы знаем, что реальный айпишник приходит к нам в заголовке запроса "x-real-ip". Подмену адреса (вернее, вытягивание реального айпишника) мы делаем с помощью сервлетного фильтра:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.FilterConfig;
import javax.servlet.FilterChain;
import javax.servlet.ServletResponse;
import javax.servlet.ServletRequest;
import javax.servlet.Filter;
public class GetRealIPFilter implements Filter {
public static final String X_FORWARDED_FOR = "x-forwarded-for";
public static final String X_REAL_IP = "x-real-ip";
public GetRealIPFilter() {
//System.out.println("[GetRealIPFilter.GetRealIPFilter]");
}
public void destroy() {
//System.out.println("[GetRealIPFilter.destroy]");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws ServletException, IOException
{
//System.out.println("[GetRealIPFilter.doFilter]");
if (request instanceof HttpServletRequest) {
HttpServletRequest httpRequest = (HttpServletRequest)request;
final String realIp = httpRequest.getHeader(X_REAL_IP);
final String realHost = httpRequest.getHeader(X_FORWARDED_FOR);
//System.out.println("[GetRealIPFilter.doFilter], realIp='"+realIp+"'");
//System.out.println("[GetRealIPFilter.doFilter], realHost='"+realHost+"'");
if (realIp != null) {
//System.out.println("[GetRealIPFilter.doFilter], realIp != null, wrap request");
filterChain.doFilter(
new HttpServletRequestWrapper(httpRequest) {
public String getRemoteAddr() {
return realIp;
}
public String getRemoteHost() {
return realHost;
}
},
response
);
return;
}
}
filterChain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
//System.out.println("[GetRealIPFilter.init]");
}
}
Код достаточно понятный. Что мы делаем:
- Проверяем, есть ли заголовок "x-real-ip". Если его нет, то ничего не делаем, т.е. все остается по-старому. Tomcat продолжит принимать запросы напрямую
- Если заголовок "x-real-ip" присутствует, то в цепочку фильтров мы передаем не пришедший к нам от nginx request, а его обертку HttpServletRequestWrapper, в которой мы подменили методы getRemoteAddr и getRemoteHost так, чтобы они выдавали данные, пришедшие в заголовках "x-real-ip", "x-forwarded-for" соответственно.
Осталось только замэппить наш фильтр на все приложение. В файле web.xml добавляем следующие строки:
<filter>
<filter-name>get_real_ip_filter</filter-name>
<filter-class>GetRealIPFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>get_real_ip_filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
На этом все!
Пара ссылок:
Настройка nginx для работы с apache и tomcat серверами на примере Ubuntu 10.04 Server
Nginx + Tomcat - тред на форуме nginx
JSP+Tomcat+nginx - тред на форуме RSDN
UPD 11 Июля 2010: Улучшенный код:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws ServletException, IOException
{
//System.out.println("[GetRealIPFilter.doFilter]");
if (request instanceof HttpServletRequest) {
HttpServletRequest httpRequest = (HttpServletRequest)request;
final String realIp = httpRequest.getHeader(X_REAL_IP);
final String realHost = httpRequest.getHeader(X_FORWARDED_FOR);
//System.out.println("[GetRealIPFilter.doFilter], realIp='"+realIp+"'");
//System.out.println("[GetRealIPFilter.doFilter], realHost='"+realHost+"'");
if (realIp != null) {
if (realHost != null) {
filterChain.doFilter(new HttpServletRequestWrapper(httpRequest) {
public String getRemoteAddr() {return realIp;}
public String getRemoteHost() {return realHost;}
},response);
return;
} else {
filterChain.doFilter(new HttpServletRequestWrapper(httpRequest) {
public String getRemoteAddr() {return realIp;}
},response);
return;
}
} else if (realHost != null) {
filterChain.doFilter(new HttpServletRequestWrapper(httpRequest) {
public String getRemoteHost() {return realHost;}
},response);
return;
}
}
filterChain.doFilter(request, response);
}
суббота, 12 июня 2010 г.
Установка yum на CentOS 5.4 (Final):
Ставим yum на CentOS 5.4 (Final):
cd ~/
mkdir temp
cd temp
wget http://mirror.centos.org/centos/5/os/i386/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/rpm-python-4.4.2.3-18.el5.i386.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/python-urlgrabber-3.1.0-5.el5.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/m2crypto-0.16-6.el5.6.i386.rpm
rpm -ivh *rpm
список RPM-пакетов для CentOS можно посмотреть по ссылке http://mirror.centos.org/centos/5/os/i386/CentOS
Здесь http://www.electrictoolbox.com/install-yum-with-rpm-on-centos/ раскрывается похожая тема
cd ~/
mkdir temp
cd temp
wget http://mirror.centos.org/centos/5/os/i386/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/python-iniparse-0.2.3-4.el5.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/rpm-python-4.4.2.3-18.el5.i386.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/python-urlgrabber-3.1.0-5.el5.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
wget http://mirror.centos.org/centos/5/os/i386/CentOS/m2crypto-0.16-6.el5.6.i386.rpm
rpm -ivh *rpm
список RPM-пакетов для CentOS можно посмотреть по ссылке http://mirror.centos.org/centos/5/os/i386/CentOS
Здесь http://www.electrictoolbox.com/install-yum-with-rpm-on-centos/ раскрывается похожая тема
вторник, 8 июня 2010 г.
Установка переменных среды для Java, Apache Tomcat
Устанавливаем переменные среды JAVA_HOME, CATALINA_HOME. Только что столкнулся с тем, что если устанавливать переменные среды через export из SSH, то они не сохраняются между SSH-сессиями. В этом случае их надо прописать в файле ~/bashrc или ~/bash_profile.
Прописал следующее, теперь все работает:
Добавил следующие строки в файл ~/bashrc
JAVA_HOME=/usr/java/jdk1.6.0_20
export JAVA_HOME
CATALINA_HOME=/usr/java/apache-tomcat-6.0.26
export CATALINA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
Весь же файл ~/bashrc выглядит так
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
JAVA_HOME=/usr/java/jdk1.6.0_20
export JAVA_HOME
CATALINA_HOME=/usr/java/apache-tomcat-6.0.26
export CATALINA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
Прописал следующее, теперь все работает:
Добавил следующие строки в файл ~/bashrc
JAVA_HOME=/usr/java/jdk1.6.0_20
export JAVA_HOME
CATALINA_HOME=/usr/java/apache-tomcat-6.0.26
export CATALINA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
Весь же файл ~/bashrc выглядит так
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
JAVA_HOME=/usr/java/jdk1.6.0_20
export JAVA_HOME
CATALINA_HOME=/usr/java/apache-tomcat-6.0.26
export CATALINA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
Установка и удаление java на CentOS
Устанавливаем JDK на CentOS:
UPDATE:
Как удалять JRE
Вот ссылка на java.com: How do I uninstall Java for Linux ?
Если JRE была поставлена из RPM:
1) проверяем, поставлена ли JRE из rpm:
rpm -qa | grep jre
2) удаляем
rpm -e jre-1.5.0_21-fcs
3) Профит! (иногда надо перезагрузить машину)
- Скачиваем jdk-6u20-linux-i586.bin с сайта http://java.sun.com
- Заливаем его на сервер в каталог /usr/java
- Меняем права $>chmod 755 jdk-6u20-linux-i586.bin
- Выполняем #./jdk-6u20-linux-i586.bin
- Набираем yes для согласия с лицензией, далее идет установка
- Устанавливаем переменную среды # export JAVA_HOME=/usr/java/jdk1.6.0_20
Затем кладем ее в PATH:
# export PATH=$PATH:$JAVA_HOME/bin - Проверочка #java -version
Получаем:
# java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
UPDATE:
Как удалять JRE
Вот ссылка на java.com: How do I uninstall Java for Linux ?
Если JRE была поставлена из RPM:
1) проверяем, поставлена ли JRE из rpm:
rpm -qa | grep jre
2) удаляем
rpm -e jre-1.5.0_21-fcs
3) Профит! (иногда надо перезагрузить машину)
Подписаться на:
Сообщения (Atom)