• Как правильно готовить docker?

    yucom
    @yucom
    Ruby on Rails Developer
    Можно посмотреть пример настройки докер-контейнеров здесь https://github.com/weazar/dora
    А как это дело деплоить с помощью ansible здесь https://github.com/weazar/andora
    Ответ написан
    Комментировать
  • Готовые сборки шаблонов для быстрого старта?

    mQm
    @mQm
    https://medium.com/@gearmobile
    Таких сборок много.

    Как пример можно привести - TARS.
    Мое личное мнение, что TARS по многим показателям лучше упомянутой вами.

    На данный момент я изучаю Vue.js и вот узнал, что под Vue.js также есть готовые системы для быстрого старта, и даже не одна, а на выбор - Webpack или Browserify.
    Ответ написан
    Комментировать
  • Какую литературу можно найти по golang?

    Ответ написан
    Комментировать
  • Docker. Как контролировать код, базу данных и выпуск в production?

    UnknownHero
    @UnknownHero Автор вопроса
    Добавлю ответ на свой же вопрос.

    Прошло достаточно времени и я успел посмотреть и попробовать множество инструментов связанных с Docker.

    Создал 2 приложения , первый этой сам сайт для которого хотел сделать инфраструктуру , второй это инструменты администрирования, тестирования и деплоя.

    Приложение для администрирование развёрнуто на 1-м сервере, на нём есть Docker Registry , Jenkins и ещё пару веб страниц с разной информацией. Всё это обернул в Nginx , работает здорово. Само приложение тоже использует Docker , но обновлять его нужно руками (ssh and etc).

    Сайт ( который на самом деле состоит из бизнес логики , DAL , Postgresql , Rest API , web-frontend , web-backend и ещё пару уровней абстракции :) ) использует содержит около 10 Dockerfile.

    Внутри приложения использую инструменты сборки (grunt для nodejs) и собираю приложение во время сборки образа (docker build) , либо после запуска контейнера для продолжительной разработки с помощью FIG.

    После правки кода, заливаю всё в git репозиторий, Jenkins собирает образы (docker build) и отправляет в Docker Registry, после чего сообщает серверам (сейчас он 1), что нужно обновить образы (docker pull) , и перезапустить контейнеры. Там где нужно сохранить данные , использую data containers , их я не перезапуска и не трогая.
    Со временем хочу сохранять состояние data containers (docker commit) и заливать их на Docker registry (docker push) для бэкапа некоторых данных.

    Сервер собирает и перезапускает обновлённые контейнеры с помощью самописных bash скриптов (они не сложные ), т.к. родные для Docker инструменты для этих целей ещё в стадии разработки (Docker swarm , Docker machine , Docker compose) , а стороние решения скорее всего умрут после выхода этих инструментов.

    Через Environment variables говорю контейнеру в каком он режими работает (local/test/live), но нужно это только для минификаций и уровня логгирования. В этих настройках - чем меньше различия,тем лучше.

    Всё это загнал в vagrant , отлично работает ,но требует хорошое железо для разработки.

    В планах:
    - научиться тегировать образы, что бы можно было откатить все сервера до рабочего состояния в случае багов.
    - добавить процесс автоматического тестирования и оценки качества в Jenkins (для docker приложений нужно поднимать ещё jenkins slave )
    - прикрутить ansible для деплоя и прочих удобностей для администрирования. Связать его с Jenkins

    Итог:
    -Однин раз написал, везде использую.
    - Автоматизация до уровня commit = staging deploy
    - Разделение административных инструментов и сервисов от бизнес приложения.
    - Независимые компоненты ,которые можно легко заменить, слабая связаность.
    ну и минусы:
    - одному тяжело уследить за таким зоопарком )) Был бы администратор/DevOps , было бы зачительно быстрее всё.
    Ответ написан
    1 комментарий
  • Как правильно делать deploy с помощью docker registry?

    Tyranron
    @Tyranron
    Официальную документацию надо все же читать, проявив усидчивость. Тогда не будет путаницы в базовых понятиях, из-за которой возникает каша в голове.

    Давайте разберемся с инструментами и их предназначением, которые Вы используете:
    • Комманда docker - это консольный интерфейс (CLI) для работы с Docker
    • docker build создает по заданному Dockerfile образ контейнера
    • docker tag присваивает указанному образу указанный тег (опция -t для build делает то же самое)
    • docker pull скачивает указанный образ из удаленного регистра на текущую машину
    • docker push заливает указанный образ в удаленный регистр
    • docker run запускает новый контейнер из указанного образа
    • docker ps выводит список текущих "бегущих" контейнеров

    Команда docker не жонглирует файлами, она жонглирует образами и контейнерами, а они от нас абстрагированы Docker'ом, как что-то эфемерное. То есть выполняя комманду docker pull Вы не скачиваете образ в ту папку, где выполняете команду, и уж точно не скачиваете какие-либо файлы. Все что Вы делаете этой командой - это скачиваете образ в локальное хранилище Docker'а, дабы Docker daemon мог запустить контейнер на основании этого образа.

    Команда docker-compose - это уже совсем другая команда. Все что она делает - это читает указанный YAML-манифест и выполняет соответствующие команды Docker. Это всего лишь позволяет декларативно указывать желаемые сценарии при работе с Docker в удобном формате. Но ни команда docker, ни docker-compose, не предоставляют ничего для того, чтобы транспортировать/обновлять версии Ваших манифестов где-то там. Docker, опять таки, жонглирует образами и контейнерами, не более.

    У Вас в манифесте указана директива build:. Таким образом docker-compose пытается сначала собрать контейнер, вместо того, чтобы просто запустить его из образа.

    Касательно совета docker-compose.yml под каждый env, все правильно советовали. Именно так это и задумывалось. Вы в манифесте указываете отнюдь не разные окружения (development, production), а набор контейнеров, которые должны бежать в одной связке одной логической единицей (концепция POD'ов). Ничего не запрещает делать и так, как сделали Вы, но это сродни использованию дуршлага в роли миски для еды: сегодня Вы нормально из него наворачиваете пельмени, а завтра супчик в нем уже куда-то не туда утекает.

    Воркфлоу в Вашем случае можно организовать следующим образом:
    1. На dev-машине у Вас один docker-compose.yml, согласно которому контейнер перед запуском собирается из сорцов.
    2. Когда у Вас готова новая версия приложения, Вы его собираете через docker build, присваиваете ему номер версии через docker tag и отправляете в удаленный регистр образов через docker push.
    3. На prod-машине у Вас отдельный docker-compose.ymlв котором указано запускать конкретную версию образа (и никаких build). Новая версия приложения - меняем тег образа в манифесте и перезапускаем контейнеры. При выполнении docker-compose образ автоматически скачается перед запуском, если его нет локально. Если же Вы обновили образ конкретной версии, которая уже была скачана ранее, то да, нужно выполнить docker pull перед стартом, дабы скачать новый образ.


    Дополнительный совет:
    Сборку образа и его заливку в удаленный регистр часто удобно автоматизировать с помощь Makefile'ов.
    Ответ написан
    3 комментария
  • Как откатить makemigrations в django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Просто удалите файл данной миграции если она еще не применена. Исправьте и выполните makemigrations еще раз.
    По manage.py show migrations можно глянуть примененные и непримененные миграции.
    Указав номер, можно откатиться на предыдущую миграцию
    manage.py migrate <модель> <номер миграции>
    Ответ написан
    Комментировать
  • Какой необходимый уровень знаний для junior React.js Разработчика?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    UPDATE: реальные тестовые задания и разборы здесь, ответы на все вопросы из поста в моем блоге об обучении react.

    не включая основы js

    Извините, но стандартная задача, про "напишите функуцию add, которая при вызове add(1)(2) вернет 3" - многих положила на лопатки =) Поэтому будьте готовы..

    React
    0) Какую проблему решает react ?
    1) Мгновенно ли срабатывает setState? Если нет, то как выполнить код, который 100% выполнится после того, как новый state будет установлен?
    2) Зачем многие постоянно пишут в constructor: this.FUNCTION_NAME = this.FUNCTION_NAME.bind(this) и отсюда вопрос вытекает чему равно this в разных местах вашего компонента...
    3) в каких методах жизненого цикла стоит выполнять xhr запросы? В каких стоит "обновлять state на основе props"?
    4) Что будет если вызвать this.setState в render методе компонента?
    5) зачем нужен componenWIllUnmount, приведите пример..
    6) Контролируемые, не контролируемые компоненты
    7) Как организовать роутинг в реакт приложении? (ответ: взять react-router - подходит, но было бы круто, если бы вы рассказали, как он примерно работает)*
    8) Зачем нужны propTypes? Что происходит с ними в production сборке?
    9) Как можно удобно "отлаживать" чужой код приложения, написанного на react (намек в сторону React devtools)
    ...

    Redux
    0) Какую проблему решает redux?
    1) Зачем многие создают типы действий NAME_REQUEST / NAME_SUCCESS ? А заодно, что такое "действие", а что такое "создатель действия"...
    2) Что такое редьюсер? Можете написать простой редьюсер без react/redux?*
    3) Для чего нужен redux-thunk? Как он работает? Напишите (можно псевдокод) асинхронный создатель действия (либо, если надоело говорить "терминами" - асинхронный aciton)
    4) Как компоненты приложения получают "пропсы" из "стора"?*
    5) Можно ли (и считается ли это нормальным) использовать state, если используется Redux?
    6) Почему в reducer'ax мы возвращаем новые объекты? Приведите пример, когда вы возвращаете новый объект, а когда тот же самый.
    6.5) А так же, "как в js вообще это работает?". Например:
    let obj1 { name: 'Test', age: 100 }
    let obj2 = obj1
    obj2.name = 'Test_new'

    Что будет в obj1, почему? В каких случаях объекты могут быть равны?
    7) Что возвращает функция connect (из react-redux)?
    ...

    Общее:
    0) package.json
    1) Webpack, gulp, etc...
    2) node.js
    3) promise

    Что-нибудь практическое:
    1) Как бы вы валидировали форму, если ошибки валидации приходят после submit'a ее на сервер..
    2) Почему не работает следующий код, сделайте чтобы работало
    ...
    На истину не претендую, но такие вопросы имели место быть на собеседованиях. В беседе можно многое разузнать дополнительными вопросами и так далее. Так же, если часть вопросов вам неизвестна - не беда, многие и на половину ответить не могут.

    p.s. возможно дополню...
    p.p.s. звездочкой отметил, на мой взгляд не самые необходимые для junior-собеседования вопросы.
    Ответ написан
    31 комментарий
  • Как начинать работу над проектом на фрилансе?

    LazyTalent
    @LazyTalent
    Data Engineer, Freelancer
    git init
    touch .gitignore
    virtualenv venv
    source venv/bin/activate
    touch {config,script}.py
    vim
    Ответ написан
    2 комментария
  • Как начинать работу над проектом на фрилансе?

    RuJet
    @RuJet
    1. Обговариваешь ТЗ. Получаешь логины, явка, пароли.
    2. Обговариваешь срок, порядок и канал оплаты. Это тоже важно.
    3. Поднимаешь копию проекта у себя на хостинге/сервере и т.д. Не рекомендую пользоваться всяческими денверами. Например поведение php под liniux может отличаться от его поведения под windows.
    4. Кодишь, кодишь, кодишь.
    5. Показываешь заказчику на своем сервере.
    6. Получаешь оплату.
    7. Переносишь изменения к заказчику. Тут пригодится вышеупомянутый GIT.
    Рекомендации:
    На рабочем месте лучше держать linux. Во-первых как выше написал родная среда для web-приложений, во-вторых проще будет админить на vps и хостингах. А админить или хотя бы диагностировать проблему приходится часто. Особенно на мелких проектах.
    Использовать VCS, например GIT.
    Держать несколько каналов для оплаты. Например банковская карта, Яндекс.деньги, Qiwi и Webmoney.
    Сразу проработать схемы перевода прибыли в доступные для траты денежные средства.
    Не лениться и не бояться.
    Все начинали с мелких проектов, всех хоть раз кидали.
    Во фрилансе учатся на ошибках. Редко получается учиться по готовым руководствам и боже упаси всяким тренингам и видеокурсам.
    Ответ написан
    Комментировать
  • Как начинать работу над проектом на фрилансе?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Юзаю notepad++ и Far (всё настроено в плане подсветки и подсказок)
    2. Формирование краткого перечня работ и стоимости, предоплата от клиента 50%, составление ТЗ (если необходимо), затем уже сама работа по кодингу. (порядок следования очерёдности задач - сохранён)
    3. Делается полный бэкап текущего сайта средствами хостинга.
    4. Если есть возможность разделить логику разработки от действующего функционала (чтобы текущая работа не оказывала влияние на реальных посетителей) - правлю обычно сразу на (S)FTP. Иначе - только на своём хостинге.
    5. Бэкапы - делаю копированием файла/папки с добавлением .ORIG в полное имя файла (например, файл: index.php.ORIG или реже, директория: TEMPLATE.ORIG).
    6. В текстовик (для себя) - пишу всё, что я сделал, чтобы по нему можно было легко восстановить последовательность действий.
    7. Сдаю работу, получаю деньги, делаю полный бэкап сайта после всей работы и отдаю клиенту.

    Теперь, главное:
    1. Никогда не тяните время
    2. Клиент платит не за часы, а за конечную сделанную Вами работу (если это не так - значит не нужно работать с таким клиентом)
    3. Если клиент требует больше работы, чем вы с ним договорились до предоплаты - найдите компромисс, чтобы вариант устроил всех, закройте проект и больше не работайте с этим клиентом.
    Ответ написан
    6 комментариев
  • Чем отличается redis от RabbitMQ?

    RabbitMQ - полноценный сервер очередей, имеющий под капотом "свою" базу данных. Redis - база данных, над которой можно построить сервер очередей. Строить сервер очередей над Redis имеет смысл, имхо, если полноценный сервер не нужен, а Redis уже используется как база данных.
    Ответ написан
    Комментировать
  • Что изучить? Angular 2 или Ember 2?

    titov_andrei
    @titov_andrei
    All my life I learn - and die a fool!
    Как только вы начнёте общаться с живыми заказчиками - то сразу поймёте что и в какой последовательности учить.
    Ответ написан
    Комментировать
  • Выбор фреймворка для нового проекта - Angular? React? Vue?

    dom1n1k
    @dom1n1k
    Лично для меня Vue - это такой "фреймворк с человеческим лицом".
    В целом JS-мир похож на поле боевых действий, где постоянно то налеты авиации, то кононада гремит, то хипстерская конница с новым логотипом на знамёнах проскачет.
    А "обычный" человек сидит в подвале, обхватив голову руками, и думает - мама дорогая, куда я попал, и чё ваще вокруг происходит?
    Какие-то новые паттерны, подходы, языки... Раньше, чтобы начать, достаточно было блокнота и браузера. Пишешь hello world и сразу его видишь. Теперь нужно поставить ноду, овер 9000 пакетов, десять транспиляторов, таск-менеджеров и бандлеров. Пока увидишь рабочий результат - поседеешь.
    И вдруг какая-то добрая душа взяла у хипстоты всё самое лучшее и разумное, что та родила, но очистив от лишних абстракций и усложнений - и выкатила велосипед в виде велосипеда, а не турбо-космолета с инструкцией толщиной как "Капитал". И снова можно писать в блокноте и смотреть в браузере. При этом почти не проигрывая в возможностях.
    Ответ написан
    1 комментарий
  • Где найти туториалы, видеоуроки и прочее по Oscar?

    alexhouse
    @alexhouse
    Full Stack Web Developer Python and Django
    Недавно нашел отличный проект на русском по Django-Oscar https://bitbucket.org/soshnikov/oscar-setup
    Правда автор давно его не обновлял, я сделал форк и иногда добавляю новые комментарии.
    Ответ написан
    Комментировать
  • Как реализуется SPA-приложение, на примере Vue.js?

    @game802 Автор вопроса
    Дали ответ на другом ресурсе, может быть кому пригодится:
    1. Да, на нем пишут как простые штуки таки и полноценные SPA, навигация работает без презагрузки.
    2. Nuxt js это сборка (VueJS + VueRouter и т.д.) которая делает Рендеринг SPA приложения на стороне сервера. Зачем он это делает? - все очень просто. SPA приложения неиндексируются поисковыми ботами из-за своей асинхронности и JS, NuxtJS решает эту проблему, делая рендер на стороне сервера (выполняет все асинхронные действия например запрос к бекенду по REST, и возвращает отрендеренный HTML)
    3. SSR (серверный рендеринг), генерирует ту страницу которую запросил пользователь например: example.ru/item/12, в данном случае SSR спросит у бэкенда Item с id = 12 , и затем сгенерирует и вернет клиенту HTML. В конце HTML документа всегда подключен файл вашего SPA приложения, который исполнится и включит реактивность. Т.е. Получается что первый запрос к сереверу это отрендеренный SSR, а все остальные переходы по приложению это уже SPA
    4. Да, просто ставите NuxtJS и наслаждаетесь разработкой.
    5. Взаимодействует через REST, делая GET|POST запросы на ваш бекенд. Либо через socket. Используйте laravel 5 как бэкенд
    6. Vuex это централизованное хранилище данных. предназначено для того чтобы жёстко отделять данные от view. Все данные хранятся в едином экземпляре, и если происходит set (мутация) для какого-либо значения в хранилище, то во всех местах где был get этого значения, произойдёт обновление.
    Этим обеспечивается реактивность, сайт перестаёт быть просто страницей. Он если хотите "обретает душу"

    Иногда в простых админках я создаю всего один основной action который делает т.н. getAllState, т.е. Берет все состояние относительно пользователя у бекенда. Например берет объекты user, comments, posts. Billing, messages и пишет это в хранилище.
    И когда мне надо обновить данные, я опять вызываю getAllState который обновит хранилище, в это время автоматически вызовется цепочка геттеров/сеттеров и вот тут сработает магия vue. Он сравнит текущий отрендеренный DOM с Новым Virtual DOM. И если где то будут различия он перерендерит этот кусок.

    Очень сложно объяснять это. Надеюсь я смог донести хоть частичку всей концепции.
    Думаю про доки говорить не стоит. Ведь все что сказано выше там написано в более подробной форме)

    Автор: Евгений Рюмин
    Ответ написан
    4 комментария
  • Можно как то получить доступ к переменным в settings.py из jquery?

    @Alexey_Kutepov
    Разработчик программного обеспечения
    Конечно. Делай в views.py сервис который будет вызываться с помощью jquery и возвращай json со значениями нужных переменных из settings.py. Значения переменных вытягивай с помощью python. Как это сделать можно погуглить, например по запросу: django get variable from settings
    Ответ написан
    Комментировать
  • Увели сайт, что делать?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    главный вопрос: с чего Вы взяли, что Ваш заказчик не врет, возможно он просто просит Вас совершить не правомерные действия?
    Делать копию сайта нет смысла, он в поисковой выдачи все равно не окажется там же где и оригинал, без длительной работы по продвижению. Есть смысл делать лучше.
    Ранжируются все сайты, видимо Вы термин плохой подобрали. Вопрос: как будет ранжироваться? Если тексты не уникальны, а они де факто есть на более старом и авторитетном сайте, - с SEO будут проблемы.
    Запретить использовать фото, как и доказать кражу теоретически возможно, но этот вопрос надо задать юристу, а не на тостере.

    Я считаю, что с точки зрения Вашего заказчика, делать копию бессмысленно. Кроме случая, если ему нужна копия, а история со студентом - сказка. Просто люди хотят копию популярного ресурса, что бы заработать на мошенничестве, а Вас сделать крайним. Очень удобно. Для начала я бы посмотрел копии сайта в архивах и подтвердил теорию о том, что когда-то там были контакты Вашего заказчика.
    Ответ написан
    1 комментарий
  • React + Redux vs Angular 2?

    @davidnum95
    Это наверно уже миллиардный похожий вопрос. Если проект серьёзный - выбирайте то что знаете лучше всего. Плюсы почитайте в гугле.
    Мешать php и js не стоит, все общение происходит через rest api.
    Ответ написан
    Комментировать
  • Как правильно хранить результаты отчетов в WEB?

    @rPman
    Моя практика показывает что в конце концов пользователям нужны обе возможности, как повторная генерация отчета (на основе текущих данных, которые пользователь изменил, даже если это изменения 'задним числом', поверьте, в конце концов вам придется такое делать, если это корпоративное приложение), так и загрузка ранее сгенерированного отчета, потому что у пользователя на компе бардак и он не знает куда его сохранил а нужно еще вчера распечатать...

    Поэтому, храните документ на сервере, настоятельно рекомендую хранить в файлах, настоятельно рекомендую имена файлов делать на основе идентификаторов, и раскидывать по подкаталогам (100500 файлов в одном каталоге = плохо), а настоящее имя файла подставлять пользователю во время загрузки (иначе пробелы и нестандартные unicode символы вас и вашего администратора доканают).

    Дайте пользователю возможность сгенирировать новый документ и посмотреть список предыдущих сгенерированных, а администратору возможность удалить документ, в идеале полуавтоматические инструменты по пакетному удалению (например по окончанию отчетного периода чистить все сохранения за этот период кроме последнего), но помните про бакапы.
    Ответ написан
    1 комментарий