• Как понять, почему падает PHP-FPM?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Можно для каждого сайта сделать свой pool. Тогда сразу будет понятно кто виновник.
    Ответ написан
    3 комментария
  • Как понять, почему падает PHP-FPM?

    idmrty
    @idmrty
    Попробуйте для начала добавить pm.max_requests = 2000
    Ответ написан
    5 комментариев
  • Как заменить пробелы на табы?

    werty1001
    @werty1001
    undefined
    View -> Indentation -> Convert Indentation to Tabs
    Ответ написан
    1 комментарий
  • Как сконфигурировать бэк и фронт через api?

    liaFcipE
    @liaFcipE
    Причем тут VDS, зачем вам вообще нода? Чистый Vue это больше о SPA. Вы о SPA или SSR/G?

    Если вы хотите классический SPA, то вам (не) нужна нода, она нужна для сборки и локальной разработки, но на выходе у вас статика (html, js, css и еще какой-то набор ассетов аля картинки, шрифты и так далее).

    Что там делает API и как он живет - фронту не важно и его не касается, ему не важно какой там стек, фронту важно одно - адрес, где бекенд живет и чтобы бекенд отдавал ответы на запросы в нужном фронту формате.

    Поэтому что вам конфигурировать? Что вы хотите?
    Ну в общих чертах вам нужен:

    nginx, который:
    - Отдает статику на 80/443 с вашим index.html и набором ассетов.
    - Дает доступ к API проксипасом на условный путь /api юзая php-fpm линком с другого контейнера.

    Как вы это упакуете на уровне докера - хз, делайте как удобно. Только понимайте, что фронт для локальной разработки нужно запускать в dev режиме, через nodejs, (HMR там и все такое) а для пре\прода - собирать в статику.

    Поэтому, я бы вообще локально фронт не запускал в докере, а работал прямо на машине, в докере держал бы только всю инфру бекенда.

    Да и как вы хотите хранить проекты? Монореп или все таки разные репы? Если разные - можете вообще сделать для каждого проекта сборку в docker имаджы и сторить их где-то в Gitlab Registry или аналогах с независимым деплоем фронта и бека. кароче вариантов масса. Выбирайте по возможностям и средствам. Возможно вам проще нанять прошаренного девопса.
    Ответ написан
    Комментировать
  • Как настроить Docker Desktop на Windows и WSL2 таким образом, чтобы в volume на хост машине владельцем файлов был текущий пользователь?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Вы почему-то считаете, что директория, монтируемая как volume - это часть хоста. А изнутри контейнера это не так однозначно. Если объекты создаются изнутри, то, разумеется, их владельцем будет тот пользователь, который этим занимается внутри контейнера. Настройте umask на доступ всех подряд или поиграйтесь с группами.
    Ответ написан
    Комментировать
  • Стоит ли использовать Docker в продакшене для нескольких сайтов на одной VPS?

    При общих ресурсах что-то может расходовать больше ресурсов, чем остальные, а при "докеризации" будет много копий одного и того же софта стека LEMP.
    Так что из соображений экономии ресурсов скорее всего, общий ресурс будет более экономным вариантом.
    Сложность состоит в том как настроить стек так, чтобы он мог обрабатывать каждый сайт наиболее равноправно и без скоса производительности для всех сайтов.

    Однако, если есть другие факторы, такие как квотирование, (мнимая) безопасность, портативность, тогда Docker может рассматриваться как решение.
    Ответ написан
    Комментировать
  • Стоит ли использовать Docker в продакшене для нескольких сайтов на одной VPS?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Ориентироваться на Docker Desktop не надо.

    Делать отдельную СУБД для каждого сайта, конечно же, тоже не надо (и вообще пихать её в докер - но это дискуссионно).

    Да, под РНР придётся отдать кратно больше памяти, чем под единый php-fpm пул (но вы же не делаете один пул для нескольких сайтов на продакшене, правда?).

    Ну а nginx по сравнению с остальными товарищами потребляет копейки.
    Ответ написан
    8 комментариев
  • Как запустить несколько Docker-контейнеров с MySQL на одном порту и на одном хосте?

    @WebMonet
    Как решить вашу проблему?

    Дано - хост 1.2.3.4
    К нему привязаны домены foo.com, bar.com, baz.org. За каждым доменом закреплен сайт, который состоит из PHP, Nginx, MySQL (далее по вкусу). Назовем каждый сайт приложением. С помощью docker-compose можно запустить примерно вот такой конфиг

    version: "3.6"
    networks:
        app_network:
            name: foo_net
    
    services:
    
        nginx: 
            ports:
                -   target: 80
                    published: ${APP_PORT}
                    protocol: tcp
                    mode: host
            volumes:
                - ./:/var/www/html
            networks:
                - app_network      
    
        php:
            build:
             ...
            volumes:
                - ./:/var/www/html
            networks:
                - app_network
    
        db_server: 
            ports:
                -   target: 3306
                    published: '${APP_DB_PORT}'
            volumes:
                - ../mysql:/var/lib/mysql
            networks:
                - app_network
    
        node:
            depends_on:
                - php
            volumes:
                - ./:/var/www/html:rw
            command: npm install && npm run dev
            networks:
                - app_network


    Прикол в том, что все контейнеры одного приложения видят друг-друга в пределах одной виртуальной сети (app_network) даже без EXPOSE. EXPOSE связывает целевой порт контейнера с портом хоста (1.2.3.4) Без него nginx прекрасно видит PHP-FPM по порту 9000 (только имя контейнера должно быть правильным. В данном примере это будет php:9000)
    ....
    location ~* \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass<b> php:9000;</b>
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
    ...


    , PHP видит mysql по дефолтному порту 3306. Возникает вопрос, зачем же мы прокинули на хост какой-то ${APP_DB_PORT} от db_server. ответ прост - по этому порту можно подключиться напрямую к БД из своей любимой IDE, phpMyAdmin и.д. Соответственно, внешний порт БД для foo.com может быть 33061, для bar.com 33062 а для baz.org - 33063.
    Такая же история и с NGINX, который выступает у нас фронтендом приложений. Мы слушаем на хосте ${APP_PORT} и прокидываем из него все в 80 порт соответствующего контейнера. Получается, что по порту 1080 нам ответит foo.com, 1180 - bar.com, а 1280 - baz.org. В итоге, у нас уже на одном хосте крутятся 3 приложения / сайта, которые не мешают друг-другу (и даже не подозревают о существовании друг-друга)
    Остается самая малость - выпустить их в интернет. Тут все совсем просто: поднимаете nginx/haproxy/etc и говорите им, что для хостнейма foo.com используй апстрим 127.0.0.1:1080, для bar.com 127.0.0.1:1180 и угадайте сами, что для baz.org. Внимательно отнеситесь к слешам на конце апстрима. Документация вам расскажет, когда они нужны, а когда нет.
    Откуда взялись переменные типа ${APP_PORT} ? Их можно задавать в .env файликах, которые будут лежать рядом с docker-compose.yml.

    APP_PORT=1180
    APP_DB_PORT=33062


    В итоге, всех встречает шлюз, в соответствии с именем хоста раскидывает по апстримам, а внутри приложения контейнеры уже сами видят друг-друга.
    Схема 100% рабочая, но не без изъянов. Для продакшена повнимательнее изучите нюансы. За подробностями приходите в личку и на мой курс про докер для PHP-разработчиков.
    Ответ написан
    3 комментария
  • Docker: принято ли ставить на продакшене?

    1. принято. Если кто-то станет шикать на вас за это — это их проблемы, а у нас свободные нравы!
    2. правильно.

    С монтированием – по-разному. Как удобнее. Варианты:
    • в проекте папка /docker под ней в подпапке /docker/nginx – конфиги nginx, которые биндятся в контейнер по одному, или всей подпапкой. Удобно, если захочется по-живому редактить конфиги;
    • в контейнер при его билде, инструкциями в его Dockerfile, копируются файлы из папки;
    • прилетает уже готовый-собранный образ, из которого поднимается рабочий контейнер, не запариваясь расположением конфигов и какими-то настройками.

    Логи направляются в Stdout контейнера и хранятся Docker'ом. Посмотреть хвост: docker logs --tail 50 имя_контейнера
    Ответ написан
    Комментировать
  • Почему phpfpm+nginx в docker работают медленней?

    Afinogen
    @Afinogen Автор вопроса
    PHP разработчик
    docker-php-ext-install opcache решение проблемы. Оказывается по умолчанию его в официальном образе НЕТ! А я думал что он есть, так как глупо собрать php без него. Спасибо чатику DevOps в телеге, помогли.
    Ответ написан
    1 комментарий
  • Кого выбрать: reg.ru. или webnames.ru?

    @lehha
    Все регистраторы одинаково полезны (с)
    А точнее все регистраторы имеют аккредитацию (читай, лицензию) и страховку в 30 000 000 рублей на случай косяков. Официальный список регистраторов:
    https://cctld.ru/domains/reg/

    Выбирайте кто приятен по цене и удобству. Всё остальное без проблем решается сменой регистратора в пару кликов.
    Ответ написан
    3 комментария
  • Как изменить username Бота в телеграмм?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Вы не можете сменить юзернейм боту. Только создать нового.
    Ответ написан
    Комментировать
  • Как получить последний использованный прокси в Guzzle?

    Vamp
    @Vamp
    В guzzle есть другой способ передачи заданий - через promise.
    $requests = function () use ($data, $client) {
        foreach ($data as $item) {
            yield function () use ($client, $item) {
                return $client->sendAsync($item['request'])
                    ->then(function (Response $response) use ($item) {
                        echo $item['proxy'] . ' -> ' . $response->getStatusCode() . PHP_EOL;
                    });
            };
        }
    };
    Ответ написан
    1 комментарий
  • Для чего нужны Генераторы (yield) в php?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    php.net/manual/ru/language.generators.syntax.php
    yield - возврат из функции с сохранением текущего итерационного состояния этой функции.
    При запросе следующего значения в цикле итерационном цикле - снова вызов этой функции с использованием сохранённого состояния, т.е. продолжение обработки данных с места возврата внутри этой функции.

    Можно провести некую аналогию с "курсором" и местом обработки данных в позиции курсора.
    Ответ написан
    3 комментария
  • Права на файлы в WSL2?

    bingo347
    @bingo347
    Crazy on performance...
    периодически к файлам на WSL2 нужен доступ из винды, например чтобы отредактировать хосты в Nginx
    чем не угодил nano или vim для этих целей? На край можно поставить на винду X server и запустить любой линуксовый gui редактор в wsl с переменной DISPLAY
    Если 10 баксов за x410 для Вас дорого, есть бесплатный X server, правда с ним заморочиться придется немного.
    Ну и еще вариант дождаться поддержки WSLg или поставить инсайдерскую сборку или бету Win11, где оно уже есть.
    Но для большинства задач вида отредактировать конфиг - nano более чем достаточно, а если с vim разберетесь, то редактировать что-то блокнотом точно уже не захочется

    P.S. VSCode с плагином remote WSL умеет работать из винды внутри WSL
    Ответ написан
    1 комментарий
  • Не вредно ли охлаждать ноутбук аккумулятором холода (хладоэлементом)?

    @AndrewKazanin
    Fullstack Dev
    Когда температура в комнате достигла +30, MacBook ушел в жесткий freeze. Например, нажимаешь cmd+s, что бы сохранить проект и сохранение начинается через 15 секунд и потом минуту компилируется проект. Для сравнения при +25 все это длится секунды 3.
    Вообщем пришлось костылить, потому что работать не возможно.
    На фото 2 крышки от контейнеров, на них скапливается конденсат, его не много, ничего ни куда не стекает.
    Так стал работать просто как пуля, даже быстрее чем обычно.
    У меня 2 Webstorm открыто и 1 DataGrip, кулеры иногда включаются.
    60d585b0d1c5d430978581.jpeg
    Ответ написан
    2 комментария
  • Не вредно ли охлаждать ноутбук аккумулятором холода (хладоэлементом)?

    vabka
    @vabka
    Токсичный шарпист
    Вопрос: не вредно ли это для ноута? Не будет ли образовываться внутри конденсат?

    Потенциально может, если внутренняя часть ноутбука достигнет температуры образования конденсата, а через металл это проще простого.
    Да и в таком виде это тоже не безопасно, тк жидкость может попасть через вентиляционные отверстия.
    Ответ написан
    1 комментарий
  • 307 Internal Redirect - как отключить в nginx?

    fzfx
    @fzfx
    18,5 дм
    да, дело в HSTS. вам нужно почистить кэш HSTS-записей в браузере, с которого заходите на сайт: https://www.thesslstore.com/blog/clear-hsts-settin...
    Ответ написан
    Комментировать
  • Можно ли в Mac OS отключить перевод дерикторий в домашней папке на русский язык?

    DevMan
    @DevMan
    По идее достаточно удалить файл .localized из этих директорий. Сам не проверял.
    https://discussions.apple.com/thread/252040

    Удалите файл из одной директории, рестартаните Finder (через killall) и проверьте.
    Ответ написан
    1 комментарий
  • Какой Macbook Pro лучше взять сейчас?

    lamer350
    @lamer350
    กำลังสูงสุด
    Но ведь новизна это же не плохо?
    В 16" макбуке проц 9го поколения, быстрый SSD, хорошее охлаждение по сравнению с другими макбуками. Наконец то GPU тянет все что угодно, хочешь поиграть - играй, не хочешь - не играй. Раньше было только хочешь поиграть - страдай) Но лично мне нравится что лаунчпад не лагает на нем)))
    Старые макбуки 15" - проблемная клавиатура и флексгейт на более ранних версиях, радости мало...
    Ответ написан
    1 комментарий