Home FreeBSD
FreeBSD

Модуль определения географического положения по IP - mod_GeoIP

E-mail Печать PDF

Модуль определения географического положения по IP - mod_GeoIP

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/www/mod_geoip/

Неплохой модуль для apache1.3 - по IP посетителя определяется его страна, регион и город. Может пригодиться, чтобы зарубить левых посетителей - китайцев, например, или америкосов. Всё равно им у меня на сайте делать нечего :) Итак, ставим из портов:
/usr/home/lissyara/>
/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='mod_geoip'
Port: mod_geoip-1.2.7
Path: /usr/ports/www/mod_geoip
Info: An Apache module that provides the country code of the client's IP
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps: GeoIP-1.3.14 apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2
R-deps: GeoIP-1.3.14 apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2
WWW: http://www.maxmind.com/app/mod_geoip

Port: mod_geoip2-1.1.7
Path: /usr/ports/www/mod_geoip2
Info: An Apache module that provides the country code of the client's IP
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps: GeoIP-1.3.14 apache-2.0.55_2 expat-1.95.8_3 libiconv-1.9.2_1 perl-5.8.7_2
R-deps: GeoIP-1.3.14 apache-2.0.55_2 expat-1.95.8_3 libiconv-1.9.2_1 perl-5.8.7_2
WWW: http://www.maxmind.com/app/mod_geoip

/usr/ports/>cd /usr/ports/www/mod_geoip
/usr/ports/www/mod_geoip/>make && make install && make clean
......................................
......................................
************************************************************
Please edit your apache.conf or httpd.conf to enable and
setup this module.

You can always refer to the useful documents held in
${PREFIX}/share/doc/mod_geoip/, where ${PREFIX} is
typically /usr/local.

When it's done, do the following to take effect:

apachectl configtest (and correct any errors reported)
apachectl restart

************************************************************
/usr/ports/www/mod_geoip/>pkg_info | grep "[Gg]eo"
GeoIP-1.3.14 Find the country that any IP address or hostname originates
mod_geoip-1.2.7 An Apache module that provides the country code of the clie
/usr/ports/www/mod_geoip/>


Он за собой тащит собственно GeoIP - из него ему нужна БД. После установки редактируем конфиг апача - раскомментруем модуль mod_geoip:
/usr/local/etc/apache/httpd.conf
LoadModule geoip_module libexec/apache/mod_geoip.so
AddModule mod_geoip.c


И добавляем такие строки:
<IfModule mod_geoip.c>
##### модуль GeoIP начался
#
# Включаем модуль
GeoIPEnable On
# Указываем путь к БД (в доках говориться, что
# надо тока если местоположение БД нестандартное, но
# какое считается стандартным - нигде не нашёл - потому
# на всякий случай указываю) - БД инсталлится вместе с
# портом GeoIP.
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
# Следующая директива устанавливает где применяется модуль
# GeoIP (по крайней мере я так понял) - тока в примечаниях apache (Notes),
# только в переменных окружения (Env) или везде (All - по дефолту):
GeoIPOutput All
# заставляет проверять БД GeoIP.dat чтобы определить, обновлялась ли БД
# нужно чтобы не перезапускать апач при обновлении БД
GeoIPFlags CheckCache

###### пример блокировки отдельных стран
# Блокируем косоглазеньких - всё равно ничё не поймут
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
# Блокируем америкосов - тоже ничё не поймут, тупые слишком.
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
# Что мы, собствено, делаем по вышеуказанным правилам,
# это должно быть в директории которую блокируем, т.е. внутри
# <Directory "/usr/local/www/data">
# ...............
#Deny from env=BlockCountry
# </Directory>
</IfModule>


После чего перезапускаем апач, и пробуем, что у нас получилось, таким скриптиком, на php:
<pre>
Откуда припёрся:
<?php
$country_code = apache_note("GEOIP_COUNTRY_CODE");
$region = apache_note("GEOIP_REGION");
$country_name = apache_note("GEOIP_COUNTRY_NAME");
$city = apache_note("GEOIP_CITY");
echo "Код страны: " . $country_code . "\n";
echo "Регион: " . $region . "\n";
echo "Имя страны: " . $country_name . "\n";
echo "Город: " . $city . "\n";
?>
</pre>


Вот его вывод, для московского IP: Откуда припёрся:
Код страны: RU
Регион:
Имя страны: Russian Federation
Город:


Если заходить с частного IP (192.168.x.x) то не покажет ничего :) Почему не показал регион и город - я так думаю что нас считают страной дикой, где кроме медведей, ядерных ракет, и людей в телогрейках и шапках-ушанках ничего и нету... Кстати, в примерах, на сайте автора модуля, был пример, как заблокировать доступ с региона RU. Я же в ответ привёл примёр как залочить буржуев :) Пшли нах :)

P.S. Добавлено по итогам первого комментария. Где взять базы - тут лежит какая-то программа, не вникал. К ней идуд базы. Надо поставить `expert`-версию, после чего установятся базы. Базы копируем куда надо, правим чутка конфиг:<IfModule mod_geoip.c>
##### модуль GeoIP начался
#
# Включаем модуль
GeoIPEnable On
# Указываем путь к БД (в доках говориться, что
# надо тока если местоположение БД нестандартное, но
# какое считается стандартным - нигде не нашёл - потому
# на всякий случай указываю) - БД инсталлится вместе с
# портом GeoIP.
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
GeoIPDBFile /usr/local/share/GeoIP/GeoIPCity.dat
GeoIPDBFile /usr/local/share/GeoIP/GeoIPOrg.dat
# Следующая директива устанавливает где применяется модуль
# GeoIP (по крайней мере я так понял) - тока в примечаниях apache (Notes),
# только в переменных окружения (Env) или везде (All - по дефолту):
GeoIPOutput All
# заставляет проверять БД GeoIP.dat чтобы определить, обновлялась ли БД
# нужно чтобы не перезапускать апач при обновлении БД
GeoIPFlags CheckCache

###### пример блокировки отдельных стран
# Блокируем косоглазеньких - всё равно ничё не поймут
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
# Блокируем америкосов - тоже ничё не поймут, тупые слишком.
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
# Что мы, собствено, делаем по вышеуказанным правилам,
# это должно быть в директории которую блокируем, т.е. внутри
# <Directory "/usr/local/www/data">
# ...............
#Deny from env=BlockCountry
# </Directory>
</IfModule>


После чего доступно больше данных (судя по всему есть ещё база провайдеров, т.к. ISP у меня не высвечивается):
<pre>
<b>Откуда припёрся</b>
<?php
$country_code = apache_note("GEOIP_COUNTRY_CODE");
$region = apache_note("GEOIP_REGION");
$country_name = apache_note("GEOIP_COUNTRY_NAME");
$city = apache_note("GEOIP_CITY");
$connect_type = apache_note("GEOIP_NETSPEED");
$dma_code = apache_note("GEOIP_DMA_CODE");
$area_code = apache_note("GEOIP_AREA_CODE");
$latitude = apache_note("GEOIP_LATITUDE");
$longitude = apache_note("GEOIP_LONGITUDE");
$postal_code = apache_note("GEOIP_POSTAL_CODE");
$organization = apache_note("GEOIP_ORGANIZATION");
$isp = apache_note("GEOIP_ISP");

