Задать вопрос
  • Как настроить безопасность своего VPS (и нужно ли), если ты - тупой?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    //COPY01 EXEC PGM=IEBGENER
    1) Стоит ли вообще переживать по поводу этого?

    Нет Тупые боты тупо сканят наличие веба, другие тупые боты будут искать на нем уязвимости (которых у тебя конепчно же нет :) у тебя же ни cms ни базы )

    3) Если все-таки переживать стоит - какие простые базовые вещи вы бы посоветовали?

    ssh - c ограниченного набора ip, остальное в сад
    без ограничений пропускать только на сайт, все остальные соединения - только с ограниченного набора IP, всех остальных в сад.
    Ответ написан
    Комментировать
  • С чего начать изучать системное администрирование?

    @SunTechnik
    Очень трудно чему либо учиться, если это не применяется на практике. И даже если было что-то изучено, скорее всего, без применения оно быстро забудется.

    Поэтому изучайте вещи, которые Вам требуются, либо сейчас, либо в ближайшем будущем. То, что может повысить эффективность вашей работы.
    Ответ написан
    1 комментарий
  • С чего начать изучать системное администрирование?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    Настрой что-нибудь.

    Поставь на линуксе веб сервер. Прикрути к нему php и mysql, поставь wordpress, убедись что все работает. Вот уже что-то есть. Сделай бэкап всего, поломай и восстанови из бэкапа.

    Подними мониторинг, который будет что-нибудь мониторить, свободное место, нагрузку на CPU.

    Настрой уведомления от твоего мониторинга на почту или в телеграм.

    Ну вот уже для начала что-то будет.
    Потом можно будет почитать как єто все делается другими инструментами. Или все тоже самое но в докере.
    Ответ написан
    Комментировать
  • Как настроить безопасность своего VPS (и нужно ли), если ты - тупой?

    @Drno
    да всегда будет ворох обращений.. это ж вебсервер
    а так - fail2ban поставить и забить

    только возникает вопрос как nginx может слушать localhost, если он у Вас доступен публично?))
    Ответ написан
    3 комментария
  • Как TGstat получает целые пригласительные ссылки Telegram?

    @alekssamos
    Программист любитель
    Я где-то читал, что TGStat работает от юзерботов (обычные человеческиие аккаунты через номер телефона)
    А, вот здесь, в Телеметре
    https://help.telemetr.me/drugie-instrumenty-analit...
    Обратите внимание: на время проверки бот может добавлять дополнительных пользователей в администраторы канала с минимальными правами (и после окончания проверки - убирать его). Это техническая необходимость для получения нужной информации.
    Обработка запроса может занять от 5 минут до 2 часов в зависимости от размера канала (больше подписчиков - дольше).


    Попробуйте через тот же Pyrogram, но зайдите с номером телефона, вместо токена бота.
    Ответ написан
    Комментировать
  • Какое минимальное количество RAM нужно для своего впн сервера?

    @Drno
    достаточно. зависит от количества коннектов, от ОС и от настройки
    Ответ написан
    Комментировать
  • Как реализовать веб-сервер и VLESS на одном VPS?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    а) Вариант 1 - использовать xray на веб портах и fallback на сайт.
    Вариант 2 - использовать веб сервер на веб портах и проксирование к xray например через websockets.
    Вариант 3 - использовать haproxy\nginx upstream proxy для проксирования сайта и xray по SNI.
    б) Веб сервер должен работать по 80 и 443 портам. Вне зависимости от количества виртуальных хостов.
    xray может работать на любом порту.
    Ответ написан
    1 комментарий
  • Что такое уровни абстракции в книге 'Чистый код' Мартина?

    @res2001
    Developer, ex-admin
    А мне это вообще не очевидно, ведь тут подразумевается, что в методе несколько уровней абстракции

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

    Для данного примера очевидно, что "более одной операции" - это расчет выплат для разных типов сотрудников.
    А раз разные типы, то значит в этом методе, по мнению автора, не хватает абстракций для типов сотрудников.
    Об этом же говорит и способ решения проблемы, предлагаемый автором в следующем листинге - он предлагает применить полиморфизм, т.е. создать иерархию классов по типам сотрудников, которые будут наследоваться от абстрактного класса Employee и сделать "абстрактную фабрику", которая будет создавать объект нужного класса сотрудника в зависимости от переданного типа сотрудника. Тогда каждый дочерний класс сотрудника будет переопределять свой метод calculatePay только для своего типа. Вышестоящий код благодаря полиморфизму получит правильный расчет выплат для данного сотрудника без switch.
    Точнее в решении switch остается, но на уровне абстрактной фабрики, когда делается выбор какой объект сотрудника надо создавать. И это единственное место, где будет такой switch. Если же не использовать полиморфизм, то потенциально может существовать множество мест, где понадобится использовать switch по типам сотрудников.
    Ответ написан
    Комментировать
  • Откуда брать наборы данных для наполнения базы?

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

    + есть много разных провайдеров данных, чтобы не скраппить.
    Для игр: IGDB, Rawg
    Для фильмов, сериалов, телешоу: imdb
    Для аниме и манги: шикимори, myanimelist, mangadex
    Музыка: deezer, soundcloud, lastfm, openwhyd, spotify

    + некоторые сервисы могут не иметь прям api чтобы получить весь каталог, но зато может быть api, чтобы пользователь мог поделиться своими списками того, что ему понравилось (так точно умеет шикимори, myanimelist, spotify)
    Ответ написан
    Комментировать
  • Откуда брать наборы данных для наполнения базы?

    @Giperoglif
    сделать автокомплит из бд с автоматическим добавлением в неё отсутствующего значения. по типу как теги на пикабу, напмример. для начала пойдет.
    Ответ написан
    Комментировать
  • Как хранить настройки сайта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Два базовых правила:
    1. Всё, что передаётся пользователю, он может увидеть.
    Если не хотите, чтобы пользователь что-то видел, просто не передавайте это на фронт. Отправляйте только то, что пользователю можно видеть.
    2. Всё, что приходит от пользователя требует проверки.
    Если вы не хотите, чтобы пользователь мог прислать на бэк недостоверные данные, просто не принимайте их без проверки.
    В обоих случаях, чтобы знать, что конкретному пользователю можно видеть и что он может прислать требуется аутентификация/авторизация как минимум для пользователей с повышенными правами.
    Ответ написан
  • Какой ИБП подойдет для raspberry pi (5)?

    Вариант раз:
    Обычный бесперебойник как для любой другой техники с инвертором до 220в и обычный блок питания в розетку.

    Вариант два:
    Также бесперебойник, но подключаться не через инвертор, а сразу к 12вольт через dc-dc преобразователь.

    В случае домашнего сервера это будет самый надёжный вариант.

    Очевидный вариант с повербанком откидываем, тк они не рассчитаны на такие сценарии:
    1. Может тупо не хватить тока
    2. Перегрев из-за длительной высокой нагрузки (ибо рассчитаны максимум на пару часов на полной мощности, чтобы зарядить телефон)
    3. Быстрый износ аккумулятора из-за того что мало какие повербанки предполагают постоянное нахождение на розетке с постоянным питанием устройства.
    4. Некоторые повербанки тупо не умеют одновременно заряжаться и питать другое устройство
    5. Они могут периодически отключать питание внешнего устройства

    Подробнее о разных кейсах можно на форуме почитать (есть ссылки на другие треды и разные решения)
    https://forums.raspberrypi.com/viewtopic.php?t=361748
    Ответ написан
    Комментировать
  • Как сохранить ноутбук зимой?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Имеет ли смысл отогревать ноутбук перед использованием

    Имеет.
    (в конденсат я не верю)

    конденсат - это не религия, а физика.

    ресурс аккумулятора кончился полностью

    Хотя результат тот же, но не "ресурс кончился", а ты убил банки раньше срока.

    Я ношу ноутбук в простом рюкзаке, после пары долгих прогулок

    Использовать ноут в качестве груза при прогулках? Хммм странный выбор.
    spoiler
    Иначе непонятно зачем гулять с компом. Его нужно максимально быстро переместить из одного места в другое


    Ах, да..
    Как сохранить ноутбук зимой?

    Не таскать по морозу. Не давать охлаждаться ниже 15С на продолжительное время.
    При необходимости переноски - сократить время и использовать термосумку/пакет.
    spoiler
    Можно положить рядом пластиковую бутылку с гор.водой.
    Ответ написан
  • Как вернуться из модуля обратно в main?

    Vindicar
    @Vindicar
    RTFM!
    Фигню творишь. Отношения между модулями должны быть строго односторонними - один модуль предоставляет сервис, другой его использует. В этом случае просто не будет необходимости в циклическом импорте.

    Если же у тебя более сложная ситуация, придётся выкручиваться. Например: main описывает бота, который используется модулем, который уже предоставляет сервис через этого бота. Тут ситуация усложняется телеботом, который не особенно пригоден для многомодульных ботов. Хотя есть приём, который можно сравнить с внедрением зависимостей.

    module1.py
    # бота передаём как параметр внутрь функции install_module
    # если у тебя будут другие глобальные ресурсы, скажем, соединение с СУБД, можно передавать их также
    def install_module(bot) -> None:  
        # да, мы описываем функцию прямо внутри другой функции. Так можно
        @bot.message_handler(commands=['some_command', ])
        def my_command(message):
            ...  # тут логика команды
    
        # и ещё одну...
        @bot.message_handler(commands=['other_command', ])
        def my_other_command(message):
            ...  # тут логика команды

    Тогда в main.py будет что-то вроде
    import telebot
    bot=telebot.TeleBot('TOKEN')
    # импортируем и активируем модуль
    import module1
    module1.install_module(bot)  # install_module() модуля должна вызываться строго однажды
    # модулей может быть несколько
    import module2
    module2.install_module(bot)
    # когда всё установлено, запускаем бота
    bot.infinity_polling()

    Идею можно развить таким образом: пусть твои модули лежат не рядом с main.py, а в подпапке modules. Тогда можно сделать что-то такое, чтобы автоматически подгрузить все модули из этой папки при старте бота.
    from pathlib import Path
    import sys
    import importlib
    
    import telebot
    
    bot=telebot.TeleBot('TOKEN')
    
    MAIN_DIR = Path(sys.argv[0]).parent.resolve()  # папка где лежит скрипт бота
    MODULES_DIR = MAIN_DIR / 'modules'  # лежащая рядом папка modules
    for item in MODULES_DIR.glob('*'):   # перебираем файлы и папки в папке modules
        # игнорируем папки и файлы, начинающиеся с _ или с .
        if item.name.startswith('_') or item.name.startswith('.'):
            continue
        # item - это имя пригодного для импорта модуля?
        if (item.isfile() and item.name.endswith('.py')) or (item.isdir() and (item / '__init__.py').isfile()):
            # да импортируем и активируем модуль
            module = importlib.import_module('modules.'+item.name)
            module.install_module(bot)
    
    # когда всё установлено, запускаем бота
    bot.infinity_polling()
    Ответ написан
    2 комментария
  • Postgres минимальная установка где взять?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Но установка Postgres очень большая...

    PostgreSQL занимает около 185 Mb на диске, не требует установки и в стандартной конфигурации ему требуется для работы всего 128 Mb оперативной памяти, а в минимальной вовсе 8 Mb. Это одна из самых малотребовательных к ресурсам СУБД. Если надо ещё меньше и ваш скрипт будет работать в единственном экземпляре, можно посмотреть в сторону файловых СУБД, например SQLite.
    Ответ написан
    4 комментария
  • Как проверить наличие поля в JSON файле с помощью python?

    @Everything_is_bad
    Ну так сначала проверяй наличие поля, а потом только доставай, а не наоборот, хотя метод get позволяет это совместить. И зачем ты еще к str приводишь?
    Ответ написан
    Комментировать
  • Как поставить второй системой linux, на другой диск?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Самый оптимальный вариант - отключить все диски и оставить только тот, на который надо её поставить, а на самом диске удалить все разделы. И далее ставить новую ОС. После установки уже можно подключить все остальные диски и в биосе выставить загрузку с нужного диска. Если хочется иметь удобное загрузочное меню без биоса: лучшим вариантом будет отдельный загрузчик, раньше я юзал Acronis OS Selector и каждую ОС ставил со своим загрузчиком - т.е., диски с ОС самодостаточны и не зависят от других. Не знаю как он сейчас, но вроде его засунули в Acronis Disk Director. И еще один удобный вариант: после установки ОС надо в её загрузчик вручную добавить записи о других ОС и в загрузчиках других ОС тоже самое сделать. Таким образом будет возможность выбора с какого диска грузиться и в БИОСе/бут меню, и в загрузчике, а так же будет страховка на случай поломки ОС/загрузчика. А так же можно будет безболезненно удалить целиком любую ОСь и оставить нужную и она даже будет продолжать работать. В любом случае, надо ставить ОС так, чтобы её загрузка не зависла от других ОС и дисков.

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


    А еще есть MBR, GPT, активные/пассивные разделы, составные диски и разделы, софтовые и железные RAID, BIOS, UEFI, NVME, SATA, SAS, USB, CD, сетевая загрузка (а тут еще Ethernet, WiFi, DHCP, PXE в линукс и винде), дисковые контроллеры, сетевые хранилища, плюс дикая фантазия разработчиков материнских плат и контроллеров и их прошивок. И вот это все может быть перемешано в разных вариациях с разными дикими фантазиями и еще более безумными результатами. Что точно гарантирует безразмерную кучу незабываемых ощущений в процессе. Так что очень, очень-очень рекомендую всегда ставить на один ПК все операционные системы независимо друг от друга со своими родными загрузчиками - лучше путь будет цепочка загрузчиков и запас, чем их не будет, когда одна из осей или дисков отправятся в электронный рай.
    Ответ написан
    Комментировать
  • Как определить что страница открыта в браузере Telegram?

    Noizefan
    @Noizefan
    WebView внутри приложения все равно сильно урезан от полной версии браузера
    задача проста:
    1) выявить расхождения
    2) определять их на стороне клиента
    https://abrahamjuliot.github.io/creepjs/
    вот тебе пачка расхождений
    Ответ написан
    Комментировать
  • Почтовое приложение android со встроенной синхронизацией?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Thunderbird ака K-9 Mail и ещё несколько аналогичных

    Так же можно найти что-нибудь на русторе
    Ответ написан
  • Не могу играть в некоторые игры по роутеру(МТС провайдер) на всех устройствах, а через мобильный интернет могу. Почему так?

    @ElxkoT
    Все в таких вопросах всё время сразу кричат про "ркн, сво, косяк провайдера" и забывают о том, что в любых проблем есть вполне конкретная причина. Если адрес серый, то белый адрес, через который вы фактически выходите в интернет, запросто может использоваться на весь дом, квартал или даже район. При таких вводных есть очень хорошая вероятность, что кто-то из ваших соседей в этих проблемных играх вёл себя не по-джентльменски и получил за это бан по IP, утащив за собой и всех своих соседей. Такое бывает довольно часто. Для теста попробуйте позвонить в техподдержку провайдера, объяснить ситуацию и попросить выдать вам новый адрес с другим NAT. Если такой возможности нет, можете для теста подключить себе белый IP, либо вырросить его временно, аргументируя тем, что иначе вынуждены будете поменять провайдера.
    Ответ написан
    Комментировать