Евгений Сайты › Peppers Сбер ID
Сайты, SEO и GEO, реклама, чат-боты, ИИ и дизайн | Москва
Рейтинг
9 371
№ 111 в каталоге
Отзывы
Профессионализм
9/10
Коммуникация
9 /10
Город
Москва
Опыт работы
11 лет
На сайте с
2016 года
Юридический статус
Самозанятый
Freelance.Boutique
Премиум-сервис для лучших исполнителей

Создание сайта городского новостного портала: поддержка на CakePHP и Zend, шаблоны Smarty, сервер LAMP и импорт на PHP/Perl

Используемые навыки CakePHP LAMP PHP/Perl Smarty Zend

Описание

Евгений Росляков взял на постоянное сопровождение сайт городского новостного портала: привёл в порядок сервер LAMP, публичную часть на CakePHP, редакционную админку на Zend и шаблоны Smarty, а старые скрипты импорта на PHP/Perl починил и покрыл проверками. Сайтами он занимается с 2016 года, оформлен как самозанятый, заключает договор и выдаёт юридическим лицам закрывающие документы. Работает из Москвы и удалённо.

Портал выходит в небольшом городе, редакция там из нескольких человек. Сайт написан в 2012 году. Публичная часть сделана на CakePHP второй ветки, редакторы публикуют материалы через админку на Zend Framework 1, страницы собираются из шаблонов Smarty. Новости от партнёров и прогноз погоды подтягивают скрипты на Perl, которые запускает cron.

Сервер под всем этим годами не обновляли. В дни больших новостей читатели приходили все разом: перекрыли трассу, отключили воду, начался городской праздник. Сайт падал, и редакция теряла самую большую аудиторию именно в эти часы.

Создание сайта в 2012 году делал другой подрядчик, а теперь редакция искала человека, который будет заниматься порталом постоянно. Переписывать всё с нуля не хотели: денег нет, а к админке редакторы привыкли. Задача звучала так: остановить падения, защитить данные и составить план обновления небольшими шагами, не закрывая сайт на месяцы.

Для начала я прочитал код и осмотрел сервер: какие версии стоят, что запускается по расписанию, где лежат файлы и какие места падают первыми.

Решение

Начал с аудита. Выписал всё, что есть на сервере: версии PHP и Apache, расширения, задания cron, размеры таблиц, самые тяжёлые запросы. Выяснилось, что главная страница и ленты рубрик каждый раз собирались заново прямо из базы. Именно они и укладывали сервер в пиковые часы.

Потом занялся самим LAMP. Обновил операционную систему, Apache, MySQL и PHP. Код времён PHP 5 новые версии без правок не терпит, поэтому часть пришлось менять руками: устаревшие функции работы с базой, короткие теги, неявные преобразования типов. CakePHP и Zend я проверял страницу за страницей на копии сервера и только потом переключил боевой сайт.

Тяжёлые страницы закешировал. Главная и рубрики хранятся готовыми и пересобираются, когда редактор публикует материал или проходит короткий срок. В день большой новости читатель получает уже собранную страницу, и база почти не нагружается.

Отдельная история с импортом. Скрипты на Perl падали молча: партнёр менял формат ленты, и новости просто переставали приходить. Я аккуратнее переписал разбор файлов, добавил проверку формата и письмо редактору на случай, если лента не пришла. Связку PHP/Perl не трогал: Perl кладёт данные в таблицу, PHP их показывает. Для разбора лент и погоды написал тесты на примерах реальных файлов, включая битые.

Шаблоны Smarty почистил: убрал дубли блоков, мёртвые условия и куски, которые никто не выводил. Страницы стали легче, править их проще.

Настроил ежедневные резервные копии базы и файлов и проверил, что копию можно развернуть. Добавил мониторинг: если сайт не отвечает или главная открывается слишком долго, сообщение приходит мне и редактору.

В конце составил план постепенного обновления. Сначала админка на Zend Framework 1 переедет на поддерживаемого преемника (Laminas), потом по одному разделу уйдёт CakePHP. Каждый шаг делается отдельно, пока сайт работает.

Результат

В день больших новостей портал остаётся на ногах. Первая такая проверка случилась через пару месяцев после работ: читатели хлынули на материал о перекрытии дороги, главная открывалась как обычно, а редакция узнала о нагрузке из мониторинга, а не от возмущённых читателей.

Редакторы сидят в прежней админке и переучиваться не стали: это было условием заказчика.

Импорт перестал быть загадкой. Если партнёр присылает ленту в другом виде или не присылает вовсе, редактор получает письмо и знает, что делать. Раньше о проблеме догадывались по пустой рубрике.

Копии базы хранятся отдельно от сервера, и разворачивал я их на тестовой машине. Если сервер выйдет из строя, сайт поднимется заново, а не будет собираться по кускам.

Теперь про ограничение. Zend Framework 1 и вторая ветка CakePHP давно не развиваются, и кеширование этого не исправит. Дыры в них никто не закроет, поэтому я продолжаю следить за обновлениями, а портал двигается по плану: следующим идёт перенос админки, затем разделы публичной части.

Ваш сайт падает в самый неудобный момент, а менять его целиком страшно? Напишите мне на freelance.ru, где он стоит и на чём сделан. Посмотрю код и сервер и предложу порядок работ.

Оценили проект:

Другие проекты

Все проекты →
Маркетинг и Продвижение GEO-продвижение компании по ремонту квартир под ключ: целевые страницы, Landing Page на каждый тип ремонта, дизайн блога
GEO-продвижение компании по ремонту квартир под ключ: целевые страницы, Landing Page на каждый тип ремонта, дизайн блога
26
Веб-разработка и IT Создание сайта для завода кабельной продукции: B2B-каталог с остатками из SAP, NetSuite и Oracle Fusion, личный кабинет и заказы в ERP
Создание сайта для завода кабельной продукции: B2B-каталог с остатками из SAP, NetSuite и Oracle Fusion, личный кабинет и заказы в ERP
18
Веб-разработка и IT Сайт вокального тренера Оксаны Гурьяновой: Landing Page с видео учеников «до и после», типографика, HTML5 и CSS3, мобильные сайты
Сайт вокального тренера Оксаны Гурьяновой: Landing Page с видео учеников «до и после», типографика, HTML5 и CSS3, мобильные сайты
19
Веб-разработка и IT Создание сайта на MODX вместо пяти CMS: перенос сайтов группы компаний с HostCMS, NetCat, Diafan и DataLife Engine
Создание сайта на MODX вместо пяти CMS: перенос сайтов группы компаний с HostCMS, NetCat, Diafan и DataLife Engine
17