echo "Код страны: " . $country_code . "\n";
echo "Регион: " . $region . "\n";
echo "Имя страны: " . $country_name . "\n";
echo "Город: " . $city . "\n";
echo "Скорость: " . $connect_type . "\n";
echo "dma_code: " . $dma_code . "\n";
echo "area_code: " . $area_code . "\n";
echo "latitude: " . $latitude . "\n";
echo "longitude: " . $longitude . "\n";
echo "postal_code: " . $postal_code . "\n";
echo "Организация: " . $organization . "\n";
echo "Провайдер: " . $isp . "\n";

?>



Откуда припёрся
Код страны: RU
Регион: 48
Имя страны: Russian Federation
Город: Moscow
Скорость:
dma_code: 0
area_code: 0
latitude: 55.752201
longitude: 37.615601
postal_code:
organization:Network of NICEVT
isp:


Половина пунктов не вполне понятна... Ну да и не важно.

Обновлено 28.05.2010 13:23
 

Сетевое радио - mod_mp3 к apache1.3

E-mail Печать PDF

Сетевое радио - mod_mp3 к apache1.3

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/www/mod_mp3/

Нашёл в портах интересный модуль mod_mp3 - позволяет сделать из апача сетевую радиостанцию. Причём не тупо вещщающую по списку, а несколько, индивидуально, чтоль... Короче если песня не нравится - жмёшь в ВинАмпе кнопку "следующий" - и он играет следующую :) Удобно. Я себе дома привернул - лень перестраивать список воспроизведения, если что-то добавиться-убавиться, при перезапуска апача сам заново построится :)
Ставим из портов. В портах, на данный момент, представлена версия 0.4 - хотя на сайте разработчика можно взять нестабильную 1.2. Я ставил из портов./usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='mod_mp3'
Port: mod_mp3-0.40
Path: /usr/ports/www/mod_mp3
Info: Apache module to allow MP3 streaming
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps: apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2
R-deps: apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2
WWW: http://tangent.org/index.pl?lastnode_id=478&node_id=380

/usr/ports/>cd /usr/ports/www/mod_mp3
/usr/ports/www/mod_mp3/>make && make install && make clean
.............................
************************************************************
You've installed mod_mp3, a MP3 streaming module for Apache.

Edit your apache.conf or httpd.conf to enable and setup this
module. Have a look at the files in
${PREFIX}/share/doc/mod_mp3 for information on how to
configure it etc.

Then do this to make it work effective:

# apachectl configtest (see if there are any config errors)
# apachectl restart

************************************************************
/usr/ports/www/mod_mp3/>


Очень советую почитать документацию по программе, идущую в комплекте, особенно FAQ - там несколько толковых примеров. После осмыслении доков раскомментируем в /usr/local/etc/apache/httpd.conf следующие строки:
LoadModule mp3_module libexec/apache/mod_mp3.so
AddModule mod_mp3.c


и туда же добавляем ещё один виртуальный хост (наскока я понял - не обязательно прям уникальное имя, можно обойтись виртуальным хостом на нестандартном порту - но я изгаляться не стал):
####### модуль mod_mp3 #######
<VirtualHost *:80>
# Имя сервера (если обратиться не по имени - не подконнектится...)
# звёздочка - значит любое.
ServerName muzik.lissyara.su
# Админ сервера - если будет ошибка то выводится этот адрес
ServerAdmin Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
# Куда, собственно пишем ошибки сервера
ErrorLog /var/log/httpd-error.log
<IfModule mod_mp3.c>
# Исчо не знаю чё такое
#SetEnvIfNoCase User-Agent mozilla is_a_browser
# Собственно, включен или выключен (On/Off) модуль mp3
MP3Engine On
# Количество одновременных коннектов при воспроизведении
# музона. В оригинальной доке даже правило приводится, как
# его правильно рассчитать, в зависимости от ширины канала.
MP3LimitPlayConnections 4
# Имя Радиостанции (если слушать из-под форточек -
# надо чтобы было в кодировке cp1251, я извратился так:
# echo 'Вы слушаете радиостанцию \"Эхо унитазного бачка...\"' \
# | iconv -f koi8-r -t cp1251 >> httpd.conf
# ну а внутри httpd.conf переместил куда надо в Midnight Commander)
MP3CastName "Вы слушаете радиостанцию \"Эхо унитазного бачка...\""
# Тип радио (классика, рок, попса...)
MP3Genre "Тока RAMMS+EIN"
# Апач шерстит нижеуказанную директорию, составляет список
# всех композиций (рекурсивно) и воспроизводит их
MP3 "/usr/local/smb/movie/muzik/"
# Плэйлист - у меня так и не получилось чтоб с ним заработал
#MP3Playlist /usr/home/lissyara/playlist.txt
# Какой-то режим, наскока я понял - позволяет прилеплять
# комменты к композициям - тоже не пошло...
# MP3Stream On
# Случайное воспроизведение
MP3Random On
# Если эту опцию раскомментировать то показывается список
# всех треков на сервере, и у посетителя есть выбор - какую
# песню слушать, или слушать весь список...
# MP3DefaultOperation select
</IfModule>
</VirtualHost>


Насчёт виртуальных хостов, если будете делать как-то иначе - советую посмотреть документацию по apache. Там всё толково разжёвано. Перезапускаем апач:/usr/local/etc/apache/>/usr/local/etc/rc.d/apache.sh restart
Stopping apache.
Waiting for PIDS: 22982.
Starting apache.
/usr/local/etc/apache/>ps -ax | grep httpd
27508 ?? Ds 0:02,85 /usr/local/sbin/httpd
27685 p0 S+ 0:00,02 grep httpd
/usr/local/etc/apache/>


И по адресу и порту указанному в настройках слушаем музыку :) Надо сразу отметить - если музыки в указанной директории много (у меня 13Gb, 2500 файлов) то запуск апача займёт некоторое время - ему же надо пройтись по всем директориям и составить список. Опять-таки у меня, с тем количеством файлов, что указано, на AMD K6-II 550MHz на запуск уходит секунд 30. Ещё столько же после этого он чё-то делает и только после этого начинает играть музыка. Загрузка проца сервера не очень большая - на моей машине это было 1-2% на каждого клиента. Копейки.
Также учтите - пользователь www должен иметь право доступа к музыке - хотя б чтение. Впрочем, если Вы специально не ограничивали права на диркторию и музыкальные файлы - всё должно быть пучком.

Косяки: Если файл с "интересным" бирейтом, типа 135 и подобное, не кратное двум, то воспроизводится он вдвое быстрей чем положено :)

Обновлено 28.05.2010 13:24
 

скрипт блокировки спамеров на www средствами ipfw table и nginx

E-mail Печать PDF

скрипт блокировки спамеров на www средствами ipfw table и nginx

Автор: ProFTP.
Оригинал: http://www.lissyara.su/articles/freebsd/www/spam_blosking_with_using_ipfw_table/

задача: закрыть спам на сайтах.

есть черный список (black list) ip на сайте http://www.stopforumspam.com/ (есть и другие списки), список часто обновляется. В blacklist входя прокси-сервера, взломанные машины через которые боты пытаються спамить на все www сразу...

проще всего добаавить в ipfw таблицу, после блокировки максимум 1 спам сообщение за несколько суток или за неделю.

ipfw table:add deny ip from table(1) to any


