• В каких случаях надо использовать kubernetes, а в каких mesos, docker swarm?

    Singaporian
    @Singaporian
    Docker Swarm проиграл конкуренцию и использовать его нет смысла.
    Mesos - когда нужно соединять ресурсы, а не строгать микросервсы (обратная задача)
    Kubernetes - на очень крупных проектах
    Nomad - на маленьких и средних проектах.
    Ответ написан
    Комментировать
  • Как подключиться к registry?

    Singaporian
    @Singaporian
    Пожалуйста поправьте ошибку в заголовке. Я минуты три тупил, пока догадался, что ударение не на букву "ю". Это жутко злит.

    По теме:
    У Kubernetes нет никакого registry. Может вы имели ввиду какой-нибудь GKE, EKS или OpenShift?
    Ответ написан
    Комментировать
  • Где искать инвестора на проект, что бы у меня не украли идею?

    Singaporian
    @Singaporian
    Слово "идея" - маркетинговый буллшит в мире стартапов. Нет у вас никакой идеи и ни у кого ее не было. Давайте разберемся с тем, что такое стартап и вы поймете, как и где защищать идею.
    Стартап - это проект (не обязательно новая компания, есть и стартапы в рамках крупных корпораций), который прокладывает новую бизнес-модель, которая раньше не существовала.
    Например, вы можете построить ресторан. И до вас стопицот других людей это сделали. То есть, основываясь на их опыте, вы можете просчитать риски и примерные доходы, рост. В стартапе вы первые (или параллельно с вами есть еще те, кто не закончил решение проблемы или не донес его до всех). Статистики для вас нет. Взлетит? Не взлетит? Никто не знает. Просчитывается очень мало, даже при соблюдении всех технологий и этапов роста.

    Теперь к идее: нет такого понятия. Вы можете сделать восхитительную штуку. Никто ее не купит, потому что ничего не заставит его сделать несколько лишних телодвижений, чтобы это получить. Потому что у клиента ничего не болит. Потому что это будет игрушка на день, как программа Google Earth или типа того.

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

    Поэтому, прежде, чем начинать тратить деньги, стартапер сначала проверяет есть ли такая проблема и нужно ли такое решение (этап Customer Development).

    А теперь скажите, что у вас там воровать, если добрая сотня человек сегодня бьется над решением этой проблемы?

    Вот давайте посмотрим. Не говорите свою идею. Скажите только какую проблему нужно решить. И мы вместе посмотрим, не решена ли она уже. Потому что именно это и будут смотреть инвесторы.
    Ответ написан
    Комментировать
  • Как построить конвейер сайтов на Ruby On Rails? Подходит ли RoR вообще?

    Singaporian
    @Singaporian
    Так, давайте отделим мух от котлет.

    Задач я тут вижу две:
    1. Какую платформу использовать
    2. Как деплоить

    Причем вторая зависит от первой, поэтому решать надо в той же последовательности.

    Итак,
    1: Выборов три:
    1. a. Server lease (когда вы просто арендуете конкретный выделенный или виртуальный сервер у провайдера)
    2. b. IaaS (например, AWS EC2) - то же самое, что "1.a", но можно мгновенно создавать и удалять
    3. c. PaaS (например, AWS BeansTalk, OpenShift, CloudFoundry) - когда вы вообще абстрагированы от понятия "сервер" и оперируете понятиями "ресурс".

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

    2: Пришло время деплоить.
    Если у вас PaaS, то вопрос деплоя хорошо покрыт в их инструкциях - и у каждого по своему.
    Если у вас сервер, то лучше деплоить докером (а точнее docker compose). Делается это следующим образом. Сначала разбиваете свой сервис на максимально атомарные микро-сервисы.
    Например, у вас получились: само приложение (RoR + sidekiq), PostgreSQL, Redis.
    Соответственно, вы делаете три контейнера. Все три контейнера вы описываете в в файле docker-compose.yml
    Но тут есть одно но. В то время, как PostgreSQL и Redis вы можете взять стандартные - и эти контейнеры уже готовы, то свой RoR вам нужно каждый раз доделывать. Ведь в нем могли измениться зависимости или что-то еще. Поэтому в docker-compose.yml вы один из контейнеров описываете со словом "build ." - это значит, что docker compose не будет пытаться его стягивать из интернета, а найдет файл Dockerfile и, согласно ему, построит имедж самостоятельно. А уже в этом имедже будет что-то типа:

    # Please keep same version as in Gemfile (https://hub.docker.com/r/library/ruby/)
    FROM ruby:2.3.4
    
    ENV RACK_ENV development
    
    COPY . /usr/share/website
    
    WORKDIR /usr/share/website
    RUN bundle install
    
    CMD ["/usr/share/website/run_rails.sh", "/usr/share/website"]


    В файле run_rails.sh будет что-то типа:
    #!/bin/bash
    
    cd $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
    export RACK_ENV=development
    export SECRET_KEY_BASE=266a11dc19acc67107064dfddcecb4187545a08b35bd9a847c7b53545be22dbd8d115036024fcfc659f5936ba4a5df9a7d2a937797fv9d7v9fv7v97e9f430ff
    
    bundle install
    
    bundle exec rake db:migrate db:seed
    bundle exec rake assets:precompile
    
    find /usr/local/bundle -name guard
    bundle exec foreman start --procfile Procfile.dev --port 8080


    А сам docker-compose.yml будет похож на:
    version: '3'
    
    services:
        pg:
            image: postgres:9.6
            environment:
                - PGDATA=/var/lib/postgresql/data
                - POSTGRES_DB=project_db_dev
                - POSTGRES_USER=project_user
                - POSTGRES_PASSWORD=project_password
            volumes:
                - ${PG_DATA_DIR}:/var/lib/postgresql
            ports:
                - 5432:5432
    
        rd:
            image: redis:4.0
            ports:
                - 6379:6379
    
        ws:
            build: .
            volumes:
                - .:/usr/share/website
            ports:
                - 8080:8080
            depends_on:
                - pg
                - rd

    Обратите внимание, что данные PostgreSQL находятся не на самом имедже - иначе их можно потерять при обновлении или удалении сервера.

    Вот и вся ваша проблема.
    Ответ написан
    Комментировать
  • Направление для развития в DevOps администрировании?

    Singaporian
    @Singaporian
    Администрирование - это Ops. DevOps не администрирует.
    Более того, DevOps не привязан к типу операционной системы никак. Часть кода может быть на Линукс, часть на Винде, разработчики на Маках - зоопарк всегда будет роскошный.
    Учитесь понимать принципы работы ОС, а не учите ее. Начать проще с Линукса. Виндоус очень сложен в плане ДевОпса.
    Ответ написан
    Комментировать
  • Использование нелицензированного ПО в организации, кто несёт ответственность?

    Singaporian
    @Singaporian
    Вы ответственны только за установку. То, что поставили до вас - не ваша ответственность. Вам хватит достаточно скромных денег на адвоката, который докажет, что не вы это ставили (это можно увидеть в любой ОС, когда ее поставили: wmic os get installdate)

    Но для вас это шанс перевести все на Линукс и получить хороший опыт. Лучше думайте об этом.
    Ответ написан
    5 комментариев
  • Как правильно настроить пути для Golang в Windows?

    Singaporian
    @Singaporian
    Представьте на секунду, что у вас есть 5 проектов и три из них используют одну и ту же библиотеку, но разных версий. Как вы поставите три библиотеки разных версий в один GOPATH?
    Вот именно поэтому изобрели dependency managment. Самый лучший на сегодня (и это не IMHO!) - gb. Он поставит зависимости в директорию vendor конкретного проекта.
    Ответ написан
    Комментировать
  • Своя панель управления веб-сервером как реализовать связь с файлами системы?

    Singaporian
    @Singaporian
    Есть три варианта, как это сделать:
    1. Создать данные нового виртхоста в нейтральном месте (SQL, MQ, key-val storage или временный файл).
    По крону или через судо-скрипт запустить импорт этих данных в файл + последующее удаление, если импорт был успешен.

    2. При установке панели сделать postinstall скрипт, который создает директорию, принадлежающую www-data в /etc/nginx/virtualhosts/ - тогда рут не понадобится.

    3. Не держать виртхоты в этом месте вообще. А держать их в SQL или LDAP.
    Последнее вообще является, пожалуй, самым элегантным путем, потому что позволит дальше перейти на Zero-configuration подход (будет у вас масштабирование красивое, по уму).
    Ответ написан
  • Перезагружется хост Proxmox, как найти причину?

    Singaporian
    @Singaporian
    При выключенном Cron проблема повторяется? В других логах еще есть что-то?
    Я бы посоветовал вам отсылать dmesg по сети, чтобы увидеть. что было "при жизни" за секунду до падения.
    Ответ написан
    Комментировать
  • Книги по программированию в Linux?

    Singaporian
    @Singaporian
    Из вопроса не понятен ваш бэкграунд. От него надо отткаливаться.
    Но в общем и целом я бы посоветовал вам разбить задачу на два шага. Сначала научиться админить Линукс на уверенном уровне (если плотно заниматься, то уйдет не более месяца). А потом уже начать программировать.
    Ответ написан
    Комментировать
  • Как собрать установочный пакет на Linux для Linux?

    Singaporian
    @Singaporian
    Смотрите, если нужна прям полная автоматизация, что PIP не самый удобный вариант. Вам придется перейти на пакеты, стандартные для операционной системы (.deb, .rpm, ...).
    В таком случае даже сами пакеты Python лучше всего переделать в стандартные пакеты. Сделать это очень легко:
    pip install stdeb
    (пример для пакета django-haystack)
    /usr/local/bin/pypi-install django-haystack --release=2.6.1 --verbose=5 --keep

    А дальше уже просто зависимости ставите в debian/control (или какой там файл у других ОС).

    Но я бы начал на вашем месте с внимательного прочтения этой статьи о dh-virtualenv
    Ответ написан
    Комментировать
  • Как увеличить лимиты открытых файлов(сокетов) для go программы?

    Singaporian
    @Singaporian
    Но это же костыльное решение. Сколько можно увеличивать лимиты? Не правильнее ли разобраться, откуда столько открытых дескрипторов одновременно?
    Ответ написан
  • Почему phpstorm при подключение по SFTP выдает ошибку?

    Singaporian
    @Singaporian
    Вас сервер отпиннул по какой-то причине. Точная ошибка должна быть на стороне сервера. Ищите в районе файла /var/log/auth.log
    Ответ написан
    Комментировать
  • Просветите по современным сервисам сбора и мониторинга логов, что выбрать с пользой и без ущерба карману?

    Singaporian
    @Singaporian
    Половину из списка можно сразу выкинуть. Например Kibana занимается визуализацией логов, а не сбором. В ELK стэке для этого служит Logstash. А Blackfire - инструмент для перфоманс-тестирования + метрики.

    Дальше нужно определиться, где вы хотите разместить сервис. Если в облаке, то New Relic, Loggly и Logentries остаются в списке (если ваш сервис на AWS, то добавляется CloudWatch), но из него уходят LogStash и GrayLog2. Но если хотите держать сервис у себя, ваш дальнейший выбор только между LogStash и GrayLog2.
    В первом случае у вас продолжение поисков -- на следующем этапе уже встает вопрос цены продукта.

    =====
    "Так же интересно чтобы можно было собирать логи ошибок nginx/mysql/postgres, не требовало особых плясок с бубном"

    Все три сервиса написаны на C-lang. Это значит, что, в отличии от Java, они не будут выкидывать ужасные стэктрейсы на 100500 строк, а всегда будут укладываться в 1024 символа. Именно этот предел есть у стандартного syslog. Поэтому пусть они и дальше пишут в syslog, а уже в нем вы настроете куда редиректить логи дальше. Таким образом вам не надо будет при смене сервиса сбора логов бегать по всем нджинкасам и постгрессам и менять настройки - достаточно будет поменять в одном месте, в syslog.
    Но! Если будет Java приложение, то такое не пройдет и вам потребуется что-то типа GELF, чтобы успешно доставить полный размер exception.
    Ответ написан
    Комментировать
  • Правильный подход к установке программ в Linux?

    Singaporian
    @Singaporian
    Всему свой уровень. Если ваше приложение требует очень качественного и сложного апгрейда, даунгрейда, удаления и хэндлинга непредвиденных ситуаций - тут без вариантов пакеты .rpm, .deb и так далее.
    Но в данном случае речь идет о рабочем окружении для себя, где OS-specific пакеты будут оверинженирингом. В домашних условиях самое удобное будет так:
    Vagrant разворачивает новую машину
    Vagrant запускает Ansible
    Ansible все настраивает. Что он делает - сами по месту поймете. Он может и Docker развернуть и Git-репо стянуть и как угодно вообще приложение установить.
    Ответ написан
    Комментировать
  • Как разграничить понятия DevOps и Continuous Integration?

    Singaporian
    @Singaporian
    DevOps действительно более широкое понятие.
    Оно включает в себя:
    1. Управление жизненным циклом кода (Continuous Integration, Continuous Testing, Continuous Deployment, Continuous Delivery)
    2. Поиск/исправление узких мест в работе и взаимодействии архитекторов/разработчиков/тестировщиков/сисадминов.
    3. Разработка релизной политики: как и по какой причине брэнчуются (очень зависит от типа VCS), как сливаются брэнчи, как именуются брэнчи, как имена брэнчей используются в CI/CD.
    4. Отслеживание/"выплата" технического долга (на практике эту задачу берет на себя тимлид либо, что чаще, вообще никто).

    Может кто еще что дополнит.
    ___
    2* - здесь много менеджерских вещей. Например разрабу нужны логи. Он тревожит сисадмина, тот заставляет ждать, потом "выгружает" контекст своей задачи из головы, качает и пересылает логи, затем оба тратят время на прокрастинацию в процессе вхождения обратно в контексты своих задач = 20 мин.
    DevOps = прийти и поставить им сервис самообслуживания. В данном случае сервис сбора логов, доступный для разработчика. Разработчик моментально смотрит лог = 1 мин. Сисадмин не в курсе и продолжает работать над своей задачей.
    Ответ написан
    Комментировать