no-style

Docker + SQL + Zenno Poster Быстрый старт

Docker + SQL + Zenno Poster Быстрый старт
Расширяем возможности Zenno Poster. Установим полноценную "карманную" базу данных MySQL с помощью Docker. Подключимся и создадим тестовую базу данных. Создадим тестовый проект и научимся взаимодействовать со всем этим добром.



Необходимые требования

  • Сервер с Root доступом. Рекомендую вот этот
  • Установленный и работающий Docker (его установка была описана тут)
  • База данных. Мы создадим отдельный Docker контейнер с MySQL и нашей переносной базой.
  • Клиент для подключения к созданной базе данных
  • Лицензия Zenno Poster
  • Шаблон Zenno Poster






Подготовка

Создадим папку где будем хранить контейнер с базой.

sudo mkdir -p /app/publicproxy-db/DB

Выставляем необходимые права

sudo chown -R $USER:$USER /app/publicproxy-db

Создаём и заполняем фаил docker-compose.yml таким содержимым

sudo nano /app/publicproxy-db/docker-compose.yml

В процессе заполнения обращаем внимание на переменные окружения в которых нас интересуют такие параметры как:

  • Пользователь: MYSQL_USER
  • Пароль: MYSQL_PASSWORD
  • Пароль Root: MYSQL_ROOT_PASSWORD
  • База данных: MYSQL_DATABASE
  • Внешний Порт: 10000:3306


Переходим в только что созданную папку

cd /app/publicproxy-db

Стартуем наш контейнер.

sudo docker-compose up -d

Docker MySQL

Если у вас тоже самое что на скрине - поздравляю, можно переходить к следующему шагу







Подключаемся к нашей БД

Для подключения нам понадобится Клиент Heidisql. Подойдёт Portable версия. Рекомендую поставить стиль Charcoal Dark Slate и шрифт Arial 12 px.

При открытии Heidisql нас приветствует мастер настройки новых подключений

Heidisql settings

Советую сразу настроить папки как вам удобно. Создаём новое подключение которое заполняем данными из фаила docker-compose.yml

  • ip адрес Хоста
  • Пользователь
  • Пароль
  • Порт

Если всё сделано правильно то при подключении мы увидим:

Heidisql successful connection





Работаем с БД через клиент

Самое время потренироваться на чём нибудь.

Для начала нужно создать саму базу данных. В Heidisql открываем вкладку запрос, вставляем туда то что написано в блоке ниже и нажимаем F9

CREATE TABLE IF NOT EXISTS `public_proxy_checker` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`proxy_full` varchar(35) DEFAULT NULL,
`proxy_date` datetime DEFAULT NULL,
`proxy_unixdate` varchar(35) DEFAULT NULL,
`proxy_ip` varchar(35) DEFAULT NULL,
`proxy_port` varchar(35) DEFAULT NULL,
`proxy_type` varchar(35) DEFAULT NULL,
`proxy_country` varchar(35) DEFAULT NULL,
`proxy_country_code` varchar(35) DEFAULT NULL,
`proxy_region` varchar(35) DEFAULT NULL,
`proxy_zip` varchar(35) DEFAULT NULL,
`proxy_lat` varchar(35) DEFAULT NULL,
`proxy_lon` varchar(35) DEFAULT NULL,
`proxy_timezone` varchar(35) DEFAULT NULL,
`proxy_isp` varchar(35) DEFAULT NULL,
`proxy_org` varchar(35) DEFAULT NULL,
`proxy_as` varchar(35) DEFAULT NULL,
`proxy_deadz` smallint unsigned DEFAULT '0',
`proxy_status` smallint unsigned DEFAULT '0',
`proxy_use_time` int unsigned DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8MB4;

Результатом будет создана база. Иногда сразу по нажатию F5 а иногда нужно перезайти в Heidisql но ничего страшного. Я долгое время не понимал тоже, а потом привык к периодическим крэшам. И мне программа спустя время начала нравиться, нужно отдать должное разработчикам, ведь программа бесплатная







О шаблоне

Последние версии прокси чекера обладают рядом недостатков, которые я предлагаю решить шаблоном Zenno на post/get.

    Функционал шаблона
  • Во многопотоке берёт проксю из большой сырой базы прокси. Которую мы спарсили заранее. Если у вас нет такой базы рекомендую ознакомится с шаблоном по парсингу proxy на get запросах.
  • Назначает каждому Get запросу проксю взятую из сырухи
  • Выполняет Get запрос на ресурс который отображает информацию об ip адресе
  • Если был получен ответ - значит прокси живой
  • Производит запись живой прокси в базу данных






Работаем с таблицей из шаблона Zenno Poster

Для того чтобы работать с созданной базой из Zenno Poster предлагаю рассмотреть вот этот шаблон. В последнем экшене нам необходимо подредактировать под себя

server=ZZZ.XXX.CCC.VVV;user id=publicproxy;database=publicproxy;password=YOUR_PASSWORD;persistsecurityinfo=True;port=10000