ee /root/spamstop.pl#!/usr/bin/perl

# use File::Pid;
# my $pidfile = File::Pid->new( { file => '/var/run/x0.pid', } );
# my $pid = $pidfile->running;
# die "Service already running: $pid\n" if $pid;
# $pidfile->write;
## можно раскомментировать, это для того чтобы скрипт
## одновременно повторно не запустился

use LWP::Simple;

my $spam = get("http://www.stopforumspam.com/downloads/bannedips.csv");

# system("ipfw table 1 flush > /dev/null &") if (defined $spam);


open( IP, "ipfw table 1 list |" );
$/ = ''; # Включить режим чтения абзацев
my $use_ip = <IP>;
close IP;

# IP которые уже присутствуют в таблице не удаляются
# а добавляются новые тех которых нету
my %seen;
@seen{ return_ip($spam) } = ();
delete @seen{ return_ip($use_ip) };

#print keys %seen;

foreach (keys %seen) {
print $_;
system("exec ipfw table 1 add ".$_ );
# system("exec ipfw table 1 add $_ > /dev/null &");

}

sub return_ip {
# print $_[0];
my $hash;
$hash->{$1}++
while $_[0] =~ /(\d+\.\d+\.\d+\.\d+)/smg xor
grep { $_ > 255 } split /\./,
$1;
return keys %$hash;

}

# $pidfile->remove;
## можно раскомментировать, это для того чтобы скрипт
## одновременно повторно не запустился

exit;



crontab:8 0 * * * root /root/spamstop.pl


или запускать скрипт, через каждых 3 часа:0 */3 * * * root /root/spamstop.pl


можно при старте системы добавить этот скрипт в /usr/local/etc/rc.d/

скрипт выполняется не быстро, 4-10 минут, грузит процессор, можно попробовать вариант быстрого добавления в ipfw таблицу ЧСВ python биндинг для ipfw бацаю

ipfw -a list | grep table
00150 1317 65171 deny ip from table(1) to any


========
========
========

вариант помягче:
http://forum.lissyara.su/viewtopic.php?f=14&t=16531#p159781

теперь в фаерволле у меня правило:
00530 fwd 127.0.0.1,8013 tcp from table(1) to me dst-port 80


а 127.0.0.1:8013 слушает nginx
(основной вебсервер апач на 80 порту, а nginx только для быстрого отлупа "форум-спамера")

вот конфиг nginx
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 10;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 1;
#gzip on;
server {
listen 127.0.0.1:8013;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
error_page 400 401 403 404 500 502 503 504 =200 /index.html;
location / {
root /usr/local/www/nginx;
index index.html index.htm;
}
}
}


а в index.html что-то типа этого
<html>
<head>
<title>Welcome to zztop!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>You are seing this page, because you are in blacklist.
</h1></center>
<center><h2>Visit http://www.stopforumspam.com/ to check you IP,
or contact me: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript </h2></center>
<center><h3>Best regards, St. Me.</h3></center>
</body>
</html>


Результат:
- nginx как "легкий" веб-сервер отлично и быстро отдает статику типа маленького html файлика, в котором написано что пользователь в стоп-листе
- если пользователь оказывается в стоп-листе, то он не тупо отфаерволивается, а редиректится на nginx, где его посылают, но красиво :)
- в апач запросы спамера не попадут вообще, т.е. он их не будет обрабатывать, и 1) нагружаться; 2) позволять роботам постить спам

Обновлено 28.05.2010 13:38
 

Настройка хостинга под apache + PHP + MySQL

E-mail Печать PDF

Настройка хостинга под apache + PHP + MySQL

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/www/apache1.3_+_php_+_mysql/

Был у конторы хостинг, для клиентов, бесплатный - как дополнение к тарифным планам с большим траффиком. Десятка полтора сайтов на FreeBSD4.11, apache1.3, php4, mysql4.0 - ничё особенного. Достался он мне по наследству, от старых админов, всё настроено, работает, что называется - не трожь. Но однажды переполнился раздел /var - почтовый спул занял всё свободное место. Недолгое разбирательство выяснило - все письма отправлены с какого-то из сайтов, и в них спам. С какого - выяснить не представлялось возможным - письма шли от пользователля www. Спул почистил, залочил в php.ini функцию mail(), сел думать - что можно сделать подручными средствами. У всех знакомых, работавших у хостеров, были самописные фичи на эту тему - они меняли идентификатор пользователя процесса apache. Апач меня не интересовал - у него своих средств для защиты хватало, а вот php, крутившийся модулем, - работал от того же пользователя, что и апач, - а это не есть гуд. Из других решений - php как CGI. Почитав, понял - подойдёт. Работать будет медленней, чем модулем, т.к. будут дополнительные затраты на порождение дополнительного процесса, но во FreeBSD это досточно шустрый процесс (хотя и накладный, не отрицаю), поэтому особого замедления быть не должно.
Итак, начинаем с апача - нам нужен suexec - он позволяет выполнять пользовательские программы от его имени, незавимо от того, под каким пользователем работает сам http-сервер. Таким образом, для апача нам надо будет лишь предоставить доступ на чтение, включив его в группу пользователя, а всем - запретить вообще доступ. Ставим апач (если стоял - сносим и ставим заново), для начала добавив в файл /etc/make.conf такие строки:# Директория где лежат порты
PORTSDIR?= /usr/ports

# APACHE
.if ${.CURDIR} == ${PORTSDIR}/www/apache13
# Для запуска CGI-скриптов от gid и uid пользователя, а не WEB-сервера
WITH_APACHE_SUEXEC=yes
# Где будет работать suexec (ещё будет в userdir)
APACHE_SUEXEC_DOCROOT=/usr/local/hosting
# Пользовательские директории, в которых будет работать suexec
APACHE_SUEXEC_USERDIR="/usr/local/hosting/*/cgi-bin"
# Настройки производительности (без комментов - объяснений толковых не нашёл,
# а может торопился и плохо искал...)
APACHE_SUEXEC_LOG=/usr/local/var/log/httpd-suexec.log
APACHE_HARD_SERVER_LIMIT=yes
WITH_APACHE_PERF_TUNING=yes
APACHE_HARD_SERVER_LIMIT=1024
.endif


После чего, собственно, пересобираем:/usr/home/lissyara/>cd /usr/ports/www/apache13
/usr/ports/www/apache13/>make deinstall && make clean && make \
? && make install && make clean


После этого, создаём новый класс пользователей, которых будем ограничивать, у меня он называется ``webuser''. Для этого, в файл /etc/login.conf добавляем такую секцию:# конфиг для клиентов. Сразуже - пояснения:
# copyright - файл содержащий информацию о копирайтах
# welcome - приветсвенное сообщение, выводится при входе по ssh. Я пока не
# планирую давать доступ по ssh - но на будущее возможно пригодится.
# setenv - устанавливаем переменные пользователя
# path - пути к исполняемым программам
# manpath - пути к манам
# nologin - местоположение программы, вывоящей сообщение о блокировке аккаунта
# cputime - предел использования CPU
# datasize - максимальный размер данных пользователя (в памяти)
# stacksize - максимальный размер стека
# memorylocked - максимальный размер залоченой памяти ядра
# memoryuse - ограничение размера используемой памяти ядра
# filesize - максимальный размер файла
# coredumpsize - максимальный размер создаваемого дампа (при ошибках)
# openfiles - максимальное число открытых файлов, на процесс
# maxproc - максимальное число процессов
# sbsize - максимальный разрешённый размер буфера сокета
# priority - приоритет исполняемых процессов
# requirehome - для логина пользователя требуется реально существующая
# домашняя директория
# umask - начальная umask для создаваемых файлов
# tc - остальные переменные берём из указанного класса

