Ответы пользователя по тегу Веб-разработка
  • Как деплоить небольшие проекты?

    @Stqs
    senior software developer
    вопросы у вас философские, на каждый можно отвести часы обсуждения
    Полноценный CI/CD поднимать не вижу смысла ввиду размеров

    вы ж все равно собираетесь какие-то скрипты мутить и чото выдумывать,
    какая разница это будут крон скрипты на сервере или джоба в дженкинсе? по-скорости написания - одно и тоже будет. так что по-моему размер тут не имеет значение
    единственное что имеет значение - насколько явно у вас описан процесс(алгоритм) билда/разворачивания приложений
    с этой точки зрения мое видение примерно такое:

    1) git не есть инструмент для развертывания по, git лишь для версионирования кода
    и по-идее результатом вашей работы должен быть не код в гитхабе, а какой-то вменяемый артефакт, готовый к деплою (docker-image, pip пакет, npm пакет, deb пакет, jar, war, zip в крайнем случае, и тд и тп). Если производить артефакты то вопрос с тегами отпадет сам собой - у вас будет артефакт какой-то версии и все
    сервер не должен знать ни про какие гиты и ни про какие-то теги в нем
    Здесь я бы рекомендовал паковать все в докер-имеджи хотя бы только потому, что сервер в итоге не будет знать ничего о зависимостях приложения, нужных библиотеках, ниочем вообще, вам нужно установить только докер
    Огромное преимущество использование докера - в Dockerfile вы вынуждены волей/неволей описать точно и явно все шаги требуемые для установки приложения. И что самое замечательное - это все будет храниться в том же репозитории, под контролем гит - шикарно.
    Артефакты желательно хранить в каком-то артефактории,
    но если реально все просто - то можно хранить несколько последних версий прямо на сервере в какой-нибудь папочке

    2) как только вы получили артефакт - его можно деплоить
    неплохо было б знать особенности вашего проекта, но грубо говоря допустим что достаточно его зааплоадить на сервер, положить в нужное место
    опять же с этим дженкинс справится на ура и займет у вас это все дело 10 минут . Если вы опишете логику в Jenkinsfile вы выиграете еще раз потому что процесс развертывания(алгоритм) будет описан опять же ЯВНО. И будет тоже под контролем гита. (Jenkins должен знать только в каком репозитарии и в каком месте ему искать Jenkinsfile)
    Если же вы будете крутить какой-то спрятанный cron скрипт на сервере - о нем никому ничего не будет известно. Поверьте уже через короткое время все это дело начнет усложнятся, что-то забудется, что-то измениться и это все вместе больно ударит вас по яйцам.

    В чем еще преимущество такого подхода: если вам нужно сделать roll-back на предыдущую версию вам не нужно собирать проект заново выкачивая все с гита, ведь у вас есть предыдущие артефакты, ролбек в таком случае вообще не проблема - просто указываем предыдущую версию артефакта и деплоим еще раз и все

    3) Env Variables
    когда приложение стартует - считывает все что ему нужно из переменных окружения
    деплой джоба может каждый раз эти переменные устанавливать перед тем как деплоить - это было бы тоже круто потому что вы сделали бы это знание так же явным

    Итого имеем
    - логика сборки проекта описана в Dockerfile и находится под гитом
    - логика деплоя находится в Jenkinsfile и находится под гитом, и что самое главное является кодом (Jenkinsfile пишем на груви, для простых вещей вам понадобиться 30 минут изучения и все)
    - на сервере мы ничего не устанавливали совершенно кроме самого докера
    - мы храним несколько версий нашего приложения на всякий случай и можем быстро откатиться не прибегая к гиту вообще
    - сервер не знает ничего о гитах
    - на сервере нет НИКАКОЙ дополнительной логики по разворачиванию вашего приложения
    - имея все это очень легко добавлять другие сервера для деплоя - что нам нужно - грубо говоря указать другой айпи и набор env variables к нему ( если они конечно отличаются)
    giphy.gif
    Ответ написан
    5 комментариев
  • Решается ли вопрос поддержки актуальности данных в вебе?

    @Stqs
    senior software developer
    Проблема эта видится более глубокой чем кажется. И она не решается. Так ли это?

    сейчас придет какой-нить хардкорный функциональщик и расскажет вам шо почем Ж)
    и про состояния
    и про немутабельные данные
    и тд
    Ответ написан
    Комментировать
  • У Вас бывает такое что, Вы разрабатываете сайт, а человек придумывает все новые и новые правки?

    @Stqs
    senior software developer
    никогда не работайте на fixed-price
    почасовка - единственный честный и относительно безболезненный способ работы
    потому что и вы и заказчик за достаточно дешево могут через день-два оборвать контракт если что-то откровенно идет не так.
    тогда и вы получили за потраченное время компенсацию и заказчик сэкономил деньги и что важнее время, а не ждал неделю-две-месяц что б узнать что ничего не готово.
    во время работы что-то может изменить или остановиться или пойти в другом направлении. это не новость. в этом случае почасовка опять же играет на руку обоим сторонам.
    изменился скоуп и слезли дедлайны - при почасовке это нормально.
    дальше, по окончании проекта - любые доработки так же будут стоить заказчику почасовый рейт и это будет охлаждать его пыл, либо - вы будете дальше честно получать свою почасовую пайку.
    в общем все счастливы.

    а fixed-price это прям рассадник нервов, кидалова со обоих сторон, недопонимания, психов и разочарования
    Ответ написан
    7 комментариев
  • Как вывести id?

    @Stqs
    senior software developer
    Комментировать
  • Как организовать интеграционные тесты в микросервисном приложении?

    @Stqs
    senior software developer
    1) Ну можно поднимать Vagrant'ом виртуалку и туда все деплоить каким-нибудь ansible'ом
    прогонять тесты и после этого удалять виртуалку
    тут есть 2 преимущества: весь процесс деплоя описан в ансибл скриптах и он будет рабочим так как будет испльзоваться постоянно, и второй плюс - не нужно ничего откатывать, просто vagrant destroy.
    с докером все тоже самое можно организовать
    если по богатому - то виртуалки можно не локально запускать а где-то в клауде ( меньше геморроя будет, вагрант не нужен и тд)

    2) я бы хранил в отдельной репе
    потому что как показывает практика все равно под каждый более-менее большой проект все равно в итоге пилится свой собственный мини-фреймворк на селениуме(в вашем случае вебдрайвер). И я не говорю что это плохо.
    Как результат - интеграционные тесты живут отдельно от остального проекта своей собственной жизнью
    там зачастую задействованы девелоперы которые не касаются основного приложения в принципе никогда.

    3) на каждый пул-реквест я бы такие тесты не гонял потому что как показывает практика опять же - они довольно тяжеловесные получаются и занимают прилично времени
    есть же стандартные use-case scenarios - раз в день ночной билд, регрессия перед релизом, прогнать разок перед тем как собрались мержить фичу в мастер

    вообще тут очень все субъективно
    зависит от того как настроенны процессы у вас в кампании, как часто вы деплоите, насколько большое требуется покрытие и тд и тп
    Ответ написан
    Комментировать
  • Пользуетесь ли вы шпаргалками?

    @Stqs
    senior software developer
    ничего страшного

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

    для всего остального есть доки, спецификации, книги, инет, гугл итд

    на нормальном собеседовании все равно будут смотреть насколько у вас "спинной мозг" прокачан а не сколько аргументов команды ps вы сможете по памяти вспомнить

    нужно еще понимать о каком уровне программиста мы говорим
    если это джун - то как бы "а чего вы ждали?"
    ежели человек является счастливым обладателем титула principal automation qa engineer и при этом жалуется на то что "IDEA не хочет запускать xml файл" - это будет выглядеть, согласитесь, странно
    так что это все очень субъективно
    Ответ написан
    Комментировать
  • Где взять список?

    @Stqs
    senior software developer
    если вам нужно "как на ***.*ru" то наверное более правильно будет распарсить сам ****.ru
    Ответ написан
    Комментировать
  • Как понять откуда появляется майнер?

    @Stqs
    senior software developer
    Виталий Р,

    1)я бы попытался обновить ось если конечно это допустимо
    2)отключаем ssh по паролю вообще
    оставляем только по ключам
    меняем дефолтный порт с 22 на какой-то другой
    3)делаем ревизии имеющегося барахла ( конечно нас интересует те части системы которые хоть как-то выглядывают наружу) - нужно иметь список подозреваемых. то есть грубо говоря netstat'ом смотрим список открытых портов
    маппим их в процессы
    смотрим что это за процессы и выясняем насколько это ПО устаревшее и дырявое

    дальше идем по списку тулзов/фремворков которые мы отревизили и пытаемся по базам уязвимостей найти чтото интересное для нашей версии продукта
    если там действительно жопа и уязвимостей уже куча - то деваться некуда придется обновлять ПО

    ответ конечно не исчерпывающий потому как оно все очень depends
    но я так понимаю вы вообще в растерянности и не знаете с чего начать
    так что первое правило - нужно узнать по-максимуму все о своей системе и нужно олицетворить зло (то есть узнать с каким конкретно ПО мы имеем дело на данном конкретном сервере)
    дальше проще пойдет

    если время позволяет - разобраться бы от какого пользователя все это барахло запущено
    может быстро получиться порубать права кому-то и опять же получить максимально быстро какой-то результат
    Ответ написан
    6 комментариев
  • Где было бы корректно обрабатывать данные, на стороне БД или ЯП?

    @Stqs
    senior software developer
    nobodywithbody,

    я бы делал всю логику в коде и начал бы со следующих шагов

    В базу:
    - берем выборку самых тормозных запросов
    далее EXPLAIN в руки и выясняем где что тупит)
    - делаем индексы (с умом) если нужно
    - делаем вьюшки (если нужно) в базе что б не работать с совсем сырыми данными
    - даты на стороне базы не конвертируем - это тоже очень медленно будет

    В коде:
    - профайлер в руки и профилировать, профилировать, профилировать
    - используем методы динамического программирования (у вас задача практически классическая)
    - если все равно тормозит как вариант наколбасить что-нить типа сишной либы для этой конкретной задачи и дергать ее из хпх
    Ответ написан
  • Как отпарсить чужой сайт?

    @Stqs
    senior software developer
    ну если знаете питон то вот это покатит https://scrapy.org/
    Ответ написан
    Комментировать