LINUX.ORG.RU

Сообщения samson_b

 

IaC, отдельный branch под одно окружение или один branch под все окружения

Форум — Development

Привет, сталкивался с двумя подходами в CI/CD для программирования инфраструктуры:

  1. Когда в одном репозитории создаются несколько branch’ев, каждый их которых управляет отдельным окружением (средой/environment). Например dev, uat, qa, prod и т.п. Каждый из этих branch’ев обновляется независимо от других.
  2. Когда в одном репозитории есть один master/main branch, а разделение на окружения делается с помощью переменных, т.е. отдельный файл с переменными для окружения dev, другой файл для qa и т.д. При этом код инфраструктуры один.

Вопрос, какой подход какие имеет недостатки и достоинства, в каких случаях что лучше использовать, какие есть best practices? Как между ними выбирать, если программируешь инфраструктуру с нуля?

 , ,

samson_b
()

Какие есть способы в Kubernetes делать умное распределение входящих соединений, а не случайное?

Форум — Admin

Есть deployment например из 10 pod replicas, есть service, который обеспечивает распределение входящих соединений между pod’ами случайным образом. Если соединения длительные, то может так получиться, что какие-то поды, в какой-то момент будут больше нагружены, а какие-то меньше.

Вопрос, есть ли какие-то инструменты в k8s, которые бы выбирали из общего списка pod’ов менее загруженные и пробрасывали соединения именно к ним. Загрузку например можно определять по количеству одновременных соединений с этим подом или как-то еще. Ну то есть сделать умное распределение входящих соединений, а не случайное.

 , ,

samson_b
()

Обновление пакета iptables заменяет iptables.service файл

Форум — Admin

Я внес изменения в некоторые .service файлы, для организации их нужного мне порядка запуска. Сейчас заметил, что обновление пакета iptables заменило файл iptables.service и все мои изменения стерлись.

Собственно вопрос, можно ли запретить обновлениям трогать .service файлы? Или мне что, надо постоянно отслеживать их изменения и восстанавливать нужный мне вид? Какие вообще есть варианты?

CentOS 8

 ,

samson_b
()

Выбор почтового сервера

Форум — Admin

Приветствую! Довольно долго использовали корпоративный почтовый сервер на sendmail. Сейчас пришло время обновить OS и встал вопрос, а не обновить ли сам почтовик?

Сейчас используется sendmail + dovecot, антивирус - clamav + amavis, антиспам - spamassasin.

В принципе все работает стабильно, но есть несколько неудобств:

1. антиспам слабый, спам проходит. Когда начинаю ужесточать правила - появляются ложные срабатывания. В итоге качество фильтрации даже близко не стоит с яндекс или гугл.

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

Вопрос, какой софт сейчас считается хорошим стандартом для почтового сервера? Какие антиспам и антивирус решения применяются? Реально ли приблизиться к качеству фильтрации спама как у крупных облачных провайдеров? Есть ли хорошие решения почтовиков с веб интерфейсом?

Поделитесь вашим опытом.

Перемещено alpha из general

 

samson_b
()

Что такое юнит-тесты и как они работают?

Форум — Development

Объясните пожалуйста, что такое юнит-тесты? Я не программист, мои знания о программировании заканчиваются на написание небольших скриптов и утилит для автоматизации. Я погуглил перед тем как создать тему, и общее объяснение сводится к тому, что юнит-тесты тестируют отдельные части кода, так чтобы ошибку можно было легко и быстро локализовать. Я не очень понимаю, как они физически работают, ну вот например у меня есть некий скрипт (файл) с десятком процедур и функций, как юнит-тесты будут его тестировать? Как можно протестировать кусок кода внутри файла?

 

samson_b
()

CD/CI Pipeline (github, jenkins, docker, k8s)

Форум — General

Хочу разобраться как настраивать CD/CI Pipeline по науке, чтобы код из репо github оказался запущенным на kubernetes кластере. Предполагается, что код нужно компилировать. Я уже более-менее во всем разобрался, хочу вынести свои мысли на обсуждение, чтобы понять правильно ли я понял концепцию и не нарушаю ли я какие-то принципы.

И так, сначала грубое представление:
 
1. Скачиваем исходный код с github repo
2. Компилируем и собираем docker image
3. Заливаем этот image на docker repo
4. Разворачиваем pod (или deployment) на k8s кластере из image, который мы залили на docker repo.

Архитектура:
* github repo

* jenkins server
  +docker
  +development tools(для компиляции)
  +kubectl (для управления k8s кластером)

* docker repo (я выбрал AWS ECR)

* k8s cluster

Права доступа, авторизация и т.п.:

1. Из публичного github repo можно брать сырцы свободно, если это private repo, то нужно установить plugin для jenkins, который позволяет авторизовываться по сертификату.