webuser:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,EDITOR=ee:\
:path=/bin /usr/bin /usr/local/bin:\
:manpath=/usr/share/man /usr/local/man:\
:nologin=/sbin/nologin:\
:cputime=5m:\
:datasize=512M:\
:stacksize=4M:\
:memorylocked=64M:\
:memoryuse=256M:\
:filesize=512M:\
:coredumpsize=0:\
:openfiles=1024:\
:maxproc=64:\
:sbsize=unlimited:\
:priority=20:\
:requirehome:\
:umask=026:\
:tc=default:


Пересобираем БД классов пользователей:/usr/home/lissyara/>cap_mkdb -v /etc/login.conf
cap_mkdb: 10 capability records
/usr/home/lissyara/>


Теперь надо поставить квоты на файловую систему, где у нас хостинг (надеюсь, вы не пускаете юзеров пастись в /usr и прочих системных разделах?). Вначале, я попробовал воткнуть её слёту:/usr/home/lissyara/>echo 'enable_quotas="YES"' >> /etc/rc.conf


Перезагрузился, и попробовал поставить квоту:/usr/home/lissyara/for_hosting/>
/usr/home/lissyara/for_hosting/>edquota -u user_name2
edquota: warning: quotas are not compiled into this kernel
edquota: creating quota file /usr/local/quota.user


Непрокатило :). Для этого в ядре должна быть её поддержка, для чего вносим в конфиг такую опцию:options QUOTA


Надо заметить ещё такой момент, во FreeBSD есть ограничение, пользователь не может входить более чем в 16 групп, это очень старое ограничение, связянное каким-то боком с NFS. В данном случае, в процессе экспериментов, я в него очень быстро упёрся - согласно создаваемой системе, у каждого пользователя будет своя персональная группа, в которую кроме пользователя входит пользователь www - от него работает apache. Если его не включить в неё, то он не сможет читать файлы в дирекориях пользователя. При других раскладках - типа, все пользователи в одной группе - косяк с безопасностью - есть возможность, что прочтут чужие файлы. Поэтому пришлось найти где это ограничение забито и подправить. Это файл /usr/src/sys/sys/syslimits.h, в нем редактируем такую строку:#define NGROUPS_MAX 64 /* max supplemental group id's */


Из минусов - надо помнить про эту опцию, при обновлениях, ну и при передаче дел неплохо бы упомянуть. Вроде как с 7.0 должны сделать это ограничение "мягким" - можно будет его менять через sysctl. На данный момент, во всех версиях, его менять нельзя - переменная есть, но не меняется:/usr/home/lissyara/>sysctl -a | grep ngroup
kern.ngroups: 16
/usr/home/lissyara/>sysctl kern.ngroups=64
sysctl: oid 'kern.ngroups' is read only
/usr/home/lissyara/>


Короче - ставим сколько надо (всё не тестил, но вроде как всё рабтает нормально, правда, для верности, пересобирал вообще всё - мир, ядро, и все установленные приложения. Каюсь - метод, всёже косячный, но умней ничё в башке не родилось, да и время поджимало). Пересобираем ядро. Это описано у меня, и в хандбуке. Пока ядро пересобирается, готовимся, надо подправить /etc/fstab. Правим строку, относящуюся к монтированию раздела где живут сайты пользователей. У меня, в итоге, оно выглядит так:# устройство Куда моунтим ФС опции дамп
/dev/ad2s1e /usr/local/hosting ufs rw,userquota,nosuid 2 2


Также, добавляем такую строку в /etc/pw.conf, чтобы при создании пользователя, генерились рандомные пароли:defaultpasswd=random


По окончании сборки ядра перезагружаемся, и снова пробуем запустить edquota - если пройдёт без ошибок - значит всё нормально. (не забываем добавить вышеописанную строчку про 'enable_quotas="YES"' в /etc/rc.conf!). Далее, я настругал небольшой скриптик, для администрирования всего этого добра:#!/bin/sh -

# Скрипт для создания клиентской шары, и заведения нужного пользователя
# в системе. Написан lissyara 2006-10-02 - 2006-10-09 www.lisssyara.su

# Ограничения заводимого пользователя - сколько может занимать места,
# и сколько инод ему выделять (фактически, это - максимальное число файлов
# и директоий которые он сможет завести. Но не точно.
# Реально - может быть меньше). 0 - анлим.
user_datasize="500000" # В килобайтах в 4.11 и в Mb в 6.1, почему так -
# я не понял. будте внимательны.
user_inode="100000" # Иноды не резиновые. Оцените число командой
# `df -i` и решайте какие у вас должны быть лимиты
# Файловая система, на которую вносим ограничения
fs="/usr/local/hosting"
# Данные для MySQL
mysql_user="root"
mysql_passwd=""

# Переменные:
domain_name="$1"
user_name="$2"

# программы
cat="/bin/cat" # Перенаправление потоков ввода-вывода
awk="/usr/bin/awk" # Язык обработки шаблонов
echo="/bin/echo" # Вывод строк на экран
grep="/usr/bin/grep" # Выбор строк по шаблону
pw="/usr/sbin/pw" # Управление учётками, группами пользователей
rm="/bin/rm" # Удаление файлов и директорий
mkdir="/bin/mkdir" # Создание директорий
chown="/usr/sbin/chown" # Выставление владельца файлов и директорий
php="/usr/local/bin/php-cgi" # Бинарник PHP для использования в виде CGI
cp="/bin/cp" # Копирование файлов и директорий
mysql="/usr/local/bin/mysql" # MySQL - клиент
wc="/usr/bin/wc" # подсчёт числа строк
cut="/usr/bin/cut" # Обрезка строк
md5="/sbin/md5" # подсчёт md5 файлов, строк
jot="/usr/bin/jot" # генерация случйного числа
tail="/usr/bin/tail" # Показывает последнюю часть файла
edquota="/usr/sbin/edquota" # редактор квот
ls="/bin/ls" # Kbcnbyu диреткорий, файлов
chflags="/usr/bin/chflags" # Утановка флагов на файл
tr="/usr/bin/tr" # Замена, удаление символов в строке
mysqldump="/usr/local/bin/mysqldump" # Содание дампов MySQL
gzip="/usr/bin/gzip" # Архиватор
rm="/bin/rm" # Удаление файлов и директорий
mv="/bin/mv" # Перемещение файлов и директорий
basename="/usr/bin/basename" # Вывод базового имени файла (из полного пути)
uname="/usr/bin/uname" # Информация о локальной машине

# Файл с настройками php
php_ini="/usr/local/etc/php.ini-for-hosting"
# Временный файл - для технических нужд
tmp_file="/tmp/$$.file.tmp"
# Файл с системными альясами (для почты - отлупы на письма с сайтов будут
# возвращаться на этот сервер, надо их пересылать на пользователя, у меня
# забито как info@домен_пользователя)
aliases_file="/etc/aliases" # На самом деле, во фре, это симлинк на
# файл /etc/mail/aliases.
# Директория хостинга
hosting_preffix="/usr/local/hosting/sites"
# Директория для бэкапов удалённых сайтов
backup_dir="/usr/local/hosting/backup"

