Хостинг своими руками
Создаем локальный хостинг своими руками.
Очень часто для работы со скриптами ( PHP, JavaScript) требуется работоспособный веб-сервер. Веб-сервер, способный не только обрабатывать PHP-скрипты и HTML-документы, но и работающий с какой-либо СУБД, например MySQL. У каждого веб-мастера наступает момент, когда пользоваться хостингом от различных хостинг-провайдеров становится не очень удобно. Во-первых, ограничены ресурсы дискового пространства, объема оперативной памяти, строго ограничивается количество поддерживаемых доменов. В общем, рано или поздно веб-мастер осознает необходимость в использовании собственного веб-сервера.
Где же его взять. На первое время хватает Денвера. Но, опять же, рано или поздно каждый веб-мастер понимает, что Денвер это несерьезно. У этого веб-сервера есть масса плюсов. Он реально способен помочь при разработке проектов разной сложности. Однако он не способен тягаться с настоящими веб-серверами.
Самый простой способ, создать сервер с Apache, PHP, MySQL и phpMyAdmin, не считая, конечно же, Денвер — скачивание упомянутых дистрибутивов с сайтов разработчиков (все они бесплатные) и установка на свой домашний компьютер под управлением Windows. Но результат, который вы получите в итоге, будет даже хуже Денвера.
Нужно другое. Что? Нам нужен сервер под управлением FreeBSD. C сайта разработчиков мы скачиваем нужный нам релиз. Я качаю образ релиза 10.0 amd64, объем которого всего лишь 600 с лишним мегабайт. Теперь этот образ нужно запустить в VMWare Workstation. Здесь мы создадим нашу виртуальную машину под управлением ОС FreeBSD.
Создание виртуальной машины FreeBSD
Всё описывается на примере работы VMWare Workstation 9.
В VMWare Workstation нам нужно создать новую виртуальную машину.
Выбираем выборочный тип конфигурации
Оставляем без изменения настройки совместимости аппратного обеспечения.
Указываем путь к образу с FreeBSD 10.0.
Даем имя нашей виртуальной машине и указываем, где будут размещены её файлы. Хочу заметить, что имя, которое вы здесь даете, особого значения не имеет. Просто назовите её так, как это будет понятно для вас.
Настройки процессора не меняем
Выделяем машине 256 МБ оперативной памяти. Ей этого будет вполне достаточно.
Для доступа к виртуальной машине из своей локальной сети включаем использование сетевого моста.
Тип контроллеров ввода/вывода не меняем
Для машины используем новый виртуальный диск. Создаем его.
Тип диска оставляем рекомендуемый
Для диска виртуальной машины выделяем 20ГБ и создаем этот диск в одном файле.
Указываем, где будет расположен файл виртуального диска машины
Проверяем настройки. Оставляем установленной опцию включения виртуальной машины сразу после создания. И создаем её.
Выбираем многопользовательский режим загрузки ОС (1 ) и наблюдаем за процессом загрузки.
Начинаем установку FreeBSD
Выбираем раскладку клавиатуры Russian KOI-8R и продолжаем установку с ней.
Даем имя виртуальной машине. Вот здесь уже дается именно имя компьютеру. Системное имя машины.
Устанавливаем документацию, компоненты, обеспечивающие совместимость с приложениями для 32-битной системы. Игры нам не нужны, коллекцию портов мы установим новую сразу после инсталляции операционной системы, а тексты исходных кодов системы нам не нужны для решения задачи.
Приступаем к разметке диска. Используем для этого системную утилиту, которая всё сделает сама.
Для операционной системы мы будем использовать всё доступное дисковое пространство.
Завершаем разметку диска
Подтверждаем внесение изменений на диск.
Наблюдаем за процессом установки ОС и ждем его окончание.
Установщик попросит вас указать пароль суперпользователя (администратора системы). Укажите любой удобный вам. Вводимые символы не будут отображаться на экране, будьте внимательны при наборе. Пароль потребуется ввести дважды.
Выбираем сетевой интерфейс для настройки сетевого соединения машины.
И создаем для него конфигурацию IPv4. Если кто хочет, может настроить этот интерфейс по работе через DHCP.
Вы укажете IP-адрес для машины, сетевую маску, IP-адрес шлюза и IP-адрес DNS-сервера. IPv6 я не настраивал.
Системное время установим как UTC.
Нужно установить всех предложенных демонов системы.
Сразу же добавляем в систему пользователя, от имени которого будем работать.
Завершаем установку, выходим из установщика.
Система будет перезагружена. При загрузке выбирайте многопользовательский режим. Наблюдайте за загрузкой.
Настройка FreeBSD
FreeBSD это операционная система без графической оболочки. Управляется она исключительно из консоли. Довольно неудобно напрямую работать в консоли самой операционной системы. Лично мне, как и многим другим, гораздо удобнее использовать приложение PuTTy. Найти его вы легко сможете в интернете.
Когда скачаете и запустите, подключайтесь по IP-адресу своей виртуальной машины.
Введите логин, который вы указали для своего пользователя, а потом введите пароль.
Укажите пароль, который вы установили для суперпользователя. Помните, если вы для вашего пользователя при создании не указали группу wheel, вы не сможете работать от имени суперпользователя.
Для начала синхронизируем системные часы.
FreeBSD. Коллекция портов.
FreeBSD управляется из консоли. А значит 95% всей работы будет связана с редактированием текстовой информации файлов конфигурации. Нам нужно установить текстовый редактор. Лично мне те редакторы, которые присутствуют в системе после установки, мягко говоря, не нравятся. Я предпочитаю редактор nano и встроенный текстовый редактор в файловый менеджер midnight commander. Установка приложений в FreeBSD несколько отличается от привычной. Предпочтительной здесь является установка из коллекции портов. Но эту коллекцию мы не устанавливали при установке ОС. Значит сейчас нам нужно закачать в систему самую последнюю коллекцию портов.
Сначала создадим каталог ports в каталоге /usr
Переходим в эту директорию
Сначала нам нужно скачать коллекцию портов с помощью специальной утилиты.
Выполнение этой операции у меня заняло 3 минуты 46 секунд. Теперь коллекцию портов нужно распаковать.
: # portsnap fetch extract
Процесс весьма длительный. Он у меня занял 19 с лишним минут.
Пока выполняется распаковка портов, вы можете наблюдать, в какие каталоги что распаковывается.
Итак, нам нужно установить текстовый редактор nano.
Для поиска соответствующего порта переходим в каталог /usr/ports.
: # cd /usr/ports
: # whereis nano
Переходим в этот каталог
: # cd /usr/ports/editors/nano
: # make install && make clean && make clean
Установка приложений из коллекции портов характерна тем, что её нельзя оставлять без внимания. Приложение, которое вы устанавливаете, может самостоятельно устанавливать зависимые приложения. Почти всегда вам потребуется указывать компоненты для устанавливаемых приложений, для этого будет показываться диалоговое окно прямо у вас в консоли. Не оставляйте без внимания консоль надолго. Пока вы не ответите в ней на нужные вопросы, установка приложения будет остановлена.
Скорость установки приложений из коллекции портов зависит во многом от скорости вашего интернет-соединения, так как устанавливаемое приложение многие компоненты скачивает из сети.
Текстовый редактор nano у меня установился за 7 минут.
Теперь нужно установить файловый менеджер midnight commander.
: # cd /usr/ports
: # whereis mc
mc: /usr/ports/misc/mc
: # cd /usr/ports/misc/mc
: # make install && make clean && make clean
Midnight commander всегда устанавливается очень долго. Но без него вам будет очень тяжко администрировать вашу FreeBSD. Так что… потерпите.
Если вы не знаете, что значит какой-либо из предложенных к установке компонентов, просто продолжайте установку. У меня Midnight commander устанавливался 56 минут. Внешне он очень напоминает FAR. Не забудьте посетить сайты разработчиков nano и midnight commander. Там вы найдете много полезной информации об этих приложениях.
Во FreeBSD есть возможность читать документацию прямо в консоли. И это очень полезно. Чтобы ознакомиться с основной документацией по текстовому редактору nano, нужно выполнить следующую команду:
В выведенном тексте можно найти такую полезную вещь, как отмену переноса на новую строку части текста, которая в пределах одной строки не умещается на экране. Из-за этой особенности nano страдают многие пользователи, коверкая свои конфигурационные файлы.
То есть, запускать редактор nano лучше всего всегда с параметром –w.
Эта команда откроет основной конфигурационный файл FreeBSD — rc.conf из каталога корневой файловой системы etc. Чтобы закрыть его, нажмите одновременно клавиши ctrl и X. Следующая команда запустит файловый менеджер midnight commander.
Если вы в нем перейдете в каталог /etc, найдите в нем файл rc.conf. Нажмите F4, и увас откроется встроенный текстовый данного файлового менеджера — mcedit. Есть ещё и встроенный файловый просмотрщик — mcview.
Их также можно запускать и напрямую из консоли.
Настройка web сервера на Freebsd 10
В первой и второй частях мы рассмотрели установку и настройку операционной системы Freebsd 10.1 для разворачивания на ней блога wordpress. Теперь предстоит установить и настроить программное обеспечение, необходимое для нашего web сервера.
Я буду рассматривать самый простой и быстрый вариант настроек, с небольшим отклонением от дефолтных для нашего удобства. По каждому пункту могут возникать вопросы и нюансы, я не буду касаться всего этого в этой статье.
Устанавливаем ftp сервер vsftpd
Начнем нашу настройку с установки ftp сервера vsftpd. Для авторизации мы будем использовать системные учетные записи, анонимный доступ отключим.
Первым делом обновим порты:
После обновления, ставим сервер:
Компоненты оставляем по-умолчанию. Добавляем загрузку vsftpd в /etc/rc.conf:
Редактируем конфиг /usr/local/etc/vsftpd.conf, приводим его к следующему виду:
Проверяем, запустился ли демон:
В ответ должны увидеть что-то похожее:
Это означает, что сервер запустился и слушает входящие соединения на 21 порт. С текущими настройками можно залогиниться учетной записью root и перемещаться по всему серверу. Это очень небезопасно, призываю внимательно относиться к этим возможностям. Рекомендую подробнее ознакомиться с настройками сервера, обратить внимание на директивы userlist_enable, userlist_file, chroot_local_uses, chroot_list_enable, chroot_list_file. С помощью них можно ограничивать доступ к серверу и перемещение пользователей по папкам. Вообще, у vsftpd много настроек и возможностей, в интернете достаточно статей на подобную тему. Можно без проблем хранить базу пользователей сервера в mysql. В завершение порекомендую ограничить доступ к ftp через firewall.
Установка и настройка Mysql
Дальше устанавливаем сервер баз данных mysql:
Настройки оставляем дефолтные.
Сервер тянет за собой достаточно большое количество зависимостей. Установка постоянно тормозится и выскакивает окно с настройками очередной зависимости. Чтобы не отвлекаться на это и не тормозить процесс, я рекомендую перед командой make install clean ввести команду:
Она проверит все зависимости и выведет сразу настройки этих зависимостей. Потом в процессе сборки пакета уже не будет прерываний.
После завершения установки добавляем запуск сервера в rc.conf:
Создаем необходимые папки и выставляем права:
Создаем файл конфигурации:
Записываем следующее содержание в файл настроек:
Закомментированные строки включаем на свое усмотрение в процессе отладки. Если будет включен лог всех SQL запросов, то нужно не забыть настроить ротацию логов, файл будет расти очень быстро, можно забыть и пропустить момент, когда файл займет все свободное место.
Лог файлы нужно обязательно создать самим и выставить на них права пользователя mysql. Если этого не сделать, то сервер не будет стартовать, и что самое неприятное, не будет никаких сообщений в лог файлах. Они будут созданы с правами root:wheel и сервер ничего туда не сможет записать. Так что создаем файлы сами:
Проверяем, все ли запустилось как следует:
Если все в порядке, то вы увидите что-то похожее на это:
Дальше воспользуемся стандартным скриптом для безопасной настройки mysql:
Задаем пароль root пользователя mysql. Обращаю внимание, что это не системный root. В mysql свои пользователи. На остальные вопросы отвечаем положительно, в принципе, там все понятно описано, ничего сложного нет. Удаляется тестовая база, тестовый пользователь, запрещается удаленный доступ к серверу.
На этом настройка mysql окончена. Идем дальше.
Устанавливаем и настраиваем apache24
Устанавливаем непосредственно web сервер apache:
Оставляем все настройки по-умолчанию. Запускаем установку:
Добавляем apache в атозагрузку:
Теперь создадим 2 виртуальных хоста. На первом будет располагаться phpmyadmin, на втором наш сайт, в данном случае wordpress. Не забываем настроить в DNS эти хосты. Раскомментируем строчку в конфиге /usr/local/etc/apache24/httpd.conf
Дальше идем в папку /usr/local/etc/apache24/extra/ и редактируем файл httpd-vhosts.conf до следующего вида:
Я использую тестовый домен websrv.local В общем случае тут должен быть непосредственно домен вашего сайта, что-то вроде myblog.ru. Для phpmyadmin я использую поддомен с произвольным непопулярным именем, чтобы туда не заходил тот, кому не следует.
Обращаю внимание на параметр Require all granted. На предыдущих серверах я его не указывал. В этот же раз при обращении к виртуальному домену в логах получал ошибку:
Скорее всего это особенность apache24, до этого я пользовался более ранними версиями.
Сайты я размещаю в каталоге /web/sites. Для каждого домена отдельная папка. Для улучшения безопасности можно настроить отдельных пользователей для каждого поддомена, сделать пользователя ftp, доступ к логам и так далее. В этой статье я не буду касаться этого вопроса. У нас будет один сайт и один пользователь. Создаем необходимые папки:
На этом пока настройку apache закончим, мы к ней вернемся позже, когда установим остальные компоненты. Запускать его не будем, он все равно не запустится, выдаст ошибку.
Устанавливаем php и phpextensions
Дальше устанавливаем php, настройки оставляем настройки по-умолчанию:
После установки создаем файл конфигурации:
Помимо настроек по-умолчанию, обязательно добавляем CURL, DOM, POSIX, FTP, GD, HASH, ICONV, XML, JSON, MBSTRING, MYSQL, MYSQLI, OPENSSL, SOCKETS, TOKENIZER, XMLREADER, ZLIB, EXIF, GETTEXT,
Теперь поставим модуль php для apache. Он теперь стал почему-то отдельным портом. Я не сразу первый раз сообразил, куда делся модуль, который всегда ставился вместе с портом php. В общем, ставим отдельно:
Для того, чтобы apache правильно обрабатывал php файлы, необходимо в конфиг httpd.conf добавить следующие строки:
Теперь можно запустить apache и проверить, все ли у нас в порядке. Сначала проверим, нет ли у нас ошибок в конфигурации:
У нас ошибка, модуль mod_rewrite не подключен. Чтобы это исправить, раскомментируем в конфиге апача строку
Снова ошибка, но не критичная, можно работать и с ней, но мы все равно ее исправим. В фале httpd.conf находим строку со значением ServerName и приводим ее к виду:
Сохраняем файл, проверяем конфигурацию:
Все в порядке, можно стартовать apache:
Проверяем, все ли запустилось:
Если получаете что-то подобное, значит все в порядке. Сейчас можно в браузере набрать http://ip-сервера/ и увидеть страничку с одной единственной надписью:
Это означает, что веб сервер apache работает, все в порядке.
Настройка frontend сервера nginx
Добавим nginx в автозагрузку:
Редактируем конфиг nginx /usr/local/etc/nginx/nginx.conf, приводим его к следующему виду:
Указываем свой внешний ip адрес. Проверяем настройки nginx:
значит все в порядке.
Теперь необходимо изменить конфигурацию apache, чтобы он слушал только локальный интерфейс 127.0.0.1, а все внешние запросы принимал nginx и перенаправлял к apache. Меняем в /usr/local/etc/apache24/httpd.conf строку с параметром Listen, приводим к виду:
Наш веб сервер готов. Теперь проверим его работу. Создадим в папке /web/sites/websrv.local/www файл index.php с содержимым
Заходим в браузере по адресу http://websrb.local
Если вы видите информацию о версии php и его модулях, значит все настроено и работает.
Установка phpmyadmin на виртуальный хост
По-умолчанию, phpmyadmin устанавливается в папку /usr/local/www/phpMyAdmin, но так как мы для него создали отдельный виртуальный хост, то переносим все содержимое папки туда: