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

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

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