Задать вопрос
  • Почему появляется ошибка An error occurred в Nginx?

    goodwin74
    @goodwin74 Автор вопроса
    В итоге методом проб и ошибок, обнаружил что после после увеличения worker_connections до 2000 и установкой worker_processes в значение 2, ошибки пропали и до сих пор не появлялись. Решил отписаться, дабы возможно инфа кому то будет нужна в случае аналогичной проблемы.
    Ответ написан
    Комментировать
  • Ansible - может ли он по расписанию ставить на сервер обновления пакетов из git, и перезапускать целевое приложение?

    nightvich
    @nightvich
    ITman
    Вообще правильным вариантом является https://www.ansible.com/tower, но для экономии можно использовать Jenkins.
    Ответ написан
    Комментировать
  • Где в Европе поднять VPN?

    OxDEAD
    @OxDEAD
    HelloWorld Developer. Chief of Voodoo programming.
    https://www.arubacloud.com
    Полгода полет нормальный. Мне хватает впски за 1 евро.
    Ответ написан
    3 комментария
  • Где в Европе поднять VPN?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    405 рублей, Франция.
    Хостюсь здесь полностью.
    ВПН тоже стоит.

    Хостер знакомый, адекватный.
    Можно даже попросить скидку, может даст :)
    Ответ написан
    1 комментарий
  • Ссылка или отдельная копия приложения?

    romy4
    @romy4
    Exception handler
    Обычно это делается не копиями бинарника, а разными конфигами или даже просто тремя запусками одного и того же. Плодить бинарники нет никакого смысла.
    Ответ написан
    Комментировать
  • Ссылка или отдельная копия приложения?

    zolt85
    @zolt85
    Программист
    Я так понял, Вы хотите, чтобы Ваше ОДНО приложение крутилось на ТРЕХ инстансах томката, правильно?
    По поводу установки, советую Вам просто распаковать архив с томкатом в разные папки.
    По поводу кластеризации, томкат предоставляет такую возможность из коробки, читаете доки.
    Вот тут есть пошаговая инструкция организации кластера с балансировкой нагрузки и репликацией сессий.
    Ответ написан
    Комментировать
  • Ссылка или отдельная копия приложения?

    sim3x
    @sim3x
    Ответ написан
    Комментировать
  • Что происходит "под капотом", когда выполняется chmod?

    15432
    @15432
    Системный программист ^_^
    На уровне файловой системы у каждого файла есть свойства - имя, владелец, время создания / изменения, права доступа. Вот права доступа и изменяются. Происходит модификация записи файла в структуре файловой системы ext3 (или какая у вас там)
    Ответ написан
    7 комментариев
  • Возможна ли конвертация сайта в формат .PSD или .AI со слоями?

    Nekto_Habr
    @Nekto_Habr
    Чат дизайнеров: https://t.me/figma_life
    Да как два пальца, чувак.

    Заходишь на сайт, жмешь CTRL+P, выбираешь Adobe PDF, меняешь формат бумаги (тостер, например, при печати в формат А4 печатается в планшетной версии) и открываешь PDF в иллюстраторе. Всё! Вместо текста, правда, будут кракозябры, но форматирование и вёрстка сохранятся, как и иконки.

    85d4065387c5454aa94b26bc22b0590a.png
    Ответ написан
    5 комментариев
  • Как принято конфигурировать окружение для web-приложения на Java?

    zolt85
    @zolt85
    Программист
    Да тут собственно ничего особенного не придумано. Конкретно в maven можно это разрулить профилями. Грубо говоря, профили позволят maven-у намекнуть, какой файл с настройками положить в сборку.
    Ответ написан
    1 комментарий
  • Почему правильно настроенный сетевой интерфейс запускается только после перезагрузки системы?

    edinorog
    @edinorog
    Троллей не кормить!
    Рискну предположить. Дело не в сетевой. Дело в времени ожидании аренды. По какой-то причине оно различается. Либо, если это кабель сетевой или от провайдера, аренда повторно выдаётся только при "отрубании" сетевого коннекта.
    Ответ написан
    2 комментария
  • Где разместить свой блог на it тематику?

    paulradzkov
    @paulradzkov
    Дизайнер, верстальщик, начальник отдела UI
    На https://pages.github.com/ заведите блог.

    Преимущества:
    Бесплатный хостинг, быстрый, стабильный, без рекламы, поддерживает https
    Крутое «прогерское» доменное имя — username.github.io
    Полный контроль над кодом — можно использовать стандартный блоговый шаблон на Jekyll, а можно сделать полностью свой — до последней строчки кода — сайт.
    Ответ написан
    Комментировать
  • Как на CentOS сделать автоматический перенос файлов из одной директории в другую?

    Например, можно написать скрипт для копирования и запускать его в нужное время.
    #!/bin/bash
    
    DIRECTORY=/mnt/yandex.disk/backup
    
    if [ -d "$DIRECTORY" ]; then
        cp /home/backup/архив_с_резервной_копией.tar.gz $DIRECTORY
    fi

    Проверять существование каталога нужно на тот случай, если WebDAV вдруг "отвалится". В качестве else условия можно, например, сделать отправку письма на адрес админа.

    В Cron будет что-то типа:
    0 3 * * * /bin/bash /scripts/copy_backup.sh > /dev/null

    Запускает скрипт каждый день в 3:00.
    Ответ написан
    1 комментарий
  • Как перенести контейнер Docker с одного хоста на другой?

    Insaned
    @Insaned
    Примерно так. Пишу по памяти, не надо это копипастить а надо почитать ман по каждой из команд.
    docker commit validator magnetikonline/html5validator
    docker save magnetikonline/html5validator > /tmp/validator.tar
    scp /tmp/validator.tar usernme@hostanme:/tmp/validator.tar
    ---
    docker load < /tmp/validator.tar
    docker run validator magnetikonline/html5validator
    Ответ написан
    Комментировать
  • Что нужно знать чтобы стать начинающим системным инженером (devops)?

    Singaporian
    @Singaporian
    Статья, которую должен прочитать каждый.

    DevOps - не профессия. Это название культуры доставки кода от разработчика (dev) через тестировщиков и до сисадмина(ops) и обратная связь по этой цепочке.

    Человека, который внедряет DevOps, обычно называют... как хотят. Чаще всего этим занимается какой-нибудь нон-конформист в команде.

    Профессии, которые отрисуются в процессе построения этой методологии следующие:
    • Build Engineer - инженер, который управляет зависимостями, сборками, конфликтами кода.
    • Release Engineer - инженер, который управляет репозиторием кода (кто куда и по каким правилам мерджится и откуда бренчуется). Пожалуй, это самая сложная задача в больших проектах. Особенно с нестрогим Agile или в Waterfall.
    • Automation Engineer - инженер, который занимается автоматизацией рутинных задач. Обычно деплоймент, автотесты, etc. Все эти buzz-слова типа Docker - его инструментарий.
    • Site Reliability Engineer - инженер, который поддерживает ops (апгрейды, расширение железа)
    • Configuration Manager - непонятная мне специальность. Жуткое порождение HR-специалистов, давящих на громкое название позиции. Можно было бы пойти дальше и назвать специальность ZooKeeper Vice President

    В список не вошла самая главная специальность - "психолог". Человек, который должен следить за людьми и вычислять психологически важные аспекты команды, пораждающие боттлнеки производительности.

    Почти всегда все эти роли совмещают один-два человека. Ну это зависит от качества кода.
    Назовем эту компанию BRAE/CM для краткости.
    Задача BRAE/CM состоит в том, чтобы программный код, который выходит из под пера программистов, оставался на контроле программистов и сисадминов одновременно. Программисты, равно как и сисадмины, благодаря DevOps-подходу, имеют возможность и даже обязаны обслуживать код на протяжении всего жизненного цикла от планирования архитектуры до мусорки.
    То есть сисадмины начинают рулить еще до того, как код попадет к ним - на ранних стадиях, а программисты продолжают рулить своими задачами уже после того, как код от них ушел к сисадминам - на поздних стадиях. И все это прозрачно друг для друга и все проблемы и решения ходят туда сюда и не спотыкаются о бюрократия в стиле "ничего не знаю, мы код уже закоммитили, у меня тут свои проблемы, у них сломалось - пусть сами и чинят".

    Так вот эта работа - завершающая стадия системного администратора и начинающая стадия разработчика. Поэтому не бывает Junior BRAE/CM.
    BRAE/CM бывает всегда только Senior в системном администрировании и всегда Junior в программировании.

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

    Сразу оговорюсь по языкам.
    У каждого языка свое предназначение. Java чаще используется в корпоративном секторе. Там много серверов и сложные бизнес-приложения. Поэтому Java-мир очень чувствителен к таким понятиям, как "технинческий долг" и "управление процессом разработки". И именно поэтому именно там все основные вакансии DevOps и именно там будет самый интересный опыт.
    Кроме Java, традиционно сильная DevOps-культура у Ruby. Практически все остальные языки не имеют столь развитой и популярной инфраструктуры в в данном контексте и потому вам скорее всего будут неинтересны.
    Другими словами, если в среде разработчиков выбор языка - тема для холивара и эмоций с миллионами сравнительных анализов с противоположными результатами, то для специалистов по DevOps выбор очевиден и прозрачен. Java - это одновременно самые интересные задачи, самый богатый toolset, самый большой выбор вакансий и самые высокие зарплаты.

    Каждый последующий пункт, кроме особо длинного первого, будет выливаться в неделю-две достаточно плотного труда. Если не прокрастенировать и уделять этому по несколько часов вечером.

    Итак, что делать:
    1) Почитать книги Head First по Java. Пройти курсы Java на EDX.
    2) Освоить SVN. Есть прекрасные тьюториалы. (GIT освоим позже)
    3) Поставить VirtualBox (не VMWare!!!)
    4) Написать простенькое приложение. Код коммитить в SVN. Собирать его при помощи maven.
    5) Поднять на отдельной виртуалке Jenkins. Он должен брать код приложения на SVN и запускать свой локальный maven для сборки.
    6) Написать модульные тесты (unit tests) своего кода. Пусть maven и их прогоняет.
    7) Поднять где-нибудь Nexus. Усложнить задачу maven, чтобы он теперь складывал все в Nexus. Если maven'у потребуются внешние библиотеки, он тоже не сам должен ходить в интернет, а через Nexus (Central repo).
    8) Настроить на своем десктопе vagrant так, чтобы он с нуля создавал виртуалки VirtualBox.
    9) Создать виртуалку DEV через vagrant. При этом ansible должен на ней что-нибудь настроить (например установить JDK)
    10) Научиться деплоить jar/war из Nexus на виртуалку DEV чем-нибудь. Чем - не посоветую, так как сам работаю с очень сложным IBM uDeploy, а это точно не для новичка. Посмотрите в сторону Rundeck или чего-то такого. Может самим Jenkins'ом задеплойте.
    11) Напишите интеграционные АВТОтесты. На чем хотите (как вариант: Selenium).

    Усложняем систему.
    12) Донастраиваем Jenkins: собирает maven-проект; выкладывает на Nexus; дергает vagrant/ansible для создания виртуалки SIT (system integration test); деплоит приложение на SIT; прогоняет автотесты на SIT; удаляет виртуалку после успешного завершения автотестов.
    13) Прикручиваем SonarQube в Jenkins для статического анализа кода. Исправляем косяки своего кода, согласно полученным от SQ рекомендациям.
    14) Прикручиваем мониторинг Sensu.
    15) Пишем нагрузочные тесты на чем-нибудь. В идеале потрогать два инструмента: jMeter и Gatling.
    16) Как и в 12-м шаге прикручиваем в Jenkins автоматизацию создания виртуалки SLT (Stress/Load test) и прогона на ней тестов. Только уже лоад-тестов(обязательно) и стресс-тестов(опционально) соответственно.
    17) Дописываем в свое приложение какой-нибудь функционал, чтобы использовалась база.
    18) Придется познакомиться с LiquiBase. Деплой SQL руками делать запрещено.
    19) Перейти на Docker (то есть теперь приложение выкладывать не напрямую в ОС, а внутрь докера)

    20) Денек на то, чтобы почитать про Agile, Scrum, Waterfall и прочие организационные порядки.

    А теперь немного уходим в управление проектом:
    21) Поставить Atlassian Jira. Разобраться, чем отличаются Epic, Story, Task, Sub-Task. Создать себе подобной этой структуре фронт работ (делать его не придется, просто нафантазируйте).
    22) Поставить Atlassian Stash и связать его с Jira.
    23) Переехать со своего SVN на GIT, предоставленный Stash'ем.
    24) Пройти Git-тьюториал какой-нибудь. Инструмент очень нетривиальный.
    25) Взять любую таску в работу. При этом в начале работы сделать новый Git branch из тикета Jira.
    26) По завершению работы запустить всю построенную ранее цепочку, но уже для своего брэнча.
    Дайте попробую угадать: вам пришлось скопировать все джобы и переписывать в них ветки?
    27) Сделать джобы нормально. Чтобы одни и те же можно было использовать для любых веток - по аналогии с принципом программирования "reuse code". У Вас будет reuse job :)
    28) Сделать pull request, самому сделать code review и самому себя же за-approve'ить. После этого сделать merge своей ветки в master.
    29) Сделать сборку брэнча автоматической по git-hook (или SCM pool)

    30) А теперь высший пилотаж: к чертям Docker, Copistrano и прочую buzz-word-hipsters-галиматью. Теперь вы с этим знакомы и сможете применить, но пришло время выгрызать этот детский сад калёным железом. Теперь вы доставляете код только как .deb-пакеты. Это значит, что вы:
    a) разбиваете control-файл на несколько пакетов, возможно с lib*,
    b) оверрайдите все ~20 dh_ в файле rules так, чтобы все это соответствовало вашим наработкам в предыдущих пунктах.
    c) раскидываете файлы по .install
    d) самое тяжелое: готовите .preinst, .postinst, .prerm, .postrm файлы СОГЛАСНО ИХ ПРИМЕРАМ .ex, сгенерированным dh_make - то есть с разбиемнием на update/configure/broken-install и что там еще есть. Это означает, что при переустановке, при апгрейде, при даунгрейде, при удалении и при пурдже, у вас будут разные сценарии, каждый из которых должен быть проработан досканально. На этом этапе вы также познакомитесь с понятием "регрессионные тесты".

    Ну как бы базовый вариант вот. Но это далеко не весь инструментарий и путь. Это так, для начала.
    Кроме этого неплохо бы познакомиться с Puppet (это не очень подходит для DevOps, скорее для рядовых админов с кучей серверов, но это очень популярный инструмент ввиду того, что никто не понимает, что такое DevOps и вас скорее всего заставят управлять сотней серверов, вместо релиз инжиниринга). А так же нужно познакомиться с операционными системами NixOS (обязательно) и CentOS/Debian (опционально, но я бы палкой бил тех, кто не знает эти OS). Кроме того, надо базово ориентирваться в PostgreSQL.

    Внимание, важный момент, который должен быть вшит на уровень подсознания у DevOps-ориентированного инженера: вы все время пробуете новые инструменты. Вы всегда будете находить что-то очень отличное. Знаете Nexus как свои пять пальцев и он решает почти все проблемы? Отлично! Теперь выкидываете Nexus и ставите Artifactory. Знаете хорошо CentOS? Круто! Теперь пробуете все это проделать на Windows или Debian. Потому что только когда вы сможете сравнивать инструменты, ваша работа будет ювелирной. А DevOps бывает либо ювелирным, либо он не DevOps. Вы должны быть языко-независимым, платформо-независимым и инструменто-независимым.

    Что будет дальше? Дальше вы начнете работать с микросервисами (сотни одинаковых контейнеров в облаке, которые должны как-то работать друг с другом без ручной конфигурации). Тогда познакомитесь со всякими Consul, ZooKepper и кучей инструментов AWS/OpenStack.
    Ответ написан
    13 комментариев
  • Как использовать docker в разработке и деплое web-приложения, хранящегося на bitbucket?

    smanioso
    @smanioso
    Отмечайте ответы на свои вопросы!
    Вытягивать исходники из репозитория без авторизации можно вот этим способом: https://confluence.atlassian.com/display/BITBUCKET...
    Ответ написан
    3 комментария
  • Как безопасно хранить приватный RSA ключ, чтобы использовать его в Java-приложении?

    @codecity
    чтобы этот ключ могло прочитать из java keystore только подписанное приложение (сертификат предварительно загружен в keystore)

    Стандартного решения нет.

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

    PIN-код используйте для расшифровки приватного ключа. После чего не сохраняйте PIN или расшифрованный ключ на диске -- только в памяти. После отключения питания потребуется повторная инициализация.

    Кроме того, нужна будет небольшая аппаратная поддержка: при перемещении терминала должно происходить отключение или перезагрузка. Реазиловать можно с помощью гироскопа или обычного геркона+магнитика.
    Ответ написан
    1 комментарий
  • Как посмотреть количество открытых файлов в системе?

    @custos
    Открытые файлы показывает конечно же lsof, а параметры ядра больше касаются дескрипторов, эти конкретные, означают:
    nr_open - жесткий лимит на открытые дескрипторы, более полезен параметр file-max - мягкий лимит.
    file-nr - показывает выделенные дескрипторы, неиспользуемые и максимум, соответственно. Число выделенных дескрипторов больше, т.к. ядро их выделяет динамически и не освобождает, так что их число постоянно растет.
    Ответ написан
    2 комментария
  • Проблема с настройкой OpenVPN сервера

    @pcdesign
    Попробуйте так:

    iptables -t nat -I POSTROUTING -s 192.168.50.0/24 -j SNAT --to-source XX.XX.XX.XX

    XX.XX.XX.XX — ваш белый айпи сервера.

    И добавьте строку:
    log-append /var/log/openvpn.log

    Чтобы на сервере видеть подробные логи.

    P.S. Ну еще может AppArmor голову морочит.

    P.S2. Ну и опенвпн не забываем запускать в винде от админа.
    Ответ написан