2. Для того, чтобы jenkins мог работать с docker нужно добавить пользователя jenkins в группу docker

3. Для того, чтобы docker мог заливать images на docker repo, нужно приладить скрипт (и awscli), который будет регулярно запрашивать токены у AWS ECR и обновлять их в папке ~/.docker пользователя jenkins.

4. Для того, чтобы jenkins мог управлять k8s кластером, нужно скопировать на сервер бинарник kubectl и добавить файл config с ключами в папку ~/.kube для пользователя jenkins

5. Для того, чтобы k8s cluster мог получать images с docker repo, нужно приладить cronejob, который будет регулярно запрашивать токены у AWS ECR и обновлять у себя secrets авторизации с docker repo.

У меня как-то так получилось, нормально?

 , , , ,

samson_b
()

Мониторинг системы написанной на php

Форум — General

Есть ERP система написанная на php, это кастомная разработка, сделанная программистами компании для внутренних нужд. Данная система довольно долго эволюционировала и стала достаточно сложной и большой. Дело в том, что ERP система развивалась вместе с бизнесом и в процессе ее развития никто не уделял должного внимания архитектуре и правильным подходам к такого рода разработке.

Система представляет из себя классический LAMP stack и в текущий момент переносится с php версии 5 на версию 7. Как я и говорил система непрерывно дорабатывается под нужны бизнеса, в тоже время отсутствует достаточное тестирование кода перед его внедрением в продакшн. Периодически случаются коллапсы, когда тот или иной скрипт системы начинает отжирать системные ресурсы вплоть до необходимости ручного вмешательства в работу оперухи и серверного софта.

Появилась идея начать эту систему мониторить, а именно php скрипты из которых она состоит. В теории я это вижу как мониторинг таких метрик как загрузка процессора, потребление памяти, длительность выполнения. На основании этих данных можно будет оповещать сотрудника, что здоровье системы под вопросом и такие-то метрики такого-то скрипта вышли за рамки нормы. Собственно вопрос, какие есть инструменты для такого рода задач? Какие есть подходы к мониторингу такого рода систем?

 ,

samson_b
()

Динамические водяные знаки для Shaka Player (web development)

Форум — Job

Есть видео плеер Shaka Player, который написан на javascript. Нужно реализовать «водяные знаки» в виде текста, который будет накладываться поверх видео, так чтобы, если человек записывал видео с экрана, то оно бы записалось вместе с этими знаками.

Выглядеть это должно примерно вот так https://www.vdocipher.com/blog/2014/12/add-text-to-videos-with-watermark/

Требования к самим водяным знакам:

• необходимо разместить по верх видео 3 водяных знака, каждый их которых представляет из себя короткую строку (до 40 символов). Сами строки передаются в виде параметров в скрипт.

• Водяные знаки должны масштабироваться вместе с плеером, например, при открытии видео на весь экран или при просмотре на мониторах разного разрешения. Это должно работать на всех популярных современных браузерах, в т.ч. на мобильных устройствах.

• Размер и цвет водяных знаков должен задаваться в виде параметров для каждого знака. Водяные знаки не должны выходить за пределы плеера и должны отображаться полностью.

• Расположение водяных знаков на видео должно быть случайно, но они не должны накладываться друг на друга. Через некоторый, заданный параметром, интервал времени, водяные знаки должны поменять местоположение на видео. Реализацию задачи я вижу, как html элемент, который будет накладываться поверх плеера с использованием CSS. Но готов выслушать и ваши предложения.

Сделать это нужно в виде скомпилированного javascript файла (.js), a в теле html мы будем только передавать параметры скрипту. Нужно чтобы скрипт проверял домен, с которого он запускается и работал только с нашего домена. Оплата 10000р

По всем вопросам обращаться georgiogoodman@gmail.com

 

samson_b
()

Понять кто скачивает файл по ссылке

Форум — Web-development

Есть nginx веб сервер, который раздает видео контент. Есть shaka player (javascript), через который этот контент должен воспроизводиться у посетителей сайта. Вопрос, можно ли на стороне веб сервера, как-то проверить, что обращение к видео контенту идет именно от нашего плеера, а не от какой-то утилиты, которая выкачивает видео? Может плеер какой отпечаток оставляет, который можно отследить на веб сервере?

 

samson_b
()

Проблема в транзитном узле между серверами, как решать?

Форум — General

Приветствую! Есть два сервера (А и Б), каждый из которых находится в разных датацентрах (физически в одном городе). Датацентры принадлежат разным компаниям.

