• Наилучший способ централизованно отслеживать атаки на Linux-сервера?

    @cssman
    вам нужен SIEM и к нему подключайте все логи с фаерволов, Ids, спо и т.п.
    Ответ написан
    5 комментариев
  • Решает ли Django Channels проблему с блокирующими запросами?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Десять соединений от клиентов подключены к интерфейсному процессу - серверу Daphne. Запросы, приходящие через эти соединения, передаются в очередь, например Redis. А оттуда уходят воркерам, которые последовательно запускают синхронные обработчики. Если воркеров у вас 5 и одновременно пришло 10 запросов к вьюхе, которой на ответ нужна секунда, то 5 клиентов получат ответ через секунду, а ещё 5 через две. Django Channels - это почти как Django + Celery. Основная разница только в возможности удерживать множество открытых соединений.

    Если нужна полноценная асинхронность, то лучше посмотреть в сторону aiohttp.
    Ответ написан
  • Как правильно администрировать VPS?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ни в коем случае не ставить никаких ISP Manager / Vesta / CPanel, иначе никогда не научитесь тому, чему хотите научиться. Кроме того, они жрут ресурсы. Даже Vesta, которая самая легкая, их жрет прилично, а я сильно сомневаюсь, что у вас VPS c 8+ Gb памяти.

    Изучать надо по урокам и статьям, читая мануалы и best practices по каждому package. Порядок, плюс-минус, таков:

    - развернули ось
    - сделали сразу апдейты
    - создали и настроили swap
    - поменяли пароль рута на что-нибудь супер-мега-сложное (его мы использовать все равно не будем)
    - создали себе обычного юзера с паролем нормальной сложности (он будет использоваться для sudo)
    - дали юзеру права sudo
    - закрутили гайки по SSH - сменили порт, запретили вход руту и вход по паролю (только по ssh-ключам), разрешили вход только одному своему новому логину
    - настроили UFW - простой, но эффективный firewall на основе iptables - default deny, allow http, https, свой кастомный ssh-порт. Если логиниться будете только из нескольких мест (офис, дом) - можно вообще ssh разрешить только на эти IP.
    - sudo dpkg-reconfigure tzdata чтобы установить свою временную зону, так логи потом легче читать и понимать
    - настроили logrotate
    - настроили logwatch
    - настроили Postfix, чтобы сервер вам письма мог слать (мы его настраиваем на внешний мейлер, например Mandrill, чтобы все письма точно в спам не падали)
    - настроили fail2ban (потом, после установки и настройки веб-сервера и сайтов, в fail2ban можно дополнения писать, например мы на WordPress-сайтах мониторим попытки авторизации в админку и блочим тем же fail2ban)
    - дальше ставим все что нужно - Git, Nginx, HHVM, PHP5-FPM, MariaDB, Memcached/Redis и так далее.

    Регулярно заходите на сервер, делайте apt-get update && apt-get dist-upgrade.

    p.s.: это по ubuntu/debian, для других систем все то же самое, но packages и команды могут немного отличаться
    Ответ написан
    26 комментариев
  • Куда можно устроиться junior удаленно с таким стеком технологий?

    PlugIN
    @PlugIN
    A Little Programmer
    Доброго дня!

    Никакой критики, я только поддерживаю вас. И ниже три совета.

    1) Респект вам за решимость постигать программирование и фронтэнд в частности.
    2) Не слушайте тех, кто говорит о критичности работы в офисе для скорейшего проф. развития. Да, это основной вариант, если у человека плохо с самообучением, т.е. он просто не может собраться и сам изучать дисциплины, гуглить, яндексить, задавать вопросы на спец. ресурсах. Это явно не ваш случай. Поэтому, если брать во внимание отсутствие тяги к высокой массовой доли беспредметных разговоров в офисах, и желание оставаться собой, т.е. интровертом, все хорошо. В будущем, если захотите, и коммьюнити найдете и поспорить о технологиях сможете, и даже вещать, будучи каким-нибудь евангелистом ))
    3) Предлагаю такой роадмэп на ваше рассмотрение: у вас сейчас только один лэндинг, поэтому сделайте еще один-два хороших проекта для себя, создайте хороший сайт-портфолио, найдите в своем городе еще пару-тройку заказов на лэндинги/сайты-каталоги. Положите и их в портфолио. Тогда можно будет обновить резюме везде, в том числе и на hh.ru и на МоемКруге, в поле "О себе", кроме указания на высокую мотивированность, хорошо бы, если есть, упомянуть про свои смежные компетенции (дизайн интерфейса, психология, бэкэнд, математика и пр.). Кстати, на том же hh.ru вполне можно найти работу в удаленном формате для Junior. Есть довольно много небольших и неизбалованных контор, на которых "продвинутые ребята" не обращают внимания. И они просматривают отклики таких специалистов, как вы (т.е. как вы после вышеописанного). И этот путь недолгий, т.к. у вас уже есть, как понимаю, довольно много навыков.

    Удач! *___*
    Ответ написан
    12 комментариев
  • Как использовать asyncio в стандартном for цикле?

    sortarage
    @sortarage Автор вопроса
    Я тучка-тучка-тучка, я вовсе не медведь
    Ответ от товарища enchantner:

    Если тебе надо две корутины запустить “параллельно” - делай два инстанса через asyncio.ensure_future(), и поверх них делай asyncio.gather().

    Если у тебя цикл в синхронном коде - то внутри цикла делай то же самое, только с шелухой сверху:

    loop.run_until_complete(
      asyncio.gather(
           asyncio.ensure_future(first_cor()),
    asyncio.ensure_future(second_cor())
      )
    )
    Ответ написан
    Комментировать
  • В какой момент GIL усыпляет потоки?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    GIL не усыпляет и не пробуждает потоки. GIL - это блокировка, используемая системными потоками интерпретатора, гарантирующая, что два или более потока не будут выполняться одновременно. Поток интерпретатора вызывает cv_wait на GIL с таймаутом в 5 миллисекунд. Если GIL не будет освобождён в течении 5 мс, поток установит переменную gil_drop_request и вызовет cv_wait ещё раз. Поток владеющий GIL периодически проверяет состояние переменной gil_drop_request и освобождает GIL, если она установлена. Так же поток освобождает GIL при любых операция ввода\вывода.
    Ответ написан
    2 комментария
  • Какая безопасная ОСь подойдет под мои нужды?

    Adamos
    @Adamos
    Вы за какие "следы"-то боитесь?
    История, куки и прочее того же Тора? Ну, смонтируйте папку, где он все это хранит, на tmpfs - при перезагрузке его не станет.
    Спрятать конкретные файлы? Ну, truecrypt или его наследники.
    Использовать при этом можно какую угодно систему, которую вам удобнее настраивать. Хоть банальную Убунту.
    Ответ написан
  • Как сделать систему личных сообщений на Django?

    Astrohas
    @Astrohas
    Python/Django Developer
    класс Сообщение(модели.Модель):
        отправитель = модели.ИностранныйКлючь(относиться_к_имени="отправленные_сообщения")
        получатель = модели.ИностранныйКлючь(относиться_к_имени="полученные_сообщения")
        дата_отправка = модели.ДатаВремяПоле(автоматический_сейчас_добавить=Правда)
        текст_сообщения = модели.ТекстовыйПоле()
    Ответ написан
    1 комментарий
  • Как отобразить messages?

    winordie
    @winordie
    Лучшая документация -- исходники
    Вы исходники вообще смотрели? Если что вот они:
    class SuccessMessageMixin(object):
        """
        Adds a success message on successful form submission.
        """
        success_message = ''
    
        def form_valid(self, form):
            response = super(SuccessMessageMixin, self).form_valid(form)
            success_message = self.get_success_message(form.cleaned_data)
            if success_message:
                messages.success(self.request, success_message)
            return response
    
        def get_success_message(self, cleaned_data):
            return self.success_message % cleaned_data

    Перевожу:
    success_message выводит метод form_valid, который в свою очередь вызывается из метода post при отправке формы когда она не содержит ошибок. ListView не содержит никаких форм, поэтому по определению никак не может вывести message.
    Ответ написан
    Комментировать