• Пару вопросов по использованию докера в продакшене?

    Griboks
    @Griboks
    Использовать докер в продакшене - нормальное решение?

    Да, но есть один нюанс... Судя по вашему вопросу, вы его точно не учли.

    Не упустил ли я какие-то важные команды, которые не используются при разработке, но нужны перед сборкой продакшена?

    Выкидываете build и git, создаёте docker registry, предварительно собираете образы (без гита, только полезные файлы в slim образе), пушите их в реестр, на проде прописываете нужные образы нужных версий. Поднимаете через compose + устанавливаете restart = unless stopped.

    после чего память на сервере закончилась

    Выкидываете git, делаете docker system prune раз в месяц, ставите в настройках демона ротацию логов.

    Автоматический бекап базы данных - ответственность самого сервиса (в коде делать дамп), докера (использовать какой-то image для бекапов) или сервера (непосредственно на сервере настроить крон)?

    Docker image не используется для бэкапов, потому что он не может изменять свои файлы. Файлы изменяются в контейнерах, volume или маунтах.
    Поэтому бэкап - это задача сервера. Только бэкапить надо не рядом с базой, а на другой сервер.

    Как не терять данные из бд при перезапусках контейнера?

    Контейнер не теряет файлы при перезапуске. Скорее всего, вы его тупо удаляете, а затем пересоздаёте.

    Но тк приложение работает в докере, я не могу выполнить nano app.logs для просмотра логов.

    Писать логи в другое место/ docker attach / docker cp / экспорт логов и метрик в сервис мониторинга.

    p.s.
    Вот вам линтер для обучения.
    Ответ написан
    Комментировать
  • Пару вопросов по использованию докера в продакшене?

    @vitaly_il1
    DevOps Consulting
    "Использовать докер в продакшене - нормальное решение?" - да, но есть несколько НО, если это действительно продакшен: нужно почитать любой "учебник" (статьи, youtube, ...) по Докер - как работать с логами, данными (если хотим запускать базу в докер), автоматически перезапускать, как докер использует диск и т.п.

    И, разумеется, независимо от того, как запускаем базу - потренироваться в бэкапе и восстановлении, и настроить ав томатический бэкап.
    Ответ написан
    Комментировать
  • Пару вопросов по использованию докера в продакшене?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Использовать докер в продакшене - нормальное решение?

    Нормальное.
    3. У меня был сервер на 50 гигов

    Докер хранит все слои, образы и логи, периодически, необходимо чистить не используемые образы docker system prune.
    4. Автоматический бекап базы данных

    Я бы cron использовал для этого.
    5. Как не терять данные из бд при перезапусках контейнера?

    Не использовал, но слышал много хорошего про Docker volumes.
    6. Node.js приложение само пишет нужные мне логи и кладет в корень проекта.

    Docker volumes.
    Ответ написан
    Комментировать
  • Почему проект, собранный через vite не позволяет открыть сборку локлаьно через index.html?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Почему?
    Потому что в классическом виде это один js файл подключённый через script, а в виде модулей - это множество файлов которые дополнительно грузятся внутри script. Ограничения безопасности браузеров по разному работают в данных ситуациях.

    Что делать?
    Не открывать современные приложения локально. Просто забудь о такой возможности. Установи глобально какой-нить alive-server и запуская через него. Если надо это распространять - прилагай микросервер в комплекте или смотри в сторону всяких виндовых однофайловых вариантов\pdf.
    Ответ написан
    3 комментария
  • Кастомная страница при краше реакт приложения?

    @abberati
    frontend-разработчик
    Для этого существуют Error boundaries
    Ответ написан
    Комментировать
  • Почему принято писать пробелы вместо табов?

    bingo347
    @bingo347
    Crazy on performance...
    Заходишь ты такой на удаленный сервак, по быстрому код или конфиг поправить, открываешь vim, который никто конечно там не настраивал, и радуешься чуду сохранившему файл с табами вместо пробелов...
    qsb96gmeipstteh5wmjk7u_nxl8.png
    Думаешь, ну может хоть nano настроили... но и он с настройками по умолчанию...
    fkqekzsjqotfscd_auronmlwu-0.png

    А на счет eslint, так в нормальных командах конфиг под себя пишут, а не берут разное готовую х.. (от гугла, air bnb и тд), явно не для читабельности сделанную, особенно с отступами в 2 пробела, которые вообще не различимы с 13" ноута с QHD... зато при callback-hell позволяют позже горизонтальным скроллом воспользоваться... И ведь callback-hell у них явно присутствует, так как eslint имеет встроенные правила для его контроля, но в готовых конфигах они поголовно отключены...
    Ответ написан
    5 комментариев
  • Почему принято писать пробелы вместо табов?

    DevMan
    @DevMan
    4 пробела – везде и всегда равны 4 пробелам, а размер таб'а плавает.
    при неумелом обращении, особенно при командной разработке, это может привести к неожиданному виду кода.

    дело личных привычек/предпочтений и/или договоренности.
    в умелых руках проблемы "space vs tab" вообще не существует.
    Ответ написан
    Комментировать
  • Как использовать useStore, useSelector, useDispatch hook?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. useDispatch - получение функции store.dispatch в компоненте. Раньше для вызова action функциональный компонент приходилось оборачивать в вызов connect:
    const Foo = ({ dispatch }) => {
      const handler = useCallback(() => {
        dispatch(action());
      }, []);
    
      return (
        <Bar onClick={handler} />
      );
    };
    
    export default connect()(Foo);


    Сейчас:
    const Foo = () => {
      const dispatch = useDispatch();
    
      const handler = useCallback(() => {
        dispatch(action());
      }, []);
    
      return (
        <Bar onClick={handler} />
      );
    };
    
    export default Foo;


    2. useSelector - маппинг значения из store.
    Раньше:
    const Foo = ({ value }) => {
      return (
        <Bar value={value} />
      );
    };
    
    const mapStateToProps = state => ({
      value: state.value,
    });
    
    export default connect(mapStateToProps)(Foo);


    const Foo = () => {
      const value = useSelector(state => state.value);
    
      return (
        <Bar value={value} />
      );
    };
    
    export default Foo;


    3. useStore - получение store целиком:
    const valueSelector = state => state.value;
    
    const Foo = () => {
      const { dispatch, getState, subscribe } = useStore();
      const value = valueSelector(getState());
      
      useEffect(() => subscribe(console.log), []);
    
      const handler = useCallback(() => {
        dispatch(action());
      }, []);
    
      return (
        <Bar onClick={handler} value={value} />
      );
    };
    
    export default Foo;

    Вряд ли useStore вам, действительно, понадобится на практике.
    Ответ написан
    Комментировать
  • Флуд контроль на сессиях php - нормально ли?

    @galaxy
    Хацкеры блин задолбали флудить http запросами

    Можно поподробнее, что за хацкеры и чем они вас задолбали?

    Ежели это боты, которые шлют вам непонятные HTTP запросы, то сессии не помогут. Сессии делаются через куки, а ботам плевать на куки в большинстве своем.
    fail2ban лучше настройте.
    Ответ написан
    Комментировать
  • Как избавиться от спагетти кода в react приложении?

    vovaspace
    @vovaspace
    Frontend Engineer
    1. Разделите actions.js на отдельные файлы;
    2. Вынесете логику работы с бэком в отдельные файлы типа api.js;
    3. Вынесите асинхронные экшны в отдельные файлы типа thunks.js (если у вас redux-thunk, по-хорошему асинхронные экшны должны через него проходить);
    4. Используйте библиотеки-хелперы типа @reduxjs/toolkit.
    Ответ написан
    Комментировать
  • Обновить структуры таблиц mysql?

    Fernus
    @Fernus
    Техник - Механик :)
    Оба варианта имеют место быть...

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

    Второй вариант - если "простой" сервиса нежелателен...

    Я бы выбирал всегда первый вариант по возможности...ибо, если на этом сервисе "сидят" полтора человека...то не страшно, если обождут ситуацию... :)

    Ну и при втором варианте надо конечно не прокосячить с написанием скрипта...+ БЕКАП старой версии на всякий случай...да и при первом варианте БЕКАП...
    Ответ написан
    2 комментария
  • Можно как-нибудь оптимизировать цикл?

    maddog670
    @maddog670
    $arr = array("hello" => "world", "how" => "are", "you" => "dude");
    echo str_replace(["&", "?"], '', http_build_query($arr));
    Ответ написан
    3 комментария
  • На какие показатели смотреть при выборе ноутбука?

    @antonwx
    4600h ГОРАЗДО быстрее 3550h, это ощутимо скажется на вашем типе работы. И объём оперативки тоже ощутимо скажется. Да к тому же скорее всего 8 гиговая модель содержит оперативку в одноканале. в общем тот, что с 4600 - ваш выбор. Это оправданная доплата.
    К тому же, судя по отзывам, оперативку потом в этот ноут не докинуть. Что опять же говорит в пользу 16 гигового варианта.
    Ответ написан
    2 комментария
  • Ryzen 5 3500U 16 гб оперативки или Ryzen 5 4500U 8 гб?

    vasilyevmn
    @vasilyevmn
    DevOps
    4500U прилично лучше, больше ядер, лучше частоты и архитектура:
    https://technical.city/ru/cpu/Ryzen-5-4500U-protiv...

    Если память не распаяна, то можно докупить 8 и добавить потом.
    Конкретно в вашем кейсе 8 гигов памяти вам, конечно, в притык хватит.
    Ответ написан
    3 комментария
  • Настройка сервера приложения?

    ivinnic
    @ivinnic
    Full-Stack - подустал
    1. Какой сервер лучше выбрать для подобного приложения? Apache или Nginx?

    Nginx производительней и быстрее.

    2. Пользователей будет много, соответственно запросов тоже. Кто-то может захочет специально завалить сервер одинаковыми запросами, а кто-то может просто случайно нажмет одну кнопку дважды. Стоит ли вводить флуд-контроль на запросы?


    Можете настроить CloudFlare. За счет кеширования статических файлов, очень сильно снижает нагрузку на ваш сервер, и дает некоторую защиту от ddos. + там есть режим Under Attack. дает бесплатный ssl сертификат.
    И да, это все есть в бесплатном пакете .

    3. На локалке я использую phpmyadmin - очень удобно и практично. Можно ли установить его в продакшне? И как лучше защитить от посторонних пользователей?

    Как разработчик, отказался от phpmyadmin. Использую DataBase в PhpStorm, заметил, что это на много удобнее и быстрее.
    Можно немного защитить, поставив на не стандартный адрес , и если нету какого-то cookie то показывать 404

    4. Свои прошлые проекты я заливал на обычный шаред-хостинг по ftp. Как поступать в этом случае? Безопасно ли ставить пакет с ftp на vps?


    если у вас ssh, то можно по ssh заливать. sftp.
    Ответ написан
    1 комментарий
  • Как обрабатывать повторные запросы?

    pavel_ataykin
    @pavel_ataykin
    Верстаю и программирую всякое.
    Привет! Тебе нужно это разруливать на клиенте(в браузере). Для таких вещей придумали функцию debounce, вот её тебе нужно найти и использовать :)

    P.S. Чёт я усложнил вроде, можешь просто добавить класс "sending" и при клике проверять есть ли этот класс. После выполнения запроса его удалять
    Ответ написан
    7 комментариев
  • Подойдет ли shared хостинг под задачу?

    @Kostik_1993
    Web Developer
    В целом шаред хостинг подходит, но подучиться использовать и настраивать VPS стоит на будущее. Советую отличный хостинг на котором размещаются крупные проекты, отличные цены - ссылка в профиле
    Ответ написан
    2 комментария
  • Подойдет ли shared хостинг под задачу?

    solotony
    @solotony
    покоряю пик Балмера
    подойдет.

    vds нужен только когда вам надо запускать какое-то нестандартное серверное ПО.
    Ответ написан
    Комментировать
  • Верные ли утверждения по схеме?

    @pfg21
    ex-турист
    1. при всех диодах каждая лампочка будет получать полволны и работать в полсилы = в сумме по мощности будут работать как одна лампочка.
    в последовательном подключении двух лампочек без диодов ток через них будет I = U/2R. суммарная мощность двух последовательных лампочек P = I^2*2R = (U/2R)^2 * 2R = U^2 / 2R = (U^2/R) /2 = P1лампочки / 2.
    при включенных диодах мощность больше.
    2. Симистор (симметричный триодный тиристор) - пропускает ток в обе стороны == выпрямлять не может.
    иэх балин времени нет молодость вспомнить.
    Ответ написан
    1 комментарий