Буквально сутки назад, система мониторинга(nagios) показала, что связь между серверами сильно ухудшилась - соединения с сервера А с агентом nagios, на удаленном сервере Б, стали отваливаться по таймауту. Далее, при попытке установить FTP соединение с одного сервера на другой, примерно 50% соединений тоже отваливается по таймауту. При этом не важно в какую сторону устанавливается соединение.

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

Прогнал утилитой mtr тестирование канала между серверами, получилось, что при соединении с сервера А на сервер Б и с сервера Б на А используются разные маршруты (несколько промежуточных хостов отличается). Но тем не менее со связью проблемы и есть предположения на каком именно узле они возникают.

Уже сутки бьюсь с обоими техподдержками в этих датацентрах, КАЖДАЯ из них говорит у нас все хорошо, мы не виноваты, виноваты не мы, «от нас пакеты уходят», обращайтесь в датацентр с другой стороны. Увиливают, придумывают отмазки, но разбираться в проблеме вне их сети не хотят. Как я понимаю, транзитный узел на котором проблема, не относится ни к одному из этих двух датацентров.

Не понятно, что делать мне?, у меня есть два сервера, которые не могут нормально передавать данные друг другу по вине какой-то четвертой стороны. Как, вообще, правильно решать такие задачи?

 ,

samson_b
()

Nginx и одноразовые ссылки

Форум — Admin

Настроил в nginx ссылки со сроком годности, с помощью модуля secure link и скрипта, который эти линки генерит. Мне нужно, чтобы у таких ссылок, кроме ограничения по сроку годности, было еще и ограничение по количеству переходов - всего одни раз. Т.е. я сгенерил ссылку, которая действует 10 минут, нужно чтобы пользователь мог ее открыть только один раз, даже если 10 минут не прошли. Подскажите, как это сделать?

Перемещено leave из general

 ,

samson_b
()

Какие есть решения позволяющие смотреть видео онлайн, но затрудняющие скачивание?

Форум — Admin

Приветствую! Есть веб сайт на платформе moodle (apache+php+mariadb) с образовательным контентом, в т.ч. видео (видео файлы mp4 располагаются на самом сервере). Заказчик хочет, по возможности, защитить видео от скачивания. Я знаю правило - if you can watch it, you can capture it, но в тоже время, если есть возможность затруднить/усложнить копирование файлов с сервера, то хотелось бы реализовать. Подскажите, какие есть готовые решения? Рассматриваю в т.ч. платные. Коллеги, может кто-то уже решал такую задачу, подскажите.

 , ,

samson_b
()

Ssd vs hdd для видео хостинга

Форум — Admin

Подскажите, подбираю железо для сервера возник вопрос по дискам. Это будет образовательный проект на moodle. На сервере будет видео контент и полагаю основную нагрузку будет давать именно он. По моим прикидкам обычный hdd даст уверенные 70мбайт в сек на чтении больших файлов. С рейдом 1 мы будем иметь уже 140, что уже больше чем скорость канала 1гигабит. Если использовать hardware raid controller, то можно разгрузить процессор и все в принципе будет работать нормально. Вопрос, имеет смысл ставить ssd диски или у нас тут узкое место канал?

 , , ,

samson_b
()

SQL запрос и python

Форум — Development

Есть бд с записями типа

+-----+-----------+
| id  | hash      |
+-----+-----------+
| 425 |   7251460 |
| 425 |  19468101 |
| 425 |  31448815 |
| 426 | 154757581 |
| 426 | 181670686 |
| 426 | 183141099 |
| 427 | 199589841 |
| 427 | 231307707 |
| 427 | 373036439 |
| 427 | 392853688 |
+-----+-----------+

Мне нужно загрузить эти данные в такой список

[425, [7251460, 19468101, 31448815]]
[426, [154757581, 181670686, 183141099]]
[427, [199589841, 231307707, 373036439, 392853688]]

