Стаж: 10 лет 6 месяцев 15 дней
Спасибо:65535 / 0 Сообщения: 154823
Пол: Не указан
Web-сервер на базе FreeBSD 7.2 (виртуальная машина для VMware)
Год выпуска: 2009 Платформа: i386 Совместимость с Vista: полная Язык интерфейса: английский + русский Таблэтка: Не требуется Описание: Представляю вашему вниманию виртуальную машину для VMware с установленной ОС FreeBSD и настроенной связкой Apache + PHP + MySQL, которая после небольшой настройки в Windows будет являться практически полным аналогом внешнего web-сервера. Для web-разработчика она способна заменить Denwer и дргуие аналогичные сборки, устанавливающиеся непосредственно в Windows. Также подойдет новичку во FreeBSD в качестве работащего учебного примера.
Доп. информация: ПО, установленное на виртуальной машине: FreeBSD 7.2-RELEASE-p3 i386 Apache 2.2.11 PHP 5.2.9 (с расширениями) MySQL 5.1.33 Perl 5.10.0 Python 2.5.4 Ruby 1.8.7 + панель управления Webmin + кое-что по мелочи - mc, lynx, wget... Консоль руссифицирована. MySQL настроена для работы с кодировкой cp1251. Иксов нет.
apache-2.2.11_7 Version 2.2.x of Apache web server with prefork MPM. autoconf-2.62 Automatically configure source code on many Un*x platforms autoconf-wrapper-20071109 Wrapper script for GNU autoconf automake-1.9.6_3 GNU Standards-compliant Makefile generator (1.9) automake-wrapper-20071109 Wrapper script for GNU automake ca_root_nss-3.11.9_2 The root certificate bundle from the Mozilla Project compat6x-i386-6.4.604000.200810 A convenience package to install the compat6x libraries curl-7.19.4 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) db41-4.1.25_4 The Berkeley DB package, revision 4.1 exim-4.69_3 High performance MTA for Unix systems on the Internet expat-2.0.1 XML 1.0 parser written in C freetype2-2.3.9_1 A free and portable TrueType font rendering engine gamin-0.1.10_1 A file and directory monitoring system gettext-0.17_1 GNU gettext package gio-fam-backend-2.20.1 FAM backend for GLib's GIO library glib-2.20.1 Some useful routines of C programming (current stable version) gmake-3.81_3 GNU version of 'make' utility help2man-1.36.4_2 Automatically generating simple manual pages from program output jpeg-6b_7 IJG's jpeg compression utilities libiconv-1.11_1 A character set conversion library libltdl-1.5.26 System independent dlopen wrapper libmcrypt-2.5.8 Multi-cipher cryptographic library (used in PHP) libslang2-2.1.4_1 Routines for rapid alpha-numeric terminal applications development libtool-1.5.26 Generic shared library support script libxml2-2.7.3 XML parser library for GNOME lynx-2.8.6.5_5,1 A non-graphical, text-based World-Wide Web client m4-1.4.12,1 GNU m4 mc-4.6.2 Midnight Commander, a free Norton Commander Clone mysql-client-5.1.33 Multithreaded SQL database (client) mysql-server-5.1.33 Multithreaded SQL database (server) p5-Authen-PAM-0.16_1 A Perl interface to the PAM library p5-MIME-Base64-3.07 Perl5 module for Base64 and Quoted-Printable encodings p5-Net-SSLeay-1.35_1 Perl5 interface to SSL p5-gettext-1.05_2 Message handling functions pcre-7.9 Perl Compatible Regular Expressions library perl-5.10.0_2 Practical Extraction and Report Language php5-5.2.9 PHP Scripting Language php5-bz2-5.2.9 The bz2 shared extension for php php5-ctype-5.2.9 The ctype shared extension for php php5-curl-5.2.9 The curl shared extension for php php5-dom-5.2.9 The dom shared extension for php php5-extensions-1.3 A "meta-port" to install PHP extensions php5-filter-5.2.9 The filter shared extension for php php5-gd-5.2.9 The gd shared extension for php php5-hash-5.2.9 The hash shared extension for php php5-iconv-5.2.9 The iconv shared extension for php php5-json-5.2.9 The json shared extension for php php5-mbstring-5.2.9 The mbstring shared extension for php php5-mcrypt-5.2.9 The mcrypt shared extension for php php5-mysql-5.2.9 The mysql shared extension for php php5-openssl-5.2.9 The openssl shared extension for php php5-pcre-5.2.9 The pcre shared extension for php php5-pdo-5.2.9 The pdo shared extension for php php5-pdo_sqlite-5.2.9 The pdo_sqlite shared extension for php php5-posix-5.2.9 The posix shared extension for php php5-session-5.2.9 The session shared extension for php php5-simplexml-5.2.9 The simplexml shared extension for php php5-spl-5.2.9 The spl shared extension for php php5-sqlite-5.2.9 The sqlite shared extension for php php5-tokenizer-5.2.9 The tokenizer shared extension for php php5-xml-5.2.9 The xml shared extension for php php5-xmlreader-5.2.9 The xmlreader shared extension for php php5-xmlwriter-5.2.9 The xmlwriter shared extension for php php5-zlib-5.2.9 The zlib shared extension for php phpMyAdmin211-2.11.9.5 A set of PHP-scripts to manage MySQL over the web pkg-config-0.23_1 A utility to retrieve information about installed libraries png-1.2.35 Library for manipulating PNG images popt-1.7_5 A getopt(3) like library with a number of enhancements, from Redhat portupgrade-2.4.6_2,2 FreeBSD ports/packages administration and management tool suite proftpd-1.3.2 Highly configurable ftp daemon python25-2.5.4_1 An interpreted object-oriented programming language ruby-1.8.7.160_4,1 An object-oriented interpreted scripting language ruby18-bdb-0.6.5 Ruby interface to Sleepycat's Berkeley DB revision 2 or later squid-3.0.18 HTTP Caching Proxy t1lib-5.1.2_1,1 A Type 1 Rasterizer Library for UNIX/X11 webmin-1.470_2 Web-based interface for system administration for Unix wget-1.11.4 Retrieve files from the Net via HTTP(S) and FTP zeroer-0.1_1 A command line utility for wiping unallocated space on a filesystem ZendOptimizer-3.3.0.a An optimizer for PHP code
Данная инструкция одинаково верна для Windows XP и Windows Vista.
Предполагается что на нашем компютере уже установлена VMware Workstation 5.x и выше или VMware Server 1.0.x и выше. Распаковываем куда-нибудь архив с виртуальной машиной (файл freebsd.7z). Перед ее запуском необходимо обязательно произвести настройку VMware-сети. Запускаем VMware Workstation/Server, затем в меню Edit -> Virtual Network Settings... во вкладе Summary посмотрите, какой виртуальный адаптер соответствует NAT (у меня это VMnet8). Затем заходим во вкладку Host Virtual Network Mapping. Справа от VMnet8 жмем стрелочку ">" и выбираем пункт Subnet... В окошке IP-адреса необходимо установить 192.168.231.0.
Наш виртуальный веб-сервер будет доступен по IP 192.168.231.3. Его доменное имя - web.rf (обратите внимание - rf а не ru, используется несуществующий на данный момент TLD). Чтобы на локальном компьютере при вводе в браузер адрес http://web.rf/ открывался с нашей виртуальной машины, необходимо прописать в файле C:WINDOWSsystem32driversetchosts строчку:
192.168.231.3 web.rf www.web.rf ftp.web.rf Теперь запускаем виртуальную машину и ждем 1-2 минуты пока загрузится FreeBSD и появится надпись:
FreeBSD/i386 (web.rf) (ttyv0)
login: На этом этапе пока можно не вводить пароль а просто свернуть (не закрыть) окно с виртуальной машиной и убедиться что она доступна из Windows. Выполняем "Пуск" -> "Все программы" -> "Стандартные" -> "Командная строка". В появившемся окне пишем:
ping 192.168.231.3 Смотрим, удачно ли прошел пинг. Если пакеты не передаются, значит сеть настроена неправильно. Если передаются, пишем:
ping web.rf Если нет пинга, значит что-то неправильно прописали в hosts, или прописали не туда куда нужно. Если пинг есть - открываем любимый браузер в Windows и набираем в адресной строке адрес web.rf . Должно появиться следующее:
Hello world!
Webmin phpMyAdmin phpinfo Если появилось - ура, все работает!
Теперь вернемся к нашей виртуальной машине. В системе есть 2 пользователя: root (пароль toor) и tim (пароль mit). Пароль к MySQL-серверу для root - lqsym. Зайдя под любым из них, можно также убедиться что пинг идет в обратную сторону:
ping -c4 192.168.231.1 и если с локальной машины есть доступ в интернет, то с виртуальной также должны пинговаться и внешние адреса, например:
ping -c4 mail.ru Если пинга нет, скорее всего виноваты какие-либо настройки безопасности Windows, файервол и т.д.
Осталось обсудить вопрос, каким образом будет происходить обмен файлами между реальной и виртуальной машинами. В Windows открываем любимый FTP-клиент, вводим адрес ftp.web.rf, логин - tim, пароль mit - и подключаемся к виртуальной машине по FTP, попадая в каталог /home/tim/. Путь к файлу index.php, результат которого мы видели в браузере, такой: /home/tim/www/web.rf/index.php. FTP-доступ для root отключен. SSH доступ есть для root и tim, но в данном случае неактуален, т.к. наверное проще развернуть окно виртуальной машины и работать непосредственно там.
Для корректного выключения системы (у меня shutdown через VMware просто "отключает питание") необходмо подать команду:
shutdown -p now
Предполагается что на данном этапе мы справились с установкой и настройкой веб-сервера и даже залили туда какой-то свой проект. Теперь нам хочется показать его миру. Кроме того у нас есть доступ в интернет и "белый" IP.
Способ #1. Проброс портов с помощью 3proxy (проверялось на Windows XP)
1) Открываем на локальном компьютере 80-й порт. В случае с брандмауэром Windows это делается так: "Пуск" -> "Панель управления" -> "Брандмауэер Windows". Переходим во вкладку "Исключения", нажимаем кнопку "Добавить порт...", указываем имя HTTP, номер порта 80, порт TCP и жмем ОК. Если у вас установлен другой файерволл - соответственно открываем этот порт через него. 2) Скачиваем 3proxy (aka 3APA3A proxy) (последняя стабильная версия). Создаем папку "C:Program Files3proxy" и распаковываем туда содержимое архива. В папке "C:Program Files3proxybin" создаем файл 3proxy.cfg и пишем в него:
log "C:Program Files3proxybin3proxy.log" auth none tcppm 80 192.168.231.3 80 3) Входим в командную строку Windows ("Пуск" -> "Выполнить" -> печатаем "cmd"), переходим в нужную нам директорию: > cd "C:Program Files3proxybin" и выполняем команду: > 3proxy --install После чего 3proxy запустится как служба и будет висеть на 80-м порту всех доступных сетевых интерфейсов, переправляя запросы на 80-й порт IP 192.168.231.3 нашей виртуальной машины. 4) Если что-то не заработало - смотрим лог-файл, вносим исправления. Затем: "Пуск" -> "Панель управления" -> "Администрирование" -> "Службы", находим службу 3proxy и перезапускаем ее. Если у нас статический внешний IP-адрес, то целесообразнее повесить 3proxy только на него а не на все подряд. Поэтому делаем так:
log "C:Program Files3proxybin3proxy.log" auth none tcppm -i90.100.110.120 80 192.168.231.3 80 Где 90.100.110.120 - это ваш статический IP-адрес. Если хотим пробросить больше портов (например 21 - это FTP, 22 - SSH, 10000 - Webmin и т.д.), то соответственно конфиг будет такой:
log "c:program files3proxybin3proxy.log" auth none tcppm -i90.100.110.120 80 192.168.231.3 80 tcppm -i90.100.110.120 21 192.168.231.3 21 tcppm -i90.100.110.120 22 192.168.231.3 22 tcppm -i90.100.110.120 10000 192.168.231.3 10000 Замечания. 1) Некоторые антивирусы могут сказать что 3proxy - это вирус, или подозрительное ПО, или еще как-то. Игнорируем. Но для надежности конечно качаем только с официального сайта 3proxy.ru 2) Если у вас уже что-то висело на 80-м порту (например Apache под Windows или IIS), то 3proxy туда не повесится. Аналогично для остальных портов. 3) Прежде чем выпустить виртуальную машину в глобальную сеть - обязательно смените все пароли!
Изменения в версии от 18.08.09 1) система обновлена до версии 7.2-RELEASE-p3, обновлены пакеты с уязвимостями; 2) исправлена ошибка с неверным течением времени внутри виртуальной машины; 3) в конфиг proftp добавлена опция "ListOptions -a" (теперь будут видны файлы начинающиеся с точки).
Изменения в версии от 06.05.09 (скачано 1257 раз) виртуальная машина полностью пересобрана. 1) использовался последний релиз FreeBSD (7.2) и последние версии ПО (Perl 5.10.0, PHP 5.2.9 и т.д.) 2) виртуальная машина теперь совместима с VMware Workstation 5.x и выше и VMware Server 1.0.x и выше. 3) размер виртуального жесткого диска уменьшен до 3.9 Гб для возможности распаковки архива на FAT32. 4) добавлен прокси-сервер squid (порт 3128, доступен для локальных сетей без авторизации). 5) добавлен ZendOptimizer.
Изменения в версии от 05.03.09 (скачано 778 раз) 1. Установлен Webmin. доступен по адресу http://web.rf:10000
3. Исправлена ошибка в списке хостов mysql. 4. Исправлены минутные подвисания при загрузке в случае отсутствия доступа к интернету у основной машины. 5. Изменения в ПО: - proftpd обновлен до финальной версии; - установлен exim (sendmail отключен в /etc/rc.conf); - установлен portupgrade (который кстати потянул за собой ruby - может кому-то тоже пригодится). 6. Дерево портов обновлено по состоянию на 27-е февраля.
Замечания к версии от 01.02.09 (скачано 354 раза) В MySQL вместо хоста web.rf по-ошибке указан daydream.ru. Исправить можно так:
# mysql mysql> use mysql; Database changed mysql> update user set host='web.rf' where host='daydream.ru'; Query OK, 2 rows affected (0,01 sec) mysql> exit; Bye # /usr/local/etc/rc.d/mysql-server restart либо вручную через phpMyAdmin заходим в базу mysql в таблицу host и меняем daydream.ru на web.rf для рута и для пустого юзера.
Q: Как установить дополнительное ПО? A: Допустим надо установить расширение PHP pdo_mysql. Идем на этот сайт, вводим в поиск pdo_mysql (или лучше php5-pdo_mysql), находим нужный нам пакет и обращаем внимание на эти строчки:
To install the port: cd /usr/ports/databases/php5-pdo_mysql/ && make install clean To add the package: pkg_add -r php5-pdo_mysql
т.е. надо выполнить либо 1-ю либо 2-ю команду. В 1-м случае pdo_mysql будет собираться из исходников, во 2-м скачается уже откомпилированный пакет. Установка готвого пакета (2-й вариант) намного быстрее, но: - скачается не самая свежая версия; - может возникнуть несовместимость с уже установленными пакетами; - в качестве зависимостей могут скачаться пакеты, конфликтующие с уже установленными пакетами. В нашем примере pdo_mysql может проигнорировать что у нас уже установлена mysql 5.1, начнет качать себе mysql 5.0, но система не даст его поставить - установка завершится ошибкой. Поэтому ставим по 1-му варианту, со сборкой из исходников. После установки расширений PHP необходимо перезапустить Apache:
/usr/local/etc/rc.d/apache22 restart
Q: Можно ли перенести сборку на реальное железо? A: Да. Для этого необходимо: 1) Перенести раздел с виртуального диска на реальный любым способом (Acronis, Ghost, Clonezilla, и т.д.). 2) Установить загрузчик. 3) Подправить файл /etc/fstab, заменив ad0s1 на код реального дискового устройства. Подробнее тут. 4) Перенастроить сеть на другой IP, шлюз и т.д. (файлы /etc/rc.conf, /etc/hosts, /usr/local/etc/apache22/httpd.conf и т.д.) Для п. 2 и 3 поможет Frenzy.
Q: Как увеличить дисковое пространство? A: Например можно перенести содержимое каталога /usr на другой диск/раздел и подправить /etc/fstab. Если внутри VMware - то создаем еще один виртуальный диск. Если переносили на реальное железо и там на диске осталось свободное место - то создаем еще один раздел на нем. Также смотрите эту статью.
Q: Чем были упакованы файлы виртуальной машины? Их размер 4 Гб, а в архиве всего 250 Мб... A: Использовался архиватор 7-Zip со стандартными настройками. Стоит заметить что 4 Гб - это pre-allocated образ жесткого диска, созданный VMware. Реальной информации на нем всего 1.3 Гб, остальное - нули, которые в архивном виде практически ничего не весят.
Внимание!!! Если вы каким-то образом сделали виртуальную машину доступной из глобальной сети, ОБЯЗАТЕЛЬНО смените все пароли!