История создания одного сайта или как я его создавал

Я уже писал в итогах месяца, что я начал делать новый сайт. Сейчас я просто напишу немного про это.

Идея

Идея сайта составляет от 40 до 80% успеха сайта. Если идея хорошая, но реализация плохая — сайт провалится, либо будет тянуть очень много ресурсов (в основном денежных). Но если идея дурацкая, а то какая бы реализация её не была, она провалится. Есть много хорошо сделанных сайтов, которыми никто не пользуется.

В данном случае я создаю, что-то на подобии дорвея, только с уникальным контентом. Пример такого — рерайт статей, но у меня немного другой случай. Записи будут генерироваться автоматом по специальному алгоритму, прикрепляться случайная картинка в тему. Так как банально нет времени заниматься написаний статей, а сайты не так много приносят прибыли, чтобы заказывать статьи.

Движок

В этот раз я ушел от всяких CMS и буду делать на framework. Я долго изучал Laravel и теперь решился его использовать. Хотя думал использовать Slim4, но я его оставил на другой проект.

Почему я ушел от CMS? Ну я как то решил сделать сайт с отзывами на посылки. Делать решил на WordPress. Но я хотел добавить что-то подобное на сущность посылки. Т.е. получаем посылку, а в ней несколько товаров. При написании статьи указываю трекномер и цену товара. В итоге, к записи прикреплялось небольшая заметка — что ещё было в посылке и сколько всего она вышла. Функционал небольшой, возможности большие, было продумано дальнейшее развитие. Но реализация хромала — уперся в возможности плагина, с помощью нескольких костылей и какой то матери, я смог создать прототип. Вроде всё ок. Начал наполнять контентом. Но версия движка поменялась и всё полетело, исправил. Начались проблемы с другим плагином. И решая одну проблему, я сталкивался с другой. А добавить новый функционал становилось всё сложнее. Так что я забил на сайт, а домен после освобождения выкупила какая фирмочка и продает его.. уже лет семь как его продают.

Писать самому framework нет смысла. Хотя у меня уже есть подобный опыт и было создано несколько фреймворков. Кстати, на основной работе мы как раз работаем с самописным фреймворком. Просто зачем писать фреймворк, когда можно использовать готовый и значительно уменьшить время на разработку.

Fronend

С backend определились — новый движок Laravel версии 8. Далее frontend. Ну тут сложнее, хоть я, благодаря обучению, стал лучше разбираться во фронте и могу сам сверстать темку. Но зачем забивать себе голову и тратить время на адаптив, когда можно взять готовый css framework? Laravel работает из коробку с Bootsrap и tailwindcss. Но можно использовать любой другой. Так что я нашел неплохую тему на css framework и просто нарезал на блоки, выкинув лишнее для меня.

Получилось симпотично (на мой взгляд), работает адаптив и сайт рендерится довольно быстро.

Прототип

С технологиями определился.

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

Создаем первые страницы со случайными текстами. В Laravel можно использовать фабрики для генерации. Запускаем фабрику — и у нас есть пользователи, статьи, страницы, комментарии и всё что угодно. Довольно удобно.

Скорость прототипа вышла хорошая. На скриншоте запуск через встроенный сервер

Регистрация

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

Но в данном случае, я зарегистрировал новый. Как я понимаю, не только у меня проблемы с придумыванием названий сайта. Регистрировать решил на TimeWeb. Там у меня есть виртуальный хостинг, который я получил по рекомендации на учебе Skillbox — оплачиваешь хостинг на год, второй бесплатно. Но мне удалось получить по скидке и третий бесплатно. Также домены стоят дешевле чем в Reg.ru (думаю их тоже перенести в TimeWeb).

После регистрации отправил заявку на получения бесплатного сертификата SSL Let’s Encrypt.

Деплой

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

Иногда случалось, что добавил колонку в БД, а пока дописывал другую часть. Про изменения БД забыл, а потом залил обновление на сайт и всё закрашилось. А искать ошибки на реальном сервере — это моветон. Но в принципе часть сайтов так и работает — настроен слив файлов в PHPStorm на deploy сервер. Т.е. изменил функционал, нажал Ctrl+Alt+Shift+X и всё, изменения на сайте.

Кстати, на реальном сервере работает чуть быстрее, но тут нет панели дебаггера и скрипты минимизированны.

Реклама и счетчики

Подключил метрику. Это делается элементарно — просто прописать код в layaot.

Добавил код от sape и отправил на модерацию сайт. Через два дня её приняли.

РСЯ сайт не приняли, но это было ожидаемо.

Теперь осталось дождаться индексации Яндекса и Гугл, ну и настроить автонаполнение сайта. Сейчас это делается в ручную через консольную команду типа

php artisan post:create

Позже напишу, как подключить Sape к Laravel.

Подключение Git

В этот раз я решил использовать систему Git. На локальном сервере разрабатываю в ветке Dev. Есть релизная ветка Мастер. Дописываю функционал, потом делаю merge в релизную ветку. Можно обойтись одной веткой, но часть функционала потеряется. Если при merge указать номера issue, то он будет связан с ними — они будут закрыты, если написать close #21. Также если есть проект, то связанные задачу перейдут в другой статус. Про проекты и канбан доски хотел написать тут, но статья уже довольно большая выходит, так что будет написано в отдельной статье.

Потом на сервере нужно просто запустить команду git pull и всё. Ну иногда ещё команду php artisan migrate (внесение изменений в бд).

Потом попробую сделать при обновлении релизной ветки — автоматически запускать команды на сервере. Как я понял это делается через хуки на GitHub.

В лучших практиках пишут, что для добавления нового функционала создается новая ветка. То есть, придумали новую фичу, создали новую ветку (от ветки разработчика), внесли изменения, создали merge в основную ветку (с удалением данной ветки). Проверили как работает, отправили merge в релизную.

Примерно так я делаю при разработке Яндекс.Турбо Для Mediawiki. В гите если навести/нажать на #3, то можно получить дополнительную информация из раздела issue (вопросы/проблемы)

На бесплатном аккаунте Гит всего 500 метров, Но тут хочу сделать так: ядро в гите, а файлы в cdn, например, в ЯндексStore, используя кеш ядра. Для переезда мне потребуется всего-лишь несколько команд, типа:

git init
git clone мой_репозиторий
nano .env
php composer update

Ну и несколько команд движка:

# Для Laravel:
php artisan migrate
php artisan storage:link

# Laravel в TimeWeb
ln -s ~/megasite/public ~/megasite/public_html

И всё сайт развёрнут. Останется только перенести саму БД.

Итоги

На создание прототипа ушло у меня примерно неделя (не забываем, что у меня есть обычная работа). Осталось куча мелких доработок и добавление различных фишек. Ну и генераторы немного поправить.

Только что заливал крупное обновление для сайта, всё сделано несколькими командами:

git pull
php artisan migrate
php artisan db:seed
php artisan check

Немного о командах:

  1. получить изменения из гита
  2. обновить структуру db (я добавил таблицу, а в другой — добавил несколько столбцов)
  3. заполнить таблицу (я добавил несколько начальных данных для скриптов), это чтобы не снимать дамп с локальной БД и не заливать из на сервер. Средства Laravel позволяют заполнять бд любыми данными, как реальными, так и фиктивными для тестов
  4. команда, которую я сделал для проверки целостности данных. Она проверяет записи и заполняет пропуски (при генерации любые ошибки могут быть).

4 thoughts on “История создания одного сайта или как я его создавал

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

Добавить комментарий