Всё началось с того, что нам подкинули очередной заказ. Пообщавшись с заказчиками на первой встрече я слегка обалдел от их аппетитов и даже было подумал что опять попался очередной клиент, который хочет мега-сайт за 100$ и толку от этого заказа не будет. Однако заказчик попался адекватный и вполне серьёзный (имён и адресов я, конечно же, не назову).
Нам предлагалось разработать такой-себе симбиоз хорошей classified-системы и многих других интересных инструментов. И всё это должно выдерживать высокие нагрузки, иметь максимально гибкие настройки и иметь целую кучу всяческих плюшек. Полгода мы составляли техническое задание, финальная версия которого занимает более 300 страниц и напоминает приличную книгу, утрясали технические и юридические вопросы, и вот, наконец, свершилось – мы подписали контракт на разработку этого мега-монстра!
Интересный факт Финальная версия тех. задания нашего большого проекта занимает более 300 страниц и напоминает приличную книгу!
Ну, так вот, о чём это я. Я пишу эту статью не с целью попонтоваться, просто мне хотелось бы поподробнее описать принципы ведения больших проектов на примере нашего. Итак, у нас имеется: техническое задание, 1 архитектор (ваш покорный слуга), 2 программиста (для фронтенд и бекенд разработки), 1 дизайнер и несколько менеджеров. Как заварить из этого всего компот, какие трудности нас ждут, и как всё будет происходить, я буду описывать здесь.
Выбор инструментов
В первую очередь необходимо выбрать ОС. Исходя из моего опыта и опыта нашего передового программиста, было предложено три довольно популярных дистрибутива:
- FreeBSD – довольно неплохо документированная и старая система.
- Debian – Linux дистрибутив, если я не ошибаюсь, ветка Ubuntu.
- Fedora – тоже довольно неплохой Linux дистрибутив, слышал много хороших отзывов от коллег-программистов.
Вопрос решался всей командой. Почитав интернеты, FreeBSD откинули как устаревшую систему. Из оставшихся выбрали Debian как наиболее популярную (да и опыт Ubuntu тут пригодится).
Первоначальная настройка сервера
Нашли развалюху-комп (Celeron на 1000MHz со 128Mb RAM), на него поставили Debian, настроили SSH, репозитории и замуровали его в стену, оставив только питание и Ethernet. Остальной «джентельменский набор» устанавливали уже удалённо: nginx, PHP-fpm, MySQL, memcached.
Весь процесс установки и настройки занял полдня. Далее мы прописали IP-шник сервера в A записях домена и настроили nginx для основных поддоменов: домен static – для статики, files – для загружаемых файлов и media – для файлов изображений, о чём чуть позже.
Глубокая настройка и программирование
Схема обработки запросов выглядит следующим образом:

Все запросы обрабатываются в первую очередь nginx-ом, далее (в зависимости от поддомена) либо отдаётся статический файл, либо запрос передаётся на бекенд – php-fpm. Php-fpm – это такой себе независимый PHP-интерпретатор, который работает с практически любым сервером по протоколу FastCGI.
Настройки поддомена статики:
server {
#поддомен static
server_name static.*;
#Папка статики
root /data/www/htdocs/static;
location / {
#Для всех файлов выставляем кеширование
access_log off;
expires max;
add_header Pragma public;
add_header Cache-Control public;
try_files $uri $uri/ /index.html;
}
}
Всё предельно просто – отдаём файл, выставляем ему заголовки кеширования и заголовок expires. Ну а тут – настройки остальных поддоменов:
server {
root /data/www/htdocs/www;
index index.html index.htm index.php;
server_name localhost;
location =/favicon.ico{
#Файл берём из папки статики
root /data/www/htdocs/static/;
#Выключаем лог доступа
access_log off;
#Включаем кеширование
expires max;
add_header Pragma public;
add_header Cache-Control public;
}
location /{
#Все запросы перенаправляем на index.php
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
#php-файлы обрабатываем через php-fpm
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Обработкой всех запросов тут занимается файл index.php. Запрос /favicon.ico обрабатывается отдельно.
Напутствие
У нас остался один большой чёрный ящик – бекенд. Бекенд – «мозг» всего проекта, детали его работы я опишу в следующих статьях, а также, надеюсь, расскажу много интересных историй.
Всё только начинается!
Комментарии
Adding comments is temporarily disabled for unregistered users.