# Строим префикс для работы с БД
query_preffix="${mysql} --user=${mysql_user} --password=${mysql_passwd} \
--database=mysql"

# Проверяем наличие приложений - в разных версиях FreeBSD разные пути
for application in ${cat} ${awk} ${echo} ${grep} ${pw} ${rm} ${mkdir} \
${chown} ${php} ${cp} ${mysql} ${wc} ${cut} ${md5} ${jot} ${tail} \
${edquota} ${ls} ${chflags} ${tr} ${mysqldump} ${gzip} ${rm} ${mv} \
${basename} ${uname} ${php_ini}
do
if [ ! -s ${application} ]; then
echo "Приложение \`\`${application}'' не найдено! Проверьте путь!"
exit
fi
done


# Поехали :)))
case "$3" in
create)

# Проверяем, не начинается ли имя пользователя с цифры (у `pw`, в этом случае
# будут проблемы с созданием группы пользователя. Либо руками, либо эта
# проверка. Я решил что лучше с цифры не начинать.)
${echo} "11111111111" >> ${tmp_file}
${echo} ${user_name} | ${grep} -v "^[0-9]" > ${tmp_file}
# проверяем размер файла - не равен ли нулю
if [ -s ${tmp_file} ]
then
# Ничё не делаем
${rm} ${tmp_file}
else
# Пытаются пользователя с первой цифрой всандалить.
${echo} "Имя пользователя не может начинаться с цифры!!"
${rm} ${tmp_file}
exit
fi

# Проверяем, не содержит ли имя пользователя точки:
${echo} ${user_name} | ${tr} -d "[:alnum:]" | ${grep} "\." > ${tmp_file}
if [ -s ${tmp_file} ]
then
# Пытаются пользователя с точками в имени всандалить.
${echo} "Имя пользователя не может содержать точки!!"
${rm} ${tmp_file}
exit
else
# Ничё не делаем
${rm} ${tmp_file}
fi

# Проверяем уникальность имени пользователя
${cat} /etc/passwd | ${awk} -F ":" '{print $1}' | ${grep} "^[:alnum:]" |
{
while read existing_user_name
do
if [ ${existing_user_name} = ${user_name} ]
then
# Есть такой юзер. Ругаемся, выходим
${echo} "Пользователь с именем \"${user_name}\" существует!"
# пишем временный файл, чтоб передать инфу из цикла
${echo} 1 > ${tmp_file}
exit
fi
done
}
# Проверяем наличие и содержимое временного файла.
if [ -s ${tmp_file} ]
then
if [ `cat ${tmp_file}` -eq 1 ]
then
${rm} ${tmp_file} # удаляем временный файл
exit # выходим
fi
fi

# проверяем, нету ли такого виртуалхоста в apache
if [ -s ${hosting_preffix}/../httpd_configs/${domain_name}.conf ]
then
# Уже есть такой виртуалхост
${echo} "Хост с именем \"${domain_name}\" уже есть в конфиге!"
exit
fi

# такого пользователя нет - заводим в системе
user_passwd="`${pw} useradd ${user_name} -c \"UserDomain = \
${domain_name}\" -L webuser -s /bin/csh -d ${hosting_preffix}/${user_name}`"
# Добавляем апаче в группу пользователя
${pw} groupmod ${user_name} -m www

# Создаём структуру директорий для пользователя
${mkdir} -p ${hosting_preffix}/${user_name}/log
${mkdir} -p ${hosting_preffix}/${user_name}/www
${mkdir} -p ${hosting_preffix}/${user_name}/cgi-bin
${mkdir} -p ${hosting_preffix}/${user_name}/tmp

# копируем файлы в CGI
${cp} ${php} ${hosting_preffix}/${user_name}/cgi-bin/
${cp} ${php_ini} ${hosting_preffix}/${user_name}/cgi-bin/

# Даём права на эти директории
${chown} -R ${user_name}:${user_name} ${hosting_preffix}/${user_name}

# Ставим флаги на php.ini
${chflags} sunlnk ${hosting_preffix}/${user_name}/cgi-bin/php.ini
${chflags} schg ${hosting_preffix}/${user_name}/cgi-bin/php.ini

# Добавляем пользователя в список тех, кто chroot`ится при
# заходе по FTP
${echo} ${user_name} >> /etc/ftpchroot

# Стругаем квоты для пользователя
${edquota} -e \
${fs}:${user_datasize}:${user_datasize}:${user_inode}:${user_inode} \
${user_name}



# Стругаем пароль для MySQL
mysql_user_passwd="`${jot} -r 1 0 9000000 | ${md5} -p | ${tail} -1 \
| ${cut} -c 1-8`"

# Заводим пользователя в MySQL
${query_preffix} --execute="CREATE DATABASE IF NOT EXISTS \`${user_name}_db\`"
${query_preffix} --execute="GRANT ALL PRIVILEGES on \`${user_name}_db\`.* to \
'${user_name}'@'localhost' IDENTIFIED BY '${mysql_user_passwd}'"

# Создаём виртуалхост в апаче
${echo} "# Этот файл создан автоматически, скриптом `basename $0`

# Virtual host added by \`$USER\`, `date +%Y-%m-%d` in `date +%H:%M:%S`
# from host = \`$REMOTEHOST\`, host IP = \``echo $SSH_CLIENT | awk '{print $1}'`\`

<VirtualHost *:80>
ScriptAlias /cgi-bin/ ${hosting_preffix}/${user_name}/cgi-bin/
ServerAdmin support@${domain_name}
User ${user_name}
Group ${user_name}
DocumentRoot ${hosting_preffix}/${user_name}/www
ServerName ${domain_name}
ServerAlias www.${domain_name}
# Директория пользователя
<Directory "${hosting_preffix}/${user_name}/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Allow from all
</Directory>
DirectoryIndex index.php index.html index.htm index.shtml index.php3
AddType application/x-httpd-php .php .php3
Action application/x-httpd-php /cgi-bin/php-cgi
ErrorLog ${hosting_preffix}/${user_name}/log/error.log
CustomLog ${hosting_preffix}/${user_name}/log/access.log common
</VirtualHost>

" >> ${hosting_preffix}/../httpd_configs/${domain_name}.conf

# Создаём почтовый альяс для юзера (иначе его почта будет захламлять
# раздел /var). У меня стоит exim в простейшей (дефолтовой) конфигурации,
# т.к. мыльница для клиентов не на хостинге, а на отдельном сервере,
# и он работает с системными пользователями. Если будете делать по другому,
# перепишите этот кусок под себя.
$echo "
# Alias for user = ${user_name}, domain = ${domain_name},
# added by \`$USER\`, `date +%Y-%m-%d` in `date +%H:%M:%S`
# from host = \`$REMOTEHOST\`, host IP = \``echo $SSH_CLIENT | awk '{print $1}'`\`
${user_name}: info@${domain_name}
" >> ${aliases_file}