Вписываем свои данные и сохраняем шаблон. А в фаил input-proxy.txt кладём всю проксю которую мы хотим проверять.

Обязательное условие все строки в этом фаиле должны начинаться с протокола вот так:

  • socks5://111.111.111.111:2222
  • socks5://111.111.111.111:3333
  • socks4://111.111.111.111:4444
  • socks4://111.111.111.111:5555
  • http://111.111.111.111:23410
  • http://111.111.111.111:10800

Если не знаете какой протокол - советую вписать наугад socks4 или socks5. Быстро и массово добавить протокол в начало строки можно например в notepad++ нужно:

  • Нажать сочетание клавиш CTRL + H
  • Установить: "режим поиска Регуляр. Выражен."
  • В поле Найти вписываем "^" без кавычек
  • В поле заменить на вписываем "socks5://" без кавычек
  • Нажать "Заменить все"

Разобрались - запускаем шаблон и через какое то время обновив Heidisql(F5) получаем:

succsessfull proxycheck







Результаты чека + магия MySQL запросов

Спустя какое то время у нас накопятся данные и мы сможем поиграться с возможностями которые нам даёт MySQL.

В проксичекере реализован механизм в котором можно добавить диапазоны ip адресов для того чтобы сделать white или blacklist. Сама концепция там очень не удобная и потребляет много ресурсов. Попробуем сделать это сами но при помощи SQL запроса(ов).

Рассмотрим примеры запросов. Их вбиваем в Heidisql на закладке "запрос" и нажимаем F9

Таким запросом отобразим все рабочие прокси из Russia

SELECT proxy_full
FROM public_proxy_checker WHERE proxy_country='Russia';

Heidisql querry

Далее я пошёл сначала более сложным путём

SELECT proxy_full
FROM public_proxy_checker
WHERE proxy_country='Russia' OR proxy_country='Belarus' OR proxy_country='Ukraine' OR
proxy_country='Kazakhstan' OR proxy_country='Albania' OR proxy_country='Armenia' OR proxy_country='Austria' OR
proxy_country='Bosnia and Herzegovina' OR proxy_country='Bulgaria' OR proxy_country='Bulgaria' OR
proxy_country='Croatia' OR proxy_country='Czechia' OR proxy_country='Denmark' OR proxy_country='France' OR
proxy_country='Georgia' OR proxy_country='Germany' OR proxy_country='Hungary' OR proxy_country='Ireland' OR
proxy_country='Israel' OR proxy_country='Italy' OR proxy_country='Kosovo' OR proxy_country='Kyrgyzstan' OR
proxy_country='Latvia' OR proxy_country='Lithuania' OR proxy_country='Moldova' OR proxy_country='Netherlands' OR
proxy_country='Poland' OR proxy_country='Portugal' OR proxy_country='Romania' OR proxy_country='Serbia' OR
proxy_country='Slovakia' OR proxy_country='Slovenia' OR proxy_country='Spain' OR proxy_country='Sweden' OR
proxy_country='Turkey' OR proxy_country='United Kingdom';
Heidisql querry 2



Как оказалось можно гораздо проще

SELECT proxy_full
FROM public_proxy_checker WHERE proxy_timezone REGEXP '^(Europe/)';


SELECT proxy_full
FROM public_proxy_checker WHERE proxy_timezone REGEXP '^(America/)';


SELECT proxy_full
FROM public_proxy_checker WHERE proxy_timezone REGEXP '^(Asia/)';


SELECT proxy_full
FROM public_proxy_checker WHERE proxy_timezone REGEXP '^(Pacific/)';


Если мы хотим отобразить содержимое всех столбцов

SELECT *
FROM public_proxy_checker WHERE proxy_timezone REGEXP '^(Europe/)';


SELECT *
FROM public_proxy_checker WHERE proxy_timezone LIKE "Europe%" ORDER BY proxy_country;


SELECT *
FROM public_proxy_checker WHERE proxy_timezone LIKE "%merica%" ORDER BY proxy_country;


Heidisql querry 3

Ещё интересные запросы:

SELECT * FROM public_proxy_checker WHERE proxy_timezone LIKE "%merica%" AND proxy_timezone <> 'America/Sao_Paulo' ORDER BY proxy_country;


SELECT *
FROM public_proxy_checker WHERE proxy_timezone LIKE "%merica%" AND proxy_country <> 'Argentina' AND proxy_country <> 'Brazil' ORDER BY proxy_country;


TRUNCATE `public_proxy_checker`;
Удалит всё из бд!!!






Про переносимость

Теперь в любой момент мы можем потушить наш контейнер. Затем заархивировать его и в таком виде передать на любой другой сервер с установленным Docker, и стартануть его оттуда. Тогда мы будем работать с того же самого места на котором мы остановились, а MySQL даже не заметит что он куда то переехал.







Итог

Мы научились быстро разворачивать "переносимую" базу данных, писать данные в эту БД из Zenno Poster, тому что некоторые штуки будет проще сделать на стороне самого SQL

Комментарии