Ключевые слова:web, php, apache, freetds, postfix, (найти похожие документы)
From: Григорьев Максим <kongo@towar.ru.>
Newsgroups: email
Date: Mon, 09 Feb 2009 17:02:14 +0000 (UTC)
Subject: Создание Web и почтового сервера во FreeBSD
-------------------
Создание вебсервера для php5 + apache2 + freetds 7.0 и почтового сервера
postfix/imap на одной машине
Заголовок: Возникла необходимость настроить в корпоративной сети
отдельную станцию на FreeBSD, для работы веб-сайта и почтового сервера.
Таким образом, чтобы
а)сайт полноценно обрабатывал и отображал данные в кириллице,
находящиеся на удалённом сервере mssql2005 в локальной сети
б) модуль php взаимодействовал с графическими библиотеками для чтения
редакции больших изображений изображений
в) сервер мог предоставлять различные права для работы с ftp различным
клиентам (системным пользователям).
Иными словами: Возникла необходимость на системе freebsd 6.3 доставить
следующие дистрибутивы (я выбрал такую последовательность):
1.openssl
2.freetds
3.apache2
4.postgresql
5.php5
6.postfix
7.ssh2
8.proftpd
источники :
http://opennet.ru/base/net/postfix_mail_guide.txt.htmlhttp://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/http://www.freetds.org/userguide/config.htmhttp://wiki.centos.org/HowTos/postfix_restrictions
Установка оперативной системы FeeBSD-6.3.
Основы установки системы подробно описаны в документации на сайте http://freebsd.org
Там же скачивается дистрибутив.
Я ограничился минимальными конфигурациями для инсталяции:
Во всплывающих окнах инсталяционной программы указал :
Country Selection - Russian Federation
System Console Keymap - Russian KOI8-R
Sysinstall main menu - express
Выбираю нужный диск и форматирую его полностью автоматически, не
вдаваясь в сложности.
В окне 'Choose distributions' отмечаю опции :
Developer,Kern-developer, User
В окне choose installation media выбираю cd и нажимаю ок и ожидаю
поздравлений по завершении инсталяции, после чего отказываюсь от всех
дополнительных настроечных визитов, выхожу из программы инсталляции,
соглашаюсь с перезагрузкой и вынимаю диск.
Таким образом получаю систему с минимальными настройками
После перезагрузки ввожу логин: root и получаю полный доступ к
дальнейшей работе с системой freebsd.
Следующим действием мне необходимо
а)задать пароль для администратора root
б)ввести нового супер-пользователя, для работы в системе с корневыми допусками
в)прописать основные настройки, необходимые для дальнейших инсталляций.
Пароль для администратора root ввожу следующей командой:
# passwd root
New password: ******
Retype new password: ******
Ввожу нового пользователя коммандой:
# adduser
Username: kmg
Full name: kmg
Uid:
Login group [kmg]:
Default group is kmg.Invite kmg into other groups[]: wheel
(группа wheel наделяет пользователя kmg правами суперпользователя, под
которыми в дальнейшем будет проводиться инсталляции всех модулей)
После чего мне нужно только задать и поддтвердить пароль для нового
пользователя (все остальные настройки оставляем заданными по умолчанию).
Теперь нам необходимо прописаться в локальной сети ,открыть доступ к
интернету и назначить сервер имён.
Для этого
1) редактирую файл /etc/rc.conf с помощью утилиты ee
# ee /etc/rc.conf
и вписываю следующие строки
inetd_enable="YES"
выхожу из редакции и захожу в настроечный файл сервера inetd
# ee /etc/inetd.conf
мне необходимо запустить ftp службу для скачивания дополнительных
дистрибутивов в процессе инсталляции (с указанных мной локальных машин
или из интернета). Для этого я раскомментирую первую строку в данном
настроечном файле
ftp streem tcp nowait ..........
теперь при запуске системы у меня будет запущен сервер ftp
Выхожу из настройки inetd и проверяю свои сетевые интерфейсы коммандой:
# ifconfig
Узнаю, что кроме локального интерфейса lo0 у меня есть ещё сетевой адаптер realtec под именем rl0. Открываю редактором знакомый уже файл
# ee /etc/rc.conf
и прописываю локальный адрес для сетевой карты , адрес шлюза для выхода
в интернет (или данные, указанные провайдером, если машина напрямую
смотрит в интернет) и имя машины kmg.towar.ru (имеется доменное имя
towar.ru). Для этого добавляю строки
ifconfig_rl0="inet 192.168.0.2 netmask 255.255.255.0"
hostname="kmg.towar.ru"
сразу оговорюсь, что у меня провайдер выделяет нам кусок подсети из
нескольких внешних адресов, и настраивает обратную зону так, чтобы
обратная зона для одного внешнего адреса точно соответствовала названию
сайта http://www.towar.ru (необходимо ,например, если apache запускается
с поддержкой ssl), а обратная зона другого врешнего адреса соответсвовала
хосту почтового сервера mail.towar.ru, который находится на этой же
машине ( это для того, чтоб очень строгие сервера
могли не находили изьян при проверке соответствий данных протокола
smtp). Таким образом мне нужно прописать на тот же сетевой интерфейс
ещё 2 внешних ip и попросить провайдера прописать на эти ip имена
хостов в обратной зоне
ifconfig_rl0_alias0="xxx.xxx.xxx.xxx netmask 255.255.255.248"
ifconfig_rl0_alias1="xxx.xxx.xxx.xxx netmask 255.255.255.248"
выхожу из редактора и редактирую файл для запроса к серверу имён
# ee /etc/resolv.conf
(скорее всего такого файла пока нет - редактор его создаст) у меня есть
собственный dns server, у кого его нет - должен указать адреса, данные
провайдером
domain towar.ru
nameserver 192.168.0.1
Перезагружаю машину и вхожу под пользователем kmg, после чего коммандой
su и указанием пароля для root становлюсь суперпользователем и могу
продолжать инсталляцию (не забывая, однако, пропинговать что нибудь
вроде yandex.ru, чтобы убедиться в правильности сетевых настроек и
доступов).
Убеждаюсь, что у нас существуют директории /usr/src/sys /usr/ports
если их не существует, то вставляю первый (у меня и единственный)
инсталляционный диск freebsd и запускаю комманду
# sysinstall
в инсталляционном окне нажимаю
Configure
следом - distributions
потом отмечаю - ports
потом - на всякий случай - src - all
(существуют более обоснованные и последовательные методы работы с
портами и исходными файлами , но для этого определяются задачи, отличные
от тех, которые я указал в начале статьи)
Для дальнейшего удобства я решил поставить текстовый редактор deco,
утилиту sudo (для работы с такими программами posgresql из оболочки nologin)
и утилиту gmake.
Ставится она просто из потров
cd /usr/ports/misc/deco && make install clean
cd /usr/ports/security/sudo && make install clean
cd /usr/ports/devels/gmake && make install clean
Все конфигурационные опции - по умолчанию
Установка OPENSSL
Для того, чтоб не углубляться в конфигурации последующих дистрибутивов
со своими дополнительными указаниями или исправлениями я решил в самом
начале поставить openssl (после некоторых безуспешных попыток выполнить
свои задачи в другом порядке инсталляций).
cd /usr/ports/security/openssl
make OPENSSL_OVERWRITE_BASE=yes install
Установка FREETDS
-----------------
Необходим прежде всего для связки php5 и удалённого сервера mysql. Тут
нужно внимательно изучить возможности конфигурации php5 и freetds для
того, чтобы можно было отображать и правильно редактировать большие
тексты в кириллице на сервере mssql2005 через веб - интерфейс.
Такие как например карточка ростовской фирмы music_star http://towar.ru/ff/sfi~34923_48_138/sk~no-no/s1~/sg~1
или объявление китайских поставщиков http://www.towar.ru/bull~1044
конфигурации php-5.2.5 требуют следующего:
./configure -with-apxs2=/usr/local/apache2/bin/apxs --with-mssql=/usr/local/freetds \
--with-pgsql=/usr/local --with-gettext=/usr/local --with-iconv-dir=/usr/local \
--with-libxml-dir=/usr/local --with-gd=/usr/local --with-zlib \
--with-freetype-dir=/usr/local --enable-gd-native-ttf --with-jpeg-dir=/usr/local \
--with-png-dir=/usr/local --with-ttf=/usr/local --enable-sockets
нахожу в интернете файл php-5.2.5.tar.gz распаковываю, захожу в
директорию и читаю внимательно ./configure -help | grep (всё что
касается mssql, текстов, конвертеров, чарсетов, odbs и всего
сопутсовующего добра), так как мне необходимо сконфигурировать
freetds протокола не ниже 7.0 http://www.freetds.org/userguide/choosingtdsprotocol.htm
и задать в последующей конфигурации параметр
client charset = cp1251
Приступаю к установке freetds
1)нахожу и скачиваю freetds-0.64.tar.gz распаковываю
tar zxvf freetds-0.64.tar.gz
захожу - cd freetds-0.64
2) читаю конфигурации ./configure --help, одновременно сверяясь с описанием
http://www.freetds.org/userguide/config.htm
3)конфигурирую
./configure
предпочитаю держать все файлы в отдельной папке
--prefix=/usr/local/freetds
так же добавляю опции
--with-libiconv-prefix=/usr/local
(убеждаюсь, что библиотеки iconv мне необходимы как для php5, так и для
freetds) поэтому иду в порт и ставлю заранее
cd /usr/ports/converters/iconv && make install clean
/* cd /usr/ports/converters/libiconv && make install clean */
--with-tdsver-7.0
--with-unixodbc=/usr/local
(заранее инсталлирую из портов cd /usr/ports/databases/unixODBC && make install)
--enable-msdblib
/* --enable-sybase-compat */
4)make
make install
5)Проверяю:
/usr/local/freetds/bin/tsql -S 192.168.0.5 -p 1433 -U *** -P ******
Пока работает - несколько команд t - sql - читаю каракули с небольшой
тестовой таблицы, выхожу командой quit
6) изменяю конфигурации :
захожу в редактор deco и нахожу файл /usr/local/freetds/etc/freetds.conf
нахожу опцию [global] - меняю версию
tds version = 7.0
client charset = CP1251
повторяю проверку согласно пункту 5 - получаю знаки вопроса вместо
кириллицы - не смущаюсь - выхожу и приступаю к следующей настройке
Установка APACHE2
сервер httpd я устанавливаю в отдельную директорию - /usr/local/apache2
(в случае неудачи или невнимательности - я просто удаляю данную
директорию и инсталлирую заново)
1) нахожу скачиваю и распаковываю файл
tar zxvf httpd-0.61.tar.bz2
2) захожу в созданную директорию и конфигурирую
Опытным путём я заключил, что решения вышеуказанных задач подойдут
следующие конфигурации.
./configure --prefix=/usr/local/apache2 --enable-cgi --enable-rewrite \
--enable-so --enable-shared=max
3)make
make install
4)и соответственно запускаю
/usr/local/apache2/bin/apachectl start
5)захожу снаружи по ip http://192.168.0.2 и получаю дефолтовое
приветствие сервера apache
Теперь нужно сделать стартовый файл для сервера apache
для этого я захожу в директорию
cd /usr/local/etc/rc.d
создаю и редактирую файл
ee apache.sh
где пишу следующие строки
#!/bin/sh
case "$1" in
start)
/usr/local/apache2/bin/apachectl start
;;
stop)
/usr/local/apache2/bin/apachectl stop
;;
esac
exit 0
обращаем данный файл в исполняемую программу
chmod +x apache.sh
соответственно редактируем
ee /etc/rc.conf и добавляем туда строку
apache_enable="YES" - перезагружаем сервер и проверяем запущен ли apache
ps -ax|grep httpd
Установка POSTGRESQL
Установку и настройку базы данных postgresql я выполнил почти в
соответсвии с рекоммендациями данной статьи http://opennet.ru/base/net/postfix_mail_guide.txt.html
cd /usr/ports/databases/postgresql80-server
make install
конфигурации по умолчанию
ee /etc/passwd
нахожу строку с пользователем pgsql и меняем оболочку /bin/sh на /usr/sbin/nologin
следующей коммандой запускаю первичную инициализацию базы данных
sudo -u pgsql initdb -D /uasr/local/pgsql/data
создаю редактором стартовый файл
cd /usr/local/etc/rc.d
ee postgresql.sh
в него заношу следующие строки
#!/bin/sh
echo "POSTGRESQL" $1
/usr/local/bin/sudo -u pgsql /usr/local/bin/pg_ctl -D /usr/local/pgsql/data \ $1
exit
обращаем данный файл в исполняемую программу
chmod +x postgresql.sh
перезапускаю машину и проверяю как работают процессы apache и postgresql
если всё работает - можно приступать к следующей ступени
УстановкаPHP5
задача - удачно сконфигурировать php примерно так:
./configure
--with-apxs2=/usr/local/apache2/bin/apxs
сервер apache2 был сконфигурирован с параметром -enable-so
проверяю ldd /usr/local/apache2/bin/httpd
--with-mssql=/usr/local/freetds
установлен
--with-pgsql=/usr/local
установлен
--with-gettext=/usr/local
проверяю свои подозрения, что библиотека gettext уже имеется
cd /usr/local/lib
ls *text*
получаю список
--with-iconv-dir=/usr/local
установлен ранее
--with-libxml-dir=/usr/local
иду и устанавливаю cd /usr/ports/textproc && make install clean
---with-gd=/usr/local
устанавливаю cd /usr/ports/grephics/gd && make config &&
выбираю опции: X11, FONTCONFIG,ICONV, make install clean
--with-zlib
--with-ttf
--enable-gd-native-ttf
--with-jpeg-dir=/usr/local
устанавливаю cd /usr/ports/graphics/jpeg && make install clean
--with-png-dir=/usr/local
устанавливаю cd /usr/ports/graphics/png && make install clean
--enable-sockets
make && make install
О настройке самой связки postgresql+postfix+imap по моему удачно
написано здесь: http://opennet.ru/base/net/postfix_mail_guide.txt.html
хотя каждую ступеть пришлось последовательно тестировать и изменять,
подгонять под свои системные требования.
И ещё
О правилах ограничения smtp в настройках postfix для работы в
глобальной сети ничего проще и доступнее пока не находил чем тут http://wiki.centos.org/HowTos/postfix_restrictions
PS. ssh2 и proftpd я поставил из портов в самую последнюю очередь -
после того как машина была полностью подготовлена и прописана по сетевым
интерфейсам