${echo} "Имя домена: ${domain_name}"
${echo} "Имя пользователя: ${user_name}"
${echo} "Пароль пользователя(FTP, SSH): ${user_passwd}"
${echo} "Имя базы данных: ${user_name}_db"
${echo} "Пароль пользователя (MySQL): ${mysql_user_passwd}"
${echo} "Квота пользователя: ${user_datasize}"
${echo} -n "Альяс почты (${aliases_file}) ${user_name}@`${uname} -n`"
${echo} " --> info@${domain_name}"
;;
delete)
${echo} "Вы действительно хотите удалить пользователя и домен?!"
${echo} "Наберите YES для подтверждения, или Ctrl+C для выхода..."
read confirmation
if [ $confirmation = YES ] > /dev/null 2>&1
then
# Подтверждено.
# Стругаем директорию
${mkdir} -p ${backup_dir}/${domain_name}
# снимаем флаги с директории юзера
${chflags} -R nosunlnk ${hosting_preffix}/${user_name}/*
${chflags} -R noschg ${hosting_preffix}/${user_name}/*
# Копируем содержимое
${echo} "Копируются пользовательские данные..."
${cp} -R ${hosting_preffix}/${user_name} \
${backup_dir}/${domain_name}
# Дампим БД пользователя
${echo} "Делается дамп БД пользователя...."
${mysqldump} --user=${mysql_user} --password=${mysql_passwd} \
--database ${user_name}_db | ${gzip} > \
${backup_dir}/${domain_name}/${user_name}_db.sql.gz
# Сносим всё нахрен:
# Перемещаем конфиг апача для этого домена
${mv} ${hosting_preffix}/../httpd_configs/${domain_name}.conf \
${backup_dir}/${domain_name}/
# Удаляем доки:
${echo} "Удаляются пользовательские данные..."
${rm} -Rf ${hosting_preffix}/${user_name}
# Удаляем БД
${echo} "Удаляется БД пользователя...."
${query_preffix} --execute="DROP DATABASE IF EXISTS \
\`${user_name}_db\`"
# Удаляется пользователь из MySQL
${echo} "Удаляется пользователь из MySQL..."
${query_preffix} --execute="REVOKE ALL PRIVILEGES \
ON *.* FROM '${user_name}'@'localhost'"
${query_preffix} --execute="REVOKE GRANT OPTION \
ON *.* FROM '${user_name}'@'localhost'"
${query_preffix} --execute="DELETE FROM mysql.user WHERE \
User='${user_name}' and Host='localhost'"
# Удаляется пользователь из системы
${echo} "Удаляется пользователь из системы..."
${pw} userdel ${user_name}
${echo} "Удаляется группа пользователя из системы..."
${pw} groupdel ${user_name}
else
# не захотел удалять :)
${echo} "Пользователь и его сайт были оставлены"
fi
;;
update)
# Обновление версии php у всех пользователей.
${ls} ${hosting_preffix}/|
{
# идёт листинг сайтов, но т.к. имя пользователя и директории
# одинаковые - значит это ещё и именя пользователей :)
while read site_user_name
do
${echo} "Идёт обновление версии php для пользователя ${site_user_name}"
# Копируем новый
${cp} ${php} ${hosting_preffix}/${site_user_name}/cgi-bin/
# Даём права на него
${chown} ${site_user_name}:${site_user_name} \
${hosting_preffix}/${site_user_name}/cgi-bin/`${basename} ${php}`
done
}
${echo} "Обновление завершено!"
;;
*)

${echo} ""
${echo} "Этот скрипт создаёт пользователя в системе, генерит ему
пароль, создаёт базу данных MySQL, генерит для неё пароль,
выставляет квоты на использование ресурсов системы - на данный
момент все новые пользователи равноправны - смотрите в login.conf
класс 'webuser'. Текущие ограничения:
Места: 500mb (правиться в этом файле)
Инод: 10000 (правиться в этом файле)
Процессов: 64 (правиться в login.conf)
Время работы процесса: 5 минут (правиться в login.conf)
Размер стека: 4mb (правиться в login.conf)
Размер блокируемой оперативки: 64mb (правиться в login.conf)
Макимальный объём оперативки: 256mb (правиться в login.conf)
Максимальный размер файла: 100mb (правиться в login.conf)
Открытых файлов на процесс: 1024 (правиться в login.conf)
Приоритет приложений: 20 (правиться в login.conf)

Внимание! На файл php.ini ставяться флаги \`schg\` и \`sunlnk\`,
не сняв их - файл не уалить и не изменить! Цель - не позволить юзеру
менять свои настройки php.
Удаление флагов:
chflags noschg php.ini
chflags nosunlnk php.ini
Установка:
chflags schg php.ini
chflags sunlnk php.ini
(Может понадобиться на случай если надо всё-таи чё-то поменять
в дефолтовом файле. Но не забывайте вернуть флаги!)

Также есть предложение придерживаться определённого именования
юзеров для их сайтов - типа если домен называется \`some.com\` то
юзер должен быть \`somecom\` - так понятней. Либо, как вариант,
завести таблицу, типа: 1- su, 2 - ru, 3 -com и т.п. и добавлять эти
цифры в конце. Кому как удобней будет. На данном сервере, под
FreeBSD 4.11, ограничение на длинну имени пользователя - 16 символов.
Если длинней - придётся обрубать с конца, или ещё как - чтобы не
совпадало с существующими.

Про удаление - перед удалением всё бэкаптся, кроме учётки пользователя.

Про обновления - имя пользователя и домен - любые. Нужно при обновлении
версии php на сервере. Обновляются все бинарники и перевыставляются права.

P.S. Не забывайте перезапускать апач после создания-удаления!"
${echo} ""
${echo} "Использование: `${basename} $0` \
{domainname username create|delete|update}" >&2
${echo} ""
exit 64
;;
esac


Можете воспользоваться моим, а можете делать всё руками - решать вам. Тока к скипту надо одно пояснение - он удалит любого системного пользователя, если по ошибке вы воткнёте его имя в качастве параметра с командой на удаление. Поэтому, если не понимаете, как оно работает - не надо пользоваться. Там есть защита от дурака, но от дурака умного. У меня он пашет, а как будет у вас - не знаю.
Небольшое замечание по поводу пути к файлу php.ini. В том файле, что копируется, я подправил лишь несколько пунктов, вот их настройки:safe_mode = On
safe_mode_gid = On
disable_functions = system
# поправка - этот пункт лучше так не ставить - php некорректно
# это обрабатывает... может даже не php но у пары клиентов
# были проблемы с аплоадом файлов на сервер, пока
# не поставил абсолютный путь...
#upload_tmp_dir = ../tmp
session.save_path = ../tmp
session.auto_start = 1
upload_max_filesize = 4M
memory_limit = 64M


А вообще, возьмите файл /usr/local/etc/php.ini-recommended, и правьте его под свои нужды.
После проделанного, не забываем поставить парва на скрипт - в нём хранится рутовый пароль от MySQL (в принципе, можно заюзать флаг "-p", чтобы запрашивал его каждый раз, или отдельную переменную, а потом подставлять её значение - смотрите сами.)/usr/local/hosting/scripts/>chmod 700 create_client.sh
/usr/local/hosting/scripts/>chown root:wheel create_client.sh
/usr/local/hosting/scripts/>ls -alh create_client.sh
-rwx------ 1 root wheel 12K 24 окт 10:47 create_client.sh


Ну и пробуем скриптик:/usr/local/hosting/scripts/>./create_client.sh testing.su testing create
Имя домена: testing.su
Имя пользователя: testing
Пароль пользователя(FTP, SSH): QBnOXa2k8DCnGY3
Имя базы данных: testing_db
Пароль пользователя (MySQL): 64cb2586
Квота пользователя: 500000
Альяс почты (/etc/aliases) Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript --> Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
/usr/local/hosting/scripts/>
/usr/local/hosting/scripts/>
/usr/local/hosting/scripts/>
/usr/local/hosting/scripts/>
/usr/local/hosting/scripts/>./create_client.sh testing.su testing delete
Вы действительно хотите удалить пользователя и домен?!
Наберите YES для подтверждения, или Ctrl+C для выхода...
YES
Копируются пользовательские данные...
Делается дамп БД пользователя....
Удаляются пользовательские данные...
Удаляется БД пользователя....
Удаляется пользователь из MySQL...
Удаляется пользователь из системы...
Удаляется группа пользователя из системы...
/usr/local/hosting/scripts/>


Вот и всё. Соответствено, где надо подрихтуйте напильником под свои нужды (в 4.11 и 6.0 пару путей различаются), добавьте такие строки в конец конфига апача:NameVirtualHost *:80

# Это первый виртуалхост - он должен быть этого сервера, т.к.
# иначе при обращении на несуществующие сайты будет выводиться
# самый первый виртуалхост - это может оказаться чей-то из клиентов,
# поэтому создаём скриптом, и копируем конфиг сюда.
<VirtualHost *:80>
ScriptAlias /cgi-bin/ /usr/local/hosting/sites/hosting/cgi-bin/
ServerAdmin Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
User hosting
Group hosting
DocumentRoot /usr/local/hosting/sites/hosting/www
ServerName hosting.kontora.su
ServerAlias www.hosting.kontora.su
# Директория пользователя
<Directory /usr/local/hosting/sites/hosting/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Allow from all
</Directory>
DirectoryIndex index.php index.html index.htm index.php3
AddType application/x-httpd-php .php .php3
Action application/x-httpd-php /cgi-bin/php-cgi
ErrorLog /usr/local/hosting/sites/hosting/log/error.log
CustomLog /usr/local/hosting/sites/hosting/log/access.log common
</VirtualHost>

Include /usr/local/hosting/httpd_configs/*.conf


P.S.1 Настройки системы и php брались из головы, так, как я считал нужным. Может что-то и неправильно, или можно сделать лучше. Смотрите и думайте сами.
P.S.2 Насчёт ограничения в 16 групп и правки исходников - это правда плохая идея. Хотя проблем вроде нету. И если знаете, как можно сделать грамотней - поделитесь...
P.S.3 Настройки MySQL не рассмотрены сознательно,

Обновлено 28.05.2010 13:38
 

Устанавливаем форум phpBB-2 и phpBB-3

E-mail Печать PDF

Устанавливаем форум phpBB-2 и phpBB-3

Автор: Raven2000.
Оригинал: http://www.lissyara.su/articles/freebsd/www/install_phpbb-2+phpbb-3/

Сразу скажу это не статья, а заметка (само собой ясно, если ты поставил MySQL,
Apache, и т.д., то уж тем более, поставшь форум). Однако, по результам голосования в
ветке форума, отдельная статья победила большинством голосов. :)
Сначала установим phpBB 2.0.22, затем phpBB 3.0.RC5.

Итак phpBB 2.0.22phpbb-2.0.22_1
A PHP-based bulletin board / discussion forum system
Long description : Sources : Package : Changes : Download
Maintained by: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
Requires: libiconv-1.9.2_2, libxml2-2.6.29, pear-1.6.1, php5-5.2.3,
php5-pcre-5.2.3, php5-xml-5.2.3, pkg-config-0.22



Для запуска форума необходимо:1) A webserver or web hosting account running on any major Operating System
2) A SQL database system, one of:
MySQL (3.22 or higher)
PostgreSQL 7.0.3 or higher (preferably 7.1.x or 7.2.x)
MS SQL Server (7 or 2000) directly or via ODBC
MS Access (2000 or XP) via ODBC
3) PHP (4.0.3 and above) with support for the database you intend to use above



Apache & MySQL
I) Apache и PHP5 ставим по моей статье, читаем пункты Установка площадки и MySQL.
II) Об установке MySQL хорошо описано в статье Лиссяры

1) Инсталируем# cd /usr/ports/www/phpbb && make install clean



2) VirtualHost
Далее, в конфиге виртуального хоста, указываем директорию phpBB2<VirtualHost *:80>
# Мыло админа
ServerAdmin Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
# Рутовая папка
DocumentRoot /usr/local/www/phpBB2
# Домен алиасы по которым виден хост
ServerName forum.mynet.ru
ServerAlias www.forum.mynet.ru
ServerAlias main.forum.mynet.ru
AddType application/x-httpd-php .php .php3
Action application/x-httpd-php /cgi-bin/php-cgi
DirectoryIndex index.php index.php3 index.html
# Логи
ErrorLog /var/log/www/mynet.ru-error.log
CustomLog /var/log/www/mynet.ru-custom.log combined
# Настройка .htaccess и запрет просматривать его из браузера
AccessFileName .htaccess
<Files ~ ^.ht>
Order allow,deny
Deny from all
</Files>
</VirtualHost>



3) Создаем базу данных для форума на MySQLmysql> create database forum;

mysql> show databases;
+--------------------+
| information_schema |
| forum |
| mysql |
| typo3 |
+--------------------+
4 rows in set (0.00 sec)



4) Веб визард
В браузере набираем http://IP_сайт/install/install.php
Тут будет что-то вроде визарда#Ставим тип базы

Basic Configuration
Database Type: MySQL 4.x/5.x
Choose your installation method: Install

Database Configuration
Database Server Hostname / DSN: localhost
Your Database Name: forum
Database Username: admin
Database Password: 123456
Prefix for tables in database: phpbb_

Admin Configuration
Admin Email Address: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
Domain Name: forum.myhost.ru
Server Port: 80
Script path: /
Administrator Username: Vasia
Administrator Password: 123456
Administrator Password [ Confirm ]: 123456

Далее нажимаем инсталяция и нам сообщают
Все ок и кликаем Finish Instalation


Далее видим, что визард просит удалить директории install и contrib.
Please ensure both the install/ and contrib/ directories are deleted
что мы и делаем# rm -R /usr/local/www/phpBB2/install/


Теперь заходим на форум http://127.0.0.1/login.php (или http://IP_форум/index.php)
логинимся админом и все - форум готов :)
Для входа в административный раздел - ищем в самом низу слово
Go to Administration Panel и кликнем на него.

5) Русификация форума
Идем на http://www.phpbb.com/languages/?type=20x
ищем строку Russian и качаем файлы lang_russian.tar.gz и subsilver_russian.tar.gz

распаковываем содержимое lang_russian.tar.gz с заменой файлов# tar -zxf lang_russian.tar.gz
# cd lang_russian
# cp -R * /usr/local/www/phpBB2/language/lang_english



распаковываем содержимое subsilver_russian.tar.gz, так же, заменив файлы# tar -zxf subsilver_russian.tar.gz
# cd subSilver/images/lang_russian/
# cp * /usr/local/www/phpBB2/templates/subSilver/images/lang_english




Теперь установим phpbb-devel-3.0r3

1) Инсталляция# cd /usr/ports/www/phpbb-devel/ && make install clean



2) VirtualHost
Далее, в конфиге виртуального хоста, указываем директорию phpBB3<VirtualHost *:80>
# Мыло админа
ServerAdmin Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
# Рутовая папка
DocumentRoot /usr/local/www/phpBB3
# Домен алиасы по которым виден хост
ServerName forum.mynet.ru
ServerAlias www.forum.mynet.ru
ServerAlias main.forum.mynet.ru
AddType application/x-httpd-php .php .php3
Action application/x-httpd-php /cgi-bin/php-cgi
DirectoryIndex index.php index.php3 index.html
# Логи
ErrorLog /var/log/www/mynet.ru-error.log
CustomLog /var/log/www/mynet.ru-custom.log combined
# Настройка .htaccess и запрет просматривать его из браузера
AccessFileName .htaccess
<Files ~ ^.ht>
Order allow,deny
Deny from all
</Files>
</VirtualHost>



3) Создание базы в MySQLmysql> create database forum2;

mysql> show databases;
+--------------------+
| information_schema |
| forum2 |
| mysql |
| typo3 |
+--------------------+
4 rows in set (0.00 sec)



4) Веб визард
Стартуем Apache и набираем в браузере http://IP_Site/install/install.php
В phpbb3 так же, имеется визард.

(Я бы посоветовал сразу руссифицировать инсталляцию. Для этого
качаем lang_ru.tar.gz по адресу http://www.phpbb.com/languages/ и распаковываем
содержимое архива в /usr/local/www/phpBB3/language/ru)

Далее, во вкладке Установка смотрим Tребования все ли установленно на сервере.
При наличии всех необходимых компонентов, нажимаем внизу кнопку Начать Установку

Конфигурация базы данных (БД)Тип базы данных: MySQL
Имя сервера БД или DSN:
Порт сервера БД:
Название базы данных: forum2
Имя пользователя БД: admin
Пароль к БД: 123456
Префикс для таблиц в базе данных: phpbb_



C Настройкой администратора все понятно, нажимаем Next, пока не дойдем до раздела
Расширенные настройки. В этом разделе внимательно заполняем поля, исходя из
собственных настроек и предпочтений. Далее Next, Next (где-то я уже такое видел ;)) и все.
Поздравляем!
Вы успешно установили phpBB 3.0.RC3. Сейчас у вас есть два варианта, как
поступить с только что установленным phpBB3:

Сконвертировать имеющуюся конференцию в phpBB3
Единая система конвертирования phpBB поддерживает конвертирование из phpBB 2.0.x
и других типов конференций в phpBB3. Если у вас есть конференция, которую вы
желаете сконвертировать, прейдите в систему конвертирования.

Начать пользоваться phpBB3!
Нажмите на кнопку ниже, чтобы перейти в администраторский раздел. Уделите
некоторое время изучению доступных пунктов меню и настроек. Помните о доступной в
интернете документации и форуме техподдержки (на английском) а также Русскоязычном
форуме перевода Olympus, за дополнительной информацией обратитесь к README.

Удалите, переместите или переименуйте папку install прежде чем начнёте пользоваться
конференцией. В противном случае будет доступен только администраторский раздел.



Удаляем директорию install# rm -r /usr/local/www/phpBB3/install/



5) Русификация и настройка
Руссифицирование phpbb3 мало чем отличается от второй версии, для этого необходимо:

скачать с сайта http://www.phpbb.com/languages/ в разделе Russia, файл lang_ru.tar.gz,
prosilver_ru.tar.gz, subsilver2_ru.tar.gz.

Распаковываем содержимое архивов в phpBB3
# tar zxvf lang_ru.tar.gz
# mv ru/ /usr/local/www/phpBB3/language/ru

# tar zxvf prosilver_ru.tar.gz
# mv prosilver/imageset/ru/ /usr/local/www/phpBB3/styles/prosilver/imageset/ru/

# tar subsilver2_ru.tar.gz
# mv subsilver2/imageset/ru/ /usr/local/www/phpBB3/styles/subsilver2/imageset/ru/


Затем в админке переключим на русский.

6) Обновление с RC4 до RCх
На сайте www.phpbb.com заходим в раздел Downloads ищем там раздел
[ Changed Files Only ] и качаем от туда файл phpBB-3.0.RCх-files.tar.bz2
Распаковываем содержимое архива в phpBB3# mv phpBB-3.0.RC5-files.tar.bz2 /usr/local/www/phpBB3/
# cd /usr/local/www/phpBB3/
# tar phpBB-3.0.RC5-files.tar.bz2


Распакованные файлы:x docs/
x docs/FAQ.html
x docs/AUTHORS
x docs/COPYING
x docs/auth_api.html
x docs/header_bg.jpg
x docs/coding-guidelines.html
x docs/header_left.jpg
x docs/CHANGELOG.html
x docs/INSTALL.html
x docs/README.html
x install/
x install/data/
x install/data/new_normalizer.php
x install/data/confusables.php
x install/install_main.php
x install/index.php
x install/phpinfo.php
x install/database_update.php
x phpBB-3.0.RC1_to_3.0.RC5.tar
x phpBB-3.0.RC2_to_3.0.RC5.tar
x phpBB-3.0.RC3_to_3.0.RC5.tar
x phpBB-3.0.RC4_to_3.0.RC5.tar



Далее запускаем Apache и в браузере набираем
http://IP_сайт//install/database_update.php
Он обновит базу данных до последней стабильной версии и выдастОбновление базы данных до последней стабильной версии

Тип базы данных :: mysql4
Предыдущая версия :: 3.0.RC4
Обновленная версия :: 3.0.RC5

Очистка имён пользователей
Выполнение может занять некоторое время... Пожалуйста, не останавливайте процесс.
Выполнение :: . Готово
Результат :: Без ошибок

Обновление структуры базы данных
Выполнение :: . . . . . . . . . . . . . Готово
Результат :: Без ошибок

Обновление данных
Выполнение :: . . . . . . . . . . . . Готово
Результат :: Без ошибок

Обновление версии и оптимизация таблиц
Выполнение :: . . Готово
Результат :: Без ошибок
Обновление завершено

Убедитесь, что также обновили файлы конференции, этот файл лишь обновляет вашу
базу данных. Войдите на конференцию и проверьте, что всё работает нормально.
Не забудьте удалить, переименовать или переместить папку install!



Далее заменим файлы конференции (файлы обновления создаются при распаковке
phpBB-3.0.RC5-files.tar.bz2 см выше распакованные файлы)
Заменим файлы# tar zxvf phpBB-3.0.RC4_to_3.0.RC5.tar



Удалим ненужные файлы и директории# rm -r docs/
# rm -r install/
# rm phpBB-3.0.RC*



После этого обязательно обновите языковые модули см Русификация форума
тк при обновлении до RCx языковые модули также обновляются под текущую RCx.

Обновлено 28.05.2010 13:39
 


Страница 3 из 6.

  • Вопросы по поводу написанных статей можно обсудить в нашем сообществе в Вконтакте / Questions about written articles can be discussed in our community in Vkontakte Вопросы по поводу написанных статей можно обсудить в нашем сообществе в  Вконтакте / Questions about written articles can be discussed in our community in Vkontakte
Яндекс.Метрика