Задать вопрос
  • Почему когда используют Docker для поднятия окружения, создают по контейнеру на каждый сервис а не всё в одном контейнере?

    samizdam
    @samizdam
    На примере LAMP
    1. Задел на горизонтальную масштабируемость. Нужно сделать несколько бэкендов, делаете два P. Оркестраторы это поддерживают. В одном контейнере не тривиальная задача.
    2. Распределённость, изолированность. Общаясь только по сети, все сервисы могут быть запущены на разных нодах, в кластере, etc. Опять из коробки же есть разные плюшки для организации сетей. Сюда же отвязка от файловой системы одного хоста.
    3. Один контейнер - один процесс. Докер, как супервизор, либо оркестраторы, берёт на себя часть проблем по перезапуску контейнера. в случае некоторых проблем. Если мухи и смузи в одном стакане (контейнере), самостоятельно придётся решать, к какому из процессов его привязать.

    Первый два комментатора похоже не очень умеют в докер. Или не понимают. Или не пробовали.
    Ответ написан
    2 комментария
  • Локальная разработка и Docker?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. GIT не относится не посредственно окружения для вашего кода, так что его имеет смысл использовать глобальный. А вот всякие composer / php / node / gulp / yarn /... - это часть окружения для выполнения, и их лучше держать прямо в контейнере.

    Ладно там PHP со своими версиями, но эти же обычно обратносовместимы и не трубуют хранения зоопарка версий.

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

    Да и PhpStorm можно один раз настроить указав путь в Git, ноде, File Watchers.

    Это да.

    Ведь с докером мне на каждом проекте все эти минификаторы, композеры указывать заново?

    Да

    Действительно ли оправдано использовать Docker одному или небольшой группой?

    Да. Например хотите посмотреть проект годичной давности, но обратная совместимость зависимостей вашего проекта потеряна, такое сплошь и рядом.

    Возможно, мои проекты не такого уровня, но мне действительно не критично воссоздать dev и prod окружение 1 в 1.

    1 в 1 никто и не создает, а вот максимально похоже по стеку технологий - вот это правильно.

    Ну и пусть там на боевом крутится php 5.6, когда у меня 7.1.

    В таком окружении смысла нема. Ваш код будет работать по другому, на боевом сервере и на вирутальном окружении.

    А если ты разрабатываешь с нуля и не знаешь какая будет конфигурация на боевом?

    Ко боевому можно предъявлять требования.

    Действительно ли деплой так прост, что заменяет все фтп-заливки, jenkins'ы, git-пуллы?

    Нет
    Ответ написан
    Комментировать
  • Что нужно обязательно знать junior php программисту?

    Ashlst
    @Ashlst
    Фанат эстетики и красивых решений.
    - PHP+SQL+БД(Чаще всего MySQL)
    - JS(jQuery)+AJAX+XML+HTML+CSS (хотя бы на базовом уровне)
    - уметь работать с GIT(более популярен),composer (необязательно,но очень упрощает жизнь)
    - Понимать как работают сетевые протоколы (TCP/IP,HTTP,SOAP и т.п.)
    - Разбираться как работает сервер,шарить в конфигах (аpache,nginx) (хотя бы базовый уровень)
    - Гугление (уровень Бога)

    Касательно программирования:
    Нужно понимать ООП-подход, уметь применять паттерны,понимать что такое куча,очередь,стек..как это применить,понимать MVC-архитектуру.
    После этого всего можно изучить какой-то фреймворк.
    Обязательно заведите себе акк на ГитХабе или БитБакете и складываете туда все(!),что пишите.

    По поводу работы в веб-студии(чаще всего джуниоры попадают туда):
    Касается клепания визиток и магазинов: не рекомендовал бы,потому,что достойного опыта Вы там вряд ли наберетесь,а писать ужасный,неподдерживаемый код 100% научитесь.

    Все написанное - мое субъективное мнение.

    UPD: По поводу "хорошо знаю SQL" - уверен,Вам откроется богатый и удивительный мир)))
    Ответ написан
    2 комментария
  • С чего начать изучение php7 новичку?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Дополню вариант от cheevauva

    Тк вряд ли будет ментор у вас, третий вариант точно не выбирайте -- я также через него прошел :)

    • Идите на Ютуб, распаковывайте серию видео "Создание блога на Symfony" или "Создание сайта на Yii2" и поглащайтесь, все что не понятно -- гуглите и задавайте вопросы...
    • Потом ищите "Как ставить nginx + php7 на debian: :)
    • Потом ищите "Хорошие прaктики Symfony", "Хорошие прaктики Yii2"


    Дальше разберетесь
    Ответ написан
    Комментировать
  • Как зашифровать диск с установленной Ubuntu 16.04?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Внимание: данная инструкция актуальна для Ubuntu 17.04 x64 на UEFI системе.
    Внимание №2: если это покажется вам слишком сложным, вы всегда можете переустановить систему, выбрав опцию шифрованной инсталляции в установщике Ubuntu, хотя конфигурация там будет менее "чистой" чем здесь.
    Внимание №3: настоятельно рекомендую сначала поставить аналогичную систему в виртуальной машине и провести все нужные операции там, и только убедившись что всё получилось делать что-то с живой системой.
    Внимание №4: всегда имейте под рукой загрузочную флэшку с Ubuntu на всякий случай, с её помощью можно творить чудеса:)

    У меня всё зашифровано кроме загрузочной флэшки, где grub2, несколько модулей и конфиг что указывает как найти диск что нужно расшифровать.
    Не форматируя можно перенести, имея рядом второй диск, иначе я бы сказал что нет, имея второй диск и файловую систему btrfs можно вообще прямо из рабочей системы всё переносить туда/сюда.

    В общем и целом я делал так (с BTRFS, ибо намного проще, так же предполагается что у вас UEFI, иначе всё ещё сложнее):
    1) sudo cryptsetup -s 512 luksFormat /dev/nvme0n1 - это для nvme SSD, заменяете на свой диск
    2) Открываете криптоконтейнер, создаете файловую систему, дальше либо монтируете и переносите файлы, либо просто добавляете к существующей файловой системе этот новый раздел и удаляете старый (команды не привожу, читайте https://wiki.archlinux.org/index.php/Dm-crypt/Encr..., там много примеров, и https://btrfs.wiki.kernel.org/index.php/Main_Page, там тоже всё с примерами есть)
    3) Правите /etc/crypttab (создаете если нет), мой пример вот:
    system UUID=739967f1-9770-470a-a031-8d8b8bcdb350 none luks,discard,keyscript=/etc/cryptroot/system.64.sh
    и /etc/fstab примерно так:
    proc                /proc     proc  nodev,noexec,nosuid                   0 0
    tmpfs               /tmp      tmpfs defaults                              0 0
    /dev/mapper/system  /         btrfs compress=lzo,noatime,ssd,subvol=/root 0 1
    UUID=E495-1F0C      /boot/efi vfat  defaults,discard                      0 0

    4) Поскольку указать просто файл с ключем для автоматического открытия luks контейнера нельзя ибо он не попадет в образ initramfs и нужно будет вводить пароль дважды (раз в grub для начала загрузки и раз после начала загрузки чтобы разблокировать корневую файловую систему), то нужно писать shell скрипт (/etc/cryptroot/system.64.sh в примере выше), который выведет этот ключ. Для этого генерируем сырые данные для ключа, превращаем данные в base64 чтобы легко было работать с ним в shell скрипте и создаем shell скрипт, потом корректируем права:
    sudo mkdir /etc/cryptroot
    sudo dd bs=1024 count=4 if=/dev/urandom of=/etc/cryptroot/system
    sudo cat /etc/cryptroot/system | base64 | sudo tee /etc/cryptroot/system.64
    echo "echo '" | sudo tee /etc/cryptroot/system.64.sh
    sudo cat /etc/cryptroot/system.64 | sudo tee --append /etc/cryptroot/system.64.sh
    echo "'" | sudo tee --apppend /etc/cryptroot/system.64.sh
    sudo chmod 400 /etc/cryptroot/system
    sudo chmod 400 /etc/cryptroot/system.64
    sudo chmod 500 /etc/cryptroot/system.64.sh

    5) Добавляем этот ключ в слот luks контейнера
    sudo cryptsetup luksAddKey /dev/nvme0n1 /etc/cryptroot/system.64

    6) Помещаем на загрузочную флэшку (gpt таблица, FAT32 раздел с esp флагом) в EFI/ubuntu grubx64.efi, (должен уже там быть), создаем папку x86_64-efi для модулей, ложим туда модули, которые необходимы для открытия luks контейнера (взять их можно в /boot/grub/x86_64-efi):
    cryptodisk.mod
    gcry_sha256.mod
    luks.mod
    procfs.mod

    7) Конфигурируем grub (копирование модулей и ручное конфигурирование является следствием бага https://bugs.launchpad.net/ubuntu/+source/grub2/+b...). Во-первых добавляем GRUB_ENABLE_CRYPTODISK=y в /etc/default/grub (где-то сразу после GRUB_CMDLINE_LINUX), создаем/правим /boot/efi/EFI/ubuntu/grub со следующим содержимым:
    search.fs_uuid E495-1F0C boot
    set prefix=($boot)'/EFI/ubuntu'
    insmod luks
    insmod gcry_sha256
    cryptomount -u 739967f19770470aa0318d8b8bcdb350
    search.fs_uuid 5170aca4-061a-4c6c-ab00-bd7fc8ae6030 root cryptouuid/739967f19770470aa0318d8b8bcdb350 
    set prefix=($root)'/root/boot/grub'
    configfile $prefix/grub.cfg

    Тут E495-1F0C это ваш ESP раздел на флэшке, 739967f19770470aa0318d8b8bcdb350 это ваш криптоконтейнер, а 5170aca4-061a-4c6c-ab00-bd7fc8ae6030 это корневая файловая система. Данный конфиг использует скопированные ранее модули, пытается открыть luks контейнер и взять оттуда основной конфиг grub для отображения меню и последующей загрузки. Я бы посоветовал сделать копию конфига рядом на всякий случай, если Ubuntu решит перезаписать его нерабочей версией сверху.
    8) Делаем chroot в корневую систему из пункта 2) и обновляем grub sudo dpkg-reconfigure grub-efi-amd64 (убедитесь что созданный нами конфиг не был затерт), initramfs sudo update-initramfs -u -k all

    Если я ничего не забыл по ходу написания, то после этого можно будет загрузиться в полностью зашифрованную систему. На флэшке будет несколько файлов суммарным размером в 255КиБ, перед отображением меню grub у вас система спросит пароль от luks контейнера, без которого кроме нескольких не конфиденциальных файлов на флэшке всё полностью зашифровано.

    P.S. Сорян что получился не краткий ответ, а целая статья, просто у меня были особые требования (та же btrfs), а в интернете куча устаревшего материала, вот и пришлось собирать систему, которая нигде из найденных мною мест целиком описана не была, более того, обнаружились некоторые баги в Ubuntu/grub, обход которых я тоже описал в инструкции.
    Ответ написан
    2 комментария
  • Как повысить уровень программирования?

    tiabc
    @tiabc
    Бизнес-партнер и консультант по технологиям
    Хорошие разработчики постоянно развиваются и никогда не стоят на месте. Любое развитие состоит в делании дел, в решении конкретных задач и в обратной связи, которую ты получаешь от других или в результате рефлексии.

    TL;DR: Читайте книжки, делайте дела, читайте чужой код.

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

    1. Изучайте базу. Алгоритмы, сети, криптографию, архитектуру, ос, устройство браузеров, компиляторы и т.д. Изучение подобных вещей дает понимание какие задачи бывают в реальном мире и как "большие дядьки" решают возникающие проблемы. Это кладезь инсайтов.

    2. Устройтесь на фултайм-работу с сильной командой даже если джуниором. Я считаю, что есть только один способ расти как разработчик: работать фултайм над одним бизнес-продуктом. Такой подход учит решать проблемы масштабируемости, думать заранее, работать над процессом, которому вы следуете в разработке, решать задачи, возникающие с длительной эксплуатацией, решать проблемы с удобными окружениями и вообще учиться планировать свою работу в связи с нуждами бизнеса.

    3. Написание кода - не самая большая часть работы сеньор-девелоперов, я бы сказал. Но когда речь заходит о самом коде, нужно понимать что ты пишешь и зачем. Есть классические книжки, которые можно найти, например, в матрице компетентности программиста, есть современные, но полезные типа The Art of Readable Code, которую я очень рекомендую. Нужно читать книжки. На собеседовании я всегда спрашиваю какие книжки читал или читает соискатель и если ответ отрицательный, то это большой минус.

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

    5. Наберитесь терпения. Это не случится за один день. Думайте над именованием, разделяйте обязанности, изучайте алгоритмы и экосистему, оптимизируйте ваше рабочее место, изучайте новые технологии, читайте статьи и в течение ближайших лет регулярных усилий вы обретете новый способ мышления и будете разрабатывать поддерживаемое и надежное ПО. Легкого пути, к сожалению, нет.
    Ответ написан
    2 комментария
  • Можно ли установить Windows на диск зашифрованный при установке Ubuntu 14.04 не потеряв данные?

    @sazhyk
    GhostSt92
    1. Можно всего лишь отрезать кусок, но только средствами самого линукса, и ни в коем случае не акронисами и прочим. А вот поставить винду уже не получится, и вот почему:
    2. А вот ставить винду после линукса крайне геморно. Маздайский загрузчик затрет груб (или что там будет), а потом не стартнется линукс впринципе, так как зашифрован раздел с загрузчиком (если я правильно понял фразу "я полностью зашифровал диск"). Может конечно и есть способы вернуть зашифрованный загрузчик.
    Ответ написан
    Комментировать
  • Как выполненить запрос к sqlite3 из командной строки(bash)?

    BuriK666
    @BuriK666
    Компьютерный псих
    sqlite3 db.sqlite 'select * from test_table'
    или
    echo 'select * from test_table;'| sqlite3 asd.sqlite
    Ответ написан
    Комментировать
  • Почему при переходе на другую страницу, она не загружается до тех пор, пока не будут завершены ajax запросы на текущей странице?

    Это не браузер ждёт ответа, а сервер не отвечает.
    Скрипт к которому ты обращаешься с помощью AJAX блокирует сессию до завершения своей работы.
    Вот решение твоей проблемы.
    konrness.com/php5/how-to-prevent-blocking-php-requests
    epsiloncool.ru/programmirovanie/php/zavisanie-skri...
    Ответ написан
    Комментировать