История одного большого проекта. Начало.

    Всё началось с того, что нам подкинули очередной заказ. Пообщавшись с заказчиками на первой встрече я слегка обалдел от их аппетитов и даже было подумал что опять попался очередной клиент, который хочет мега-сайт за 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 – для файлов изображений, о чём чуть позже.

    Глубокая настройка и программирование

    Схема обработки запросов выглядит следующим образом:

    Схема распределения HTTP-запросов

    Все запросы обрабатываются в первую очередь nginx-ом, далее (в зависимости от поддомена) либо отдаётся статический файл, либо запрос передаётся на бекенд – php-fpm. Php-fpm – это такой себе независимый PHP-интерпретатор, который работает с практически любым сервером по протоколу FastCGI.

    Настройки поддомена статики:

    1. server {
    2. 	#поддомен static
    3. 	server_name static.*;
    4. 	#Папка статики
    5. 	root /data/www/htdocs/static;
    6. 	location / {
    7. 		#Для всех файлов выставляем кеширование
    8. 		access_log off;
    9. 		expires max;
    10. 		add_header Pragma public;
    11. 		add_header Cache-Control public;
    12. 		try_files $uri $uri/ /index.html;
    13. 		}
    14. 	}

    Всё предельно просто – отдаём файл, выставляем ему заголовки кеширования и заголовок expires. Ну а тут – настройки остальных поддоменов:

    1. server {
    2. 	root /data/www/htdocs/www;
    3. 	index index.html index.htm index.php;
    4. 	server_name localhost;
    5. 	location =/favicon.ico{
    6. 		#Файл берём из папки статики
    7. 		root /data/www/htdocs/static/;
    8. 		#Выключаем лог доступа
    9. 		access_log off;
    10. 		#Включаем кеширование
    11. 		expires max;
    12. 		add_header Pragma public;
    13. 		add_header Cache-Control public;
    14. 		}
    15. 	location /{
    16. 		#Все запросы перенаправляем на index.php
    17. 		try_files $uri $uri/ /index.php;
    18. 		}
    19. 	location ~ \.php$ {
    20. 		#php-файлы обрабатываем через php-fpm
    21. 		fastcgi_split_path_info ^(.+\.php)(/.+)$;
    22. 		fastcgi_pass unix:/var/run/php5-fpm.sock;
    23. 		fastcgi_index index.php;
    24. 		include fastcgi_params;
    25. 		}
    26. }

    Обработкой всех запросов тут занимается файл index.php. Запрос /favicon.ico обрабатывается отдельно.

    Напутствие

    У нас остался один большой чёрный ящик – бекенд. Бекенд – «мозг» всего проекта, детали его работы я опишу в следующих статьях, а также, надеюсь, расскажу много интересных историй.

    Всё только начинается!

    Комментарии

    16.08.2014 10:53:49
    Avatar of 202202
    Большое спасибо вам за эту вашу статью и остальные ваши статьи по програмированию.
    Captcha Обновить
    Go Top