Можно это с помощью sql запроса сделать или надо после выгрузки из базы наполнять список по какому-то циклу? что-то в голову ничего не лезет :(

 ,

samson_b
()

Как оптимизировать пару функций на python

Форум — Development

Функция 1 - получает кусок html в виде строки, дальше она удаляет все html тэги.

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

Вырезает все слова меньше 3х символов и лишние пробелы.

def normal_str(s):
    #remove all html tags
    s = re.sub('<.*?>', ' ', s)
    #replace all non alphebetical characters with spaces
    s = re.sub('[^a-z]', ' ', s.lower())
    #remove all words with less than 3 letters and extra spaces
    result = ' '.join(i for i in s.split() if len(i)>2)
    return result

Функция 2 на входе получает строку, а на выходе выдает list состоящий из хэшей троиц слов

хэш1 = хэш(слово1 + слово2 + слово3)

хэш2 = хэш(слово2 + слово3 + слово4)

...

хэшN = хэш(словоN + словоN+1 + словоN+2)

Хэши подогнан под формат bigint MySQL, который будет потом записан в БД.

list хэшей сортируется по величине и из него удаляются дубли.

def words_hash(string):
    words = string.split()
    i = len(words)
    n = 0
    hs = []
    while n <= i-3:
        st = words[n] + words[n+1] + words[n+2]
        hs.append(int(hashlib.sha256(st.encode('utf-8')).hexdigest(), 16) % 10**16)
        n = n + 1
    hs.sort()
    return list(dict.fromkeys(hs))

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

 ,

samson_b
()

Оценивать похожесть кусков текста, python

Форум — Development

Приветствую!

Сделал скрипт, который выдергивает с веб сайта поиска работы вакансии и загружает их в базу. Также этот скрипт проверяет их на уникальность по трем полям: название вакансии, название компании и локейшн. Если такая вакансия уже есть в базе, то скрипт ее пропускает.

Все работает хорошо, но хочется улучшить. Я заметил, что в базе появляются похожие вакансии, где название вакансии или название конторы немного изменены (вероятно, чтобы придать вакансии уникальность). При этом, подробное описание вакансии практически идентичное. Для меня это дубль, который засоряет базу.

Вопрос, есть ли какая-то библиотека в python, которая предоставит возможность сравнить два куска html и выдать в виде некоторой величины похожесть текста?

 ,

samson_b
()

MariaDB и права на лог файлы

Форум — Admin

Приветствую!

MariaDB складывает свои лог файлы в:

bash-4.4$ pwd
/var/log/mariadb
bash-4.4$ ls -l
total 12
-rw------- 1 mysql mysql    0 Jan 17 03:25 mariadb.log
-rw------- 1 mysql mysql 2060 Jan  9 11:34 mariadb.log-20200110.gz
-rw------- 1 mysql mysql  958 Jan 10 04:18 mariadb.log-20200111.gz
-rw------- 1 mysql mysql 1838 Jan 16 23:15 mariadb.log-20200117.gz

При этом права доступа к файлам имеет только пользователь mysql. Мне надо дать доступ на чтение другим пользователям, для этого, надо чтобы файлы создавались с правами на чтение для группы mysql (хотя бы), а не только для пользователя mysql.

Вопрос где вообще настраивается с какими правами создаются лог файлы?

 , ,

samson_b
()

Функция в python, такая структура корректна?

Форум — Development

Данная функция проверяет нахождение определенных паттернов в двух строках job_title, job_location. Если хотя бы один паттерн присутствует, функция вернет 'NI', если нет то 'New"

def job_filter(job_title, job_location):
    title_patterns = ['Sr.', 'sr.', 'Sr ', 'sr ', 'Senior', 'senior', 'Lead', 'lead', 'Azure', 'azure']
    location_patterns = ['New York', 'Boston', 'San Francisco', 'San Jose']
    for pattern in title_patterns:
        if re.search(pattern, job_title):
            return 'NI'
    for pattern in location_patterns:
        if re.search(pattern, job_location):
            return 'NI'
    return 'New'

Вопрос в том, можно вот так несколько раз return использовать внутри самой функции или это считается неправильно?

 ,

samson_b
()

Kubernetes бекап и восстановление

Форум — General

Доброго вам!

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

Я погуглил, нашел инструкцию, по которой вроде все просто https://elastisys.com/2018/12/10/backup-kubernetes-how-and-why/

Но, проблема в том, что при первоначальной инициализации мастернода создает сертификаты, которые привязаны в т.ч. к ее локальным ip адресам. Если забекапить все эти сертификаты и сделать снапшот etcd, а потом развернуть на другой машине, с другими локальными ip, то k8s дико ругается, на то, что сертификаты не соответствуют адресам.

И вот тут непонятно, то ли надо что-то на этапе инициализации кластера делать, то ли в процессе восстановления бекапа, чтобы все нормально проходило. Подскажите, кто решал такую задачу?

 , ,

samson_b
()

Kubernetes cluster вопросы по high availability

Форум — General

Здравствуйте господа, хотелось бы поднять вопрос по реализации high availability в Kubernetes.

Я погуглил это вопрос и во всех статьях предполагается использование нескольких мастер нод. И вот тут у меня вопросы, не очень понятно, как они все согласованно работают?

Они (мастер ноды) все работают одновременно или одна из них является ведущей, а остальные просто поддерживают синхронизированное состояние с ней?

В случае выхода одной ноды из строя, у них есть какой-то внутренний механизм прихода к консенсусу или как это все работает?

Что будет, если нода, которая была недоступна, вдруг опять станет доступной, как кластер это обработает?

Если кто-то шарит в этом, расскажите на высоком уровне, как это все работает.

 ,

samson_b
()

RSS подписка на новые темы