Alexell.Ru https://alexell.ru Музыка, софт и статьи от Alexell ru 7391CC2B1408947EFD5084459F5BD0CA https://alexell.ru/blog/various/podnimaem-server-telegram-local-bot-api.html <![CDATA[Поднимаем сервер Telegram Local Bot API]]> Sat, 13 Jul 2024 11:43:51 +0000

Поднимаем сервер Telegram Local Bot API

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Сервер Telegram Local Bot API

Как известно, у облачной платформы Telegram Bot Api есть ограничения. В зависимости от популярности и функционала вашего Telegram бота, вы можете столкнуться с несколькими распространенными проблемами:

  • у вебхука есть лимит на 40 одновременных подключений, это значит, что при 40+ пользователей, использующих ваш бот в одно и то же время, он может начать “лагать” независимо от мощности вашего сервера;
  • бот не может загружать файлы (метод getFile), размером более 20 Мб;
  • бот не может отправлять пользователям файлы (методы send*), размером более 50 Мб;

Чтобы обойти эти ограничения, вы можете запустить свой собственный сервер Local Bot API и тогда получите следующие преимущества:

  • Скачивание файлов без ограничения по размеру
  • Загрузка файлов размером до 2000 Мб
  • Загрузка файлов, используя локальный путь или схему URI file://
  • Использование http для вебхука
  • Использование любого локального ip-адреса для вебхука
  • Использование любого порта для вебхука
  • Максимальное количество подключений для вебхука до 100000
  • Абсолютный локальный путь в качестве значения поля file_path без необходимости скачивания файла после запроса getFile

Компиляция

Чтобы не привязываться к какой-то конкретной операционной системе, я советую вам воспользоваться генератором инструкций для компиляции, который любезно предоставили разработчики. Перейдите по ссылке, выберите ОС и дистрибутив, затем место сохранения бинарника после сборки (telegram-bot-api/bin или /usr/local/bin) и получите список инструкций, которые нужно выполнить в вашей ОС. Старайтесь вводить команды по одной, чтобы убедиться в успешности их выполнения. Обратите внимание, что процесс компиляции на виртуальных машинах Linux длится примерно час, по крайней мере у меня было именно так. Компиляция по предоставленным инструкциям не вызовет трудностей, просто выполняйте команды по очереди и всё получится.

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

Готовые бинарники, если вы не хотите заниматься компиляцией

Вы можете скачать архив с бинарниками telegram-bot-api (v7.7 от 07.07.2024), которые я скомпилировал для вас. В архиве лежат бинарники для следующих ОС: Alpine 3.17, CentOS Stream 9, Debian 11, Debian 12, Fedora 37, Ubuntu 22.04, Ubuntu 24.04. Архитектура x86-64 (amd64).

Перед запуском готового исполняемого файла telegram-bot-api на некоторых ОС, вам потребуется установить:

# для Debian 11-12:
$ apt install libc++-dev

# для Ubuntu 22.04:
$ apt install libc++-14-dev

# для Ubuntu 24.04
$ apt install libc++-18-dev

Для запуска сервера вам понадобится api_id и api_hash. Вы можете получить их здесь. Обратите внимание, что система очень строга к названию приложения, поэтому пробуйте разные варианты, пока не получится.

Теперь можно сделать тестовый запуск сервера. Я буду считать, что вы установили сервер в /usr/local/bin, а если это не так, просто укажите или замените путь на свой в дальнейших командах статьи.

Запускаем сервер:

telegram-bot-api --local --api-id=<api_id> --api-hash=<api_hash>

Если никаких ошибок не появилось и сервер занял собой терминал, значит все хорошо. Чтобы окончательно убедиться, откройте еще один терминал и выполните команду curl http://localhost:8081

В ответ вы должны увидеть следующее:

{"ok":false,"error_code":404,"description":"Not Found"}

Если всё так, значит сервер работает корректно и вы пока можете закрыть его при помощи Ctrl+C.

Настройка

Под спойлером находится список известных параметров, которые вы можете указывать при запуске telegram-bot-api. Они позволяют настроить сервер для различных условий работы, оптимизируя производительность и безопасность. Обратите внимание, что некоторые параметры могут быть специфичны для конкретных версий сервера. Для обеспечения максимальной производительности вашего бота, я рекомендую запускать сервер с параметром --local на той же машине, где находится ваш бот и подключать вебхук по локальной сети и схеме http.

Список параметров запуска

Основные параметры:

--api-id – Идентификатор приложения для доступа к Telegram API. Обычно используется для аутентификации приложения в Telegram API.
--api-hash – Хеш идентификатора приложения для доступа к Telegram API. Работает в паре с api-id для аутентификации.
--http-ip-address – Локальный адрес, по которому будут приниматься HTTP соединения. По умолчанию принимаются подключения по любому локальному IPv4.
--http-port – Порт для HTTP-сервера, через который сервер будет принимать запросы. По умолчанию: 8081.
--http-stat-ip-address – Локальный адрес, по которому будут приниматься HTTP соединения к серверу статистики. По умолчанию принимаются подключения по любому локальному IPv4.
--http-stat-port – Порт для HTTP сервера статистики, который используется для мониторинга состояния и работы сервера. По умолчанию: 0 (выкл).
--local – Параметр, указывающий, что сервер должен обслуживать только локальные запросы. Это повышает уровень безопасности, ограничивая доступ к API.
--dir – Рабочая директория сервера, где будут храниться все файлы, связанные с работой сервера.
--temp-dir – Директория для временных файлов, используемых сервером.

Дополнительные параметры:

--log – Путь к файлу, куда будут записываться логи работы сервера.
--verbosity – Уровень детализации логов, которые будет записывать сервер.
--memory-verbosity – Уровень детализации логов по использованию памяти.
--log-max-file-size – Максимальный размер файла лога перед его архивацией или удалением. По умолчанию 2 Гб.
--max-connections – Максимальное количество одновременных соединений, которые может обрабатывать сервер. По умолчанию: 0 (без ограничений).
--cpu-affinity – Устанавливает маску CPU, позволяя связать выполнение процессов сервера с определенными ядрами процессора. По умолчанию: 0 (использует все доступные ядра).
--main-thread-affinity – Устанавливает маску CPU для привязки основного потока к конкретному ядру. По умолчанию использует значение cpu-affinity
--max-webhook-connections – Ограничение количества соединений для вебхуков на одного бота. По умолчанию: 100 в режиме --local, иначе 40.
--username – Имя пользователя, под которым будет запущен сервер.
--groupname – Группа пользователя, под которой будет запущен сервер.
--proxy – Прокси сервер для исходящих запросов вебхука в формате http://host:port

Создаем сервис для автозапуска Local Bot API

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

nano /etc/systemd/system/telegram-bot-api.service

Добавьте следующий код:

[Unit]
Description=Telegram Bot API Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/lib/telegram-bot-api
ExecStart=/usr/local/bin/telegram-bot-api --local --api-id=<api_id> --api-hash=<api_hash> --max-webhook-connections=1000
SyslogIdentifier=telegram-bot-api
Restart=always
User=nobody
Group=nogroup

[Install]
WantedBy=multi-user.target

Не забудьте указать ваши api_id и api_hash, а также другие параметры запуска, какие вам требуются. Перед запуском сервиса, вам необходимо создать ту рабочую директорию, которую вы указали в файле сервиса. Это может быть любая директория, не обязательно /var/lib/telegram-bot-api. В файле сервиса укажите те же User и Group, под которыми работает ваш бот, чтобы у него не было проблем с доступом к загруженным медиа-файлам. Если ваш бот работает под root (не рекомендуется) и сервер BOT API тоже будет под root, то в файле сервиса можно не указывать параметры User и Group.

Запускаем сервис, добавляем в автозагрузку и сразу проверяем статус:

systemctl start telegram-bot-api
systemctl enable telegram-bot-api
systemctl status telegram-bot-api
Статус сервиса Telegram Local Bot API

Если статус показывает примерно то же, что на скриншоте, значит всё получилось. Вы можете перезагрузить виртуальную машину и убедиться, что telegram-bot-api будет запущен автоматически.

Перенос бота на Local Bot API

Чтобы переключить вашего бота на локальный сервер api, сначала нужно отключить его от облачной платформы Telegram Bot Api. Для этого существует метод logOut. Вы можете просто открыть в браузере ссылку, заменив <BOT_TOKEN> на настоящий токен вашего бота:

https://api.telegram.org/bot<BOT_TOKEN>/logOut

В ответе вы увидите true в двух параметрах.

Теперь вы можете добавить бота на ваш локальный сервер api. Если ваш бот написан с использованием библиотеки, откройте документацию к библиотеке и найдите там код, позволяющий указать свой адрес api сервера. Например для aiogram это написано здесь, для pyTelegramBotAPI (TeleBot) здесь, а для PHP Telegram Bot здесь. Если же у вас полностью самописный бот, то просто замените в своих скриптах адрес, на который бот делает запросы и вместо https://api.telegram.org укажите http://localhost:8081

Если вы используете вебхук, то выполните setWebhook с необходимыми параметрами и запустите вашего бота. Если вы используете long-polling, то просто запустите бота и он начнет опрашивать уже ваш локальный сервер.

Работа с файлами в Local Bot API

Как только вы переключите ваш бот на локальный сервер api, в рабочей директории появится папка с именем, равным токену вашего бота. Когда ваш бот будет получать изображения и другие файлы от пользователей, они будут находиться именно там, разложенные по папкам photos, documents и т.п.

Если telegram-bot-api работает в режиме --local, то для получения файлов от пользователей, вам теперь достаточно лишь метода getFile. Если в коде вашего бота вы склеивали https://api.telegram.org/file/bot/<token>/ с file_path из getFile и скачивали файл, то вам потребуется внести правки и избавиться от скачивания файлов, ведь getFile сразу будет выдавать абсолютный локальный путь до файла.

Обратите внимание, что у пользователя, от имени которого работает ваш бот должны быть права на чтение в рабочей директории telegram-bot-api, иначе он не сможет получать файлы.

На этом у меня всё. Надеюсь, что эта статья была вам полезна 😉

]]>
https://alexell.ru/blog/crypto-blog/avtomaticheskij-farming-blum-points.html <![CDATA[Автоматический фарминг Blum Points]]> Wed, 19 Jun 2024 16:28:01 +0000

Автоматический фарминг Blum Points

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Blum (криптобиржа)

После Notcoin появилось множество проектов, которые позволяют фармить различные монеты, которые в будущем, предположительно, будут торговаться. Если вам интересно, вы можете взглянуть на несколько наиболее примечательных проектов на момент написания статьи:

  • TapSwap (листинг ожидается в 2024)
  • Blum (проект от будущей криптовалютной биржи, листинг ожидается в 2024)
  • MMpro BUMP (проект от MMpro Trust и Tonkeeper, монеты уже торгуются на Ston.fi, но листинга еще не было)
  • CEX.IO (проект от известной криптовалютной биржи)
  • X Empire (листинг был 24.10.2024)
  • Hamster Kombat (листинг был 26.09.2024)
  • MemeFi Coin (листинг был 22.11.2024)

Но в этой статье я бы хотел уделить отдельное внимание проекту Blum. Это криптовалютная биржа, которая будет работать в Telegram и позволит пользователям торговать напрямую из сторонних криптокошельков, благодаря работе по гибридной модели CeDeFi. Проект основан бывшими региональными топ-менеджерами, покинувшими Binance на фоне ухода компании с российского рынка. Таким образом, фармить Blum Points действительно имеет смысл, так как этот токен подкреплен реальным проектом. Кроме того, @BlumCryptoBot получил верификацию в Telegram.

Немного о фарминге Blum Points

фарминг Blum Points

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

Автоматический фарминг Blum Points

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

]]>
https://alexell.ru/blog/crypto-blog/memefi-coin-i-avtomatizacziya-majninga.html <![CDATA[MemeFi Coin и автоматизация майнинга]]> Wed, 03 Apr 2024 11:46:50 +0000

MemeFi Coin и автоматизация майнинга

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное

Многие наверняка слышали про Notcoin. О нем активно писали даже в каналах, не связанных с криптовалютой. Notcoin можно было майнить с помощью тапов по экрану в приложении внутри Telegam, но 1 апреля майнинг подошел к концу и теперь ожидается листинг. Многие уже успели заработать на продаже ваучеров, а те, кто, как я, решили не продавать токены, смогут заработать в будущем. Если вы не успели намайнить Notcoin или просто хотите продолжать бесплатно майнить какие-либо токены, то эта статья для вас. Появилось еще одно приложение с похожим функционалом, но для майнинга других монет – MemeFi Coin.

Немного о MemeFi Coin

MemeFi Coin

Это приложение представляет собой мини-игру, где тапами вы наносите урон боссу. Сверху вы видите баланс монет и ваш уровень. Внизу слева находятся жизни босса. Когда они закончатся, вы перейдете на следующий уровень, получите награду и начнете дамажить другого босса. Справа внизу находится ваша энергия. В разделе “Boosters” можно прокачивать силу атаки (мульти-тап), энергию и скорость ее восстановления. Там же находятся ежедневные бесплатные бусты. За исключением тематики с уроном по боссу, общие принципы приложения такие же, какие были в Notcoin, хотя на мой взгляд, энергия в MemeFi Coin восстанавливается быстрее. На момент написания статьи, функции Squads и Leaderboard еще не запущены. Также покупка тап бота тоже недоступна. Но думаю в скором времени все это появится.

MemeFi Coin в Telegram

Я не испытываю большого доверия к мем-монетам из-за их волатильности, но считаю, что не устоит упускать airdrop любых токенов, ведь это не требует вложений, а в будущем можно будет заработать.

Автоматизация майнинга MemeFi Coin на мобильных устройствах

Если у вас Android, то там наверняка есть способы настроить авто-тап, возможно через сторонние приложения. Но я много лет не пользовался андроидом, поэтому никакой конкретики написать не смогу. Если же у вас iPhone, то пусть полноценный авто-тап сделать и не получится, но частичный все же можно. Под спойлером находится процесс настройки для iOS 17+.

Частичный авто-тап на iPhone

  1. Заходим в Настройки => Универсальный доступ => Виртуальный контроллер.
  2. Переходим в “Переключатели” и добавляем новый. Выбираем источник: экран, а действие: касание. Задаем любое название или оставляем по умолчанию.
  3. Возвращаемся назад и переходим в “Наборы правил“. Создаем новый набор правил. Название – на ваше усмотрение, переключатель – выбираем тот, который создали. Действия – собственный жест.
  4. Далее вы попадете в меню создания жеста. Тапайте по области экрана, примерно где находится босс в MemeFi Coin. Вы можете тапать как вам удобно, я тапаю сразу 3-мя пальцами. Долго тапать не получится – когда синие кружочки перестанут появляться, жест записан. Сохраняем его.
  5. Возвращаемся назад, на страницу “Наборы правил“, переходим в “Запуск набора правил” и выбираем созданный набор правил.
  6. Возвращаемся назад, в меню “Универсальный доступ“, ищем внизу “Быстрая команда“. Здесь можно выбрать функции, которые будут запускаться при тройном нажатии на боковую кнопку вашего iPhone (или кнопку “Домой” в зависимости от модели). Если вы не пользуетесь тройным нажатием, снимите все галочки, которые тут стоят (если стоят) и выберите “Виртуальный контроллер“. Если у вас здесь уже выбраны нужные вам функции, тогда добавьте к ним и виртуальный контроллер. В таком случае его просто нужно будет выбирать в всплывающем меню после тройного нажатия.

Не рекомендую сразу идти в MemeFi Coin и проверять, потому что у меня при включении виртуального контроллера тройным нажатием боковой кнопки, по середине экрана появлялось уведомление о том, что виртуальный контроллер изменит жесты управление iPhone. И закрыть это уведомление нельзя (мешает включенный авто-тап). Поэтому лучше включите виртуальный контроллер, находясь в меню “Виртуальный контроллер“. Когда появится это уведомление, не жмите на экран, просто снова нажмите три раза на боковую кнопку и виртуальный контроллер отключится, что даст вам возможность нажать “ОК” на этом уведомлении. Повторите это несколько раз, после чего это уведомление перестанет появляться. Теперь вы можете пользоваться частичным автотапом.

Теперь вы можете запустить приложение MemeFi Coin, включить виртуальный контроллер тройным нажатием на боковую кнопку вашего iPhone (или кнопку “Домой” в зависимости от модели), затем тапнуть по боссу и увидеть, что сработал записанный вами жест из нескольких тапов. Если после включения виртуального контроллера быстро тапать по боссу несколько раз, то записанный жест тоже будет повторяться несколько раз. Таким образом, если быстро тапать раз 30-40, то авто-тап после этого будет работать еще примерно минуту без вашего участия. Дальше уже экспериментальным путем вы сможете разобраться, сколько вам тапать, чтобы авто-тап работал дольше.

Автоматизация майнинга MemeFi Coin на Linux

MemeFi Coin автомайнинг на Linux

Вы можете автоматизировать процесс майнинга (игры) на ОС Linux и майнить 24/7. Обратите внимание, что для корректной работы софта, по заявлению автора, требуется Python 3.10 или 3.11. У меня все прекрасно работает на Ubuntu 22.04 и Python 3.10.

Клонируем репозиторий проекта:

git clone https://github.com/shamhi/MemeFiBot.git
cd MemeFiBot

Если у вас еще не установлен virtualenv, то:

sudo apt install python3-virtualenv

Создаем виртуальное окружение и устанавливаем зависимости:

python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt

Копируем пример конфига в .env:

cp .env-example .env

Дальше в файле .env вам нужно прописать API_ID и API_HASH вашего Telegram приложения. Вы можете получить их после создания приложения здесь. Остальные параметры можно оставить по умолчанию или настроить на свой вкус (описание здесь). Вот пример моего конфига:

API_ID=
API_HASH=

MIN_AVAILABLE_ENERGY=50
SLEEP_BY_MIN_ENERGY=120

ADD_TAPS_ON_TURBO=

AUTO_UPGRADE_TAP=False
MAX_TAP_LEVEL=
AUTO_UPGRADE_ENERGY=False
MAX_ENERGY_LEVEL=
AUTO_UPGRADE_CHARGE=False
MAX_CHARGE_LEVEL=

APPLY_DAILY_ENERGY=True
APPLY_DAILY_TURBO=True

RANDOM_TAPS_COUNT=[50,250]
SLEEP_BETWEEN_TAP=[25,50]
USE_PROXY_FROM_FILE=

Запускаем бот:

python3 main.py

Бот предложит вам 2 действия, сперва выбираем “1”. Это запустит процесс авторизации в Telegram и создаст файл сессии. Действие номер “2” запустит основной процесс бота. Не забудьте перед этим зайти в MemeFi Coin с аккаунта, который планируете запускать на этом софте. Просто начните игру, потапайте немного, затем выйдите из игры и можете запускать софт. Не рекомендую заходить в приложение через ваш Telegram клиент, пока работает этот бот. Есть риск, что могут спалить двойное подключение к игре.

После авторизации, да и вообще в будущем вы можете сразу запускать бота в работу минуя выбор действия, а также минуя активацию виртуального окружения:

cd MemeFiBot
venv/bin/python3 main.py -a 2

Вы также можете запускать бот в фоне и оставить его работать сутками, при этом закрыв консоль:

setsid venv/bin/python3 main.py -a 2 > /dev/null 2>&1 &

Чтобы при необходимости найти PID процесса и убить его, используем эти команды:

ps aux | grep "python3 main.py" | grep -v grep

Затем kill PID_процесса

Автоматизация майнинга MemeFi Coin на Windows

Вы также можете автоматизировать процесс майнинга (игры) на ОС Windows. Сперва вам нужно установить Python 3.10 (или 3.11), а также virtualenv. Описывать этот процесс я не буду.

Далее вы можете скачать репозиторий проекта себе на ПК и распаковать в удобном для вас месте. Затем используем командную строку, переходим в папку проекта и продолжаем процесс:

python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt

Затем в папке проекта создаем файл .env, копируем в него содержимое файла .env-example и указываем API_ID и API_HASH вашего Telegram приложения (приложение создаем здесь). Остальные параметры можно оставить пустыми (будут использованы значения по умолчанию) или настроить на ваше усмотрение, пример конфига есть выше.

Запуск бота:

python main.py

P.S. Я пробовал собрать для вас этот бот в .exe файл при помощи Auto PY to EXE. К сожалению, хоть .exe файл и был успешно собран, при запуске он выдает ошибки разных библиотек и не хочет работать. Но я пытался 🙂

Желаю всем удачной игры и майнига MemeFi Coin!

]]>
https://alexell.ru/blog/php-wordpress/sozdaem-slesh-komandy-v-discord-na-php.html <![CDATA[Создаем слэш команды в Discord на PHP]]> Tue, 14 Nov 2023 13:11:01 +0000

Создаем слэш команды в Discord на PHP

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
слэш команды в Discord

Если у вас есть свой Discord сервер, возможно вы уже написали простенького бота в Discord для ваших нужд. Как это сделать, я рассказал в этой статье. Однако, возможностей простого бота зачастую недостаточно, поэтому нам на помощь приходят интерактивные слэш команды в Discord. Если создать слэш команды, они будут появляться как подсказки, когда пользователь введет в поле для отправки сообщения символ слэш. В подсказке будет указана сама команда и ее описание, заданное вами. После отправки команды пользователем, он получит соответствующий ответ. В этой статье вы узнаете, как сделать интерактивные команды на PHP без использования каких-либо библиотек.

Для работы с интерактивными командами будет использоваться криптографический модуль Sodium, который включен по умолчанию в PHP, начиная с версии 7.2. Впрочем сейчас уже 2023 год и я надеюсь, что вы успели перейти на PHP 8. Давайте создадим 2 скрипта, чтобы реализовать слэш команды в Discord. Первый скрипт – это основной обработчик для этих команд, назовем его к примеру discord-commands.php. А второй скрипт просто для того, чтобы регистрировать команды в Discord можно сказать, что он тестовый, назовем его discord-commands-manage.php. Перед началом работы вам понадобятся данные приложения и бота из Discord Developer Portal. Добавьте в discord-commands-manage.php ID вашего приложения, полученный на вкладке “General Information”:

$app_id = Application_ID_Here;

А в discord-commands.php добавьте Public Key вашего приложения из той же вкладки:

$app_key = 'Public_Key_Here';

Затем перейдите на вкладку Bot и получите там токен. Обратите внимание, если вы уже используете бот, то не нужно нажимать “Reset Token” – просто скопируйте токен из других ваших скриптов, где работаете с ботом. Пропишите токен бота только в discord-commands-manage.php.

$bot_token = 'Bot_Token_Here';

discord-commands-manage.php

Этот скрипт предназначен для того, чтобы добавлять или удалять слэш команды в Discord. Он содержит всего 2 функции и примеры их использования.

<?php
$app_id = Application_ID_Here;
$bot_token = 'Bot_Token_Here';

// добавляем команду /test с описанием "Тестовая команда"
AddCommand('test', 'Тестовая команда');

// ID команды всегда можно посмотреть в Discord, если у вас включен режим разработчика, но если вам зачем-то понадобится id прямо здесь, то используйте такой вариант:
// $cmd_id = AddCommand('test', 'Тестовая команда'); // в переменной $cmd_id будет находиться id созданной команды

// удаляем команду по ID (удалять можно только по ID команды)
DeleteCommand(1058231194334015609); // сюда просто вписываем длинный id команды


// функция для добавления команды
function AddCommand($name, $description) {
	$api_url = 'https://discord.com/api/v10/applications/'.$GLOBALS['app_id'].'/commands';
	$command = [
		'name' => $name,
		'type' => 1,
		'description' => $description,
	];
	$ch = curl_init($api_url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($command));
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bot '.$GLOBALS['bot_token']));
	$res = curl_exec($ch);
	curl_close($ch);
	return json_decode($res, true)['id'];
}

// функция для удаления команды
function DeleteCommand($id) {
	$api_url = 'https://discord.com/api/v10/applications/'.$GLOBALS['app_id'].'/commands/'.$id;
	$ch = curl_init($api_url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bot '.$GLOBALS['bot_token']));
	curl_exec($ch);
	curl_close($ch);
}

Теперь при помощи этого скрипта, добавьте любую тестовую команду в ваше приложение и получите ее ID, он нам понадобится в основном обработчике.

discord-commands.php

Этот скрипт будет отвечать на ваши слэш команды в Discord. Ниже представлен код скрипта с комментариями

<?php
$app_key = 'Public_Key_Here';

$input = file_get_contents('php://input'); //  получаем данные входящего от Discord запроса
if (empty($input)) exit();
$result = endpointVerify($_SERVER, $input, $app_key); // выполняем верификацию
if (empty($result)) exit();

http_response_code($result['code']);
if ($result['data']['type'] == 1) { echo json_encode($result['data']); exit(); } // это нужно для проверочных запросов от Discord

// Обработка ваших команд
if ($result['data']['type'] == 2) {
	$input_data = json_decode($input, true);
	
	if ($input_data['data']['id'] == 1058231194334015609) { // сюда вписываете id команды /test
		$answer = 'Это тестовый ответ на команду.'; // здесь пишете ответ, который пользователь получит при использовании команды
		InteractionCallback($answer); // отправляете ответ
	}
}


// Функции
function InteractionCallback($message) {
	$data = ['type' => 4, 'data' => ['content' => $message]];
	header('Content-Type: application/json');
	exit(json_encode($data));
}

function endpointVerify(array $headers, string $data, string $publicKey): array
{
	if (!isset($headers['HTTP_X_SIGNATURE_ED25519']) || !isset($headers['HTTP_X_SIGNATURE_TIMESTAMP'])) return ['code' => 401, 'data' => null];
	$signature = $headers['HTTP_X_SIGNATURE_ED25519'];
	$timestamp = $headers['HTTP_X_SIGNATURE_TIMESTAMP'];
	if (!trim($signature, '0..9A..Fa..f') == '') return ['code' => 401, 'data' => null];
	$message = $timestamp . $data;
	$binarySignature = sodium_hex2bin($signature);
	$binaryKey = sodium_hex2bin($publicKey);
	if (!sodium_crypto_sign_verify_detached($binarySignature, $message, $binaryKey)) return ['code' => 401, 'data' => null];
	$data = json_decode($data, true);
	return match($data['type']) {
		1 => ['code' => 200, 'data' => ['type' => 1]],
		2 => ['code' => 200, 'data' => ['type' => 2]],
		default => ['code' => 400, 'data' => null]
	};
}

Если у вас PHP ниже 8 версии, функция endpointVerify может вызвать ошибку даже при наличии Sodium. Если это случится, попробуйте использовать такой вариант функции:

function endpointVerify($headers, $data, $publicKey) {
	if (!isset($headers['HTTP_X_SIGNATURE_ED25519']) || !isset($headers['HTTP_X_SIGNATURE_TIMESTAMP'])) return ['code' => 401, 'data' => null];
	$signature = $headers['HTTP_X_SIGNATURE_ED25519'];
	$timestamp = $headers['HTTP_X_SIGNATURE_TIMESTAMP'];
	if (!trim($signature, '0..9A..Fa..f') == '') return ['code' => 401, 'data' => null];
	$message = $timestamp . $data;
	$binarySignature = sodium_hex2bin($signature);
	$binaryKey = sodium_hex2bin($publicKey);
	if (!sodium_crypto_sign_verify_detached($binarySignature, $message, $binaryKey)) return ['code' => 401, 'data' => null];
	$data = json_decode($data, true);
	switch ($data['type']) {
		case 1: return ['code' => 200, 'data' => ['type' => 1]];
		case 2: return ['code' => 200, 'data' => ['type' => 2]];
		default: return ['code' => 400, 'data' => null];
	}
}

Теперь в настройках вашего приложения на вкладке “General Information” вы должны указать ссылку до вашего скрипта discord-commands.php в поле “Interactions Endpoint URL“. При сохранении настроек, Discord отправит проверочный запрос и если ваш обработчик ответит корректно, ссылка до него будет сохранена. В противном случае Discord выдаст ошибку.

Если вы заблаговременно добавили бот вашего приложения на свой сервер, а также успешно сохранили Interactions Endpoint URL, то теперь можете отправить команду /test на вашем сервере и в ответ вы получите сообщение, которое прописано в коде обработчика.

Все описанное в этой статье прекрасно работает на Discord сервере нашего MSS Project. Конечно я еще не рассказал про эмбеды и кнопки, но это тянет на отдельную статью и я постараюсь как нибудь написать ее. Надеюсь материал был вам полезен. Удачи!

]]>
https://alexell.ru/blog/php-wordpress/avtorizacziya-cherez-discord-na-php.html <![CDATA[Авторизация через Discord на PHP]]> Sat, 30 Sep 2023 05:27:00 +0000

Авторизация через Discord на PHP

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
авторизация через Discord

Если у вас есть проект, у которого есть и сайт и сервер в Discord, вам для сайта может понадобиться авторизация через Discord. Это крайне полезно в случаях, когда нужно получить и сохранить в БД Discord ID пользователя, чтобы в дальнейшем выполнять с ним действия через ваш бот. Например вы сможете автоматически назначать роль участнику сервера, согласно его роли на сайте и многое другое, о чем я рассказал в отдельной статье. А в этой статье я покажу, как без особого труда сделать такую авторизацию через Discord на PHP.

Для тестов создайте на вашем сайте отдельный php скрипт, через который будет происходить авторизация, например discord-connect.php. Далее нам понадобится создать приложение в Discord Developer Portal. Теперь зайдите в ваше приложение и перейдите в раздел Oauth2, скопируйте CLIENT ID, сгенерируйте и скопируйте CLIENT SECRET, пропишите их в переменные вашего скрипта:

<?php
$client_id = CLIENT_ID_HERE;
$client_secret = 'CLIENT_SECRET_HERE';

Ниже в разделе Redirects вашего приложения, вставьте полную ссылку до вашего discord-connect.php и сохраните изменения.

Добавим в скрипт переменные с необходимыми ссылками, которые потребует авторизация через Discord:

$script_url = 'https://example.com/discord-connect.php'; // ссылка до вашего скрипта
// ссылки oauth и api discord
$oauth_url = 'https://discord.com/api/oauth2/authorize';
$token_url = 'https://discord.com/api/oauth2/token';
$api_user_url = 'https://discord.com/api/users/@me';
$revoke_url = 'https://discord.com/api/oauth2/token/revoke';

Также добавим в наш скрипт функцию для api запросов в Discord:

function api_request($type, $url, $data = array(), $token = null) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $type);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $headers[] = 'Accept: application/json';
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    if ($token != null) $headers[] = 'Authorization: Bearer '.$token;
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    return json_decode(curl_exec($ch), true);
}

Авторизация через Discord будет работать следующим образом: при редиректе пользователя на этот скрипт, он будет перенаправляться на страницу авторизации Discord, после чего снова произойдет редирект на этот скрипт, но уже с кодом авторизации, который мы сразу же используем, чтобы получить информацию о пользователе через api. Ниже представлен основной код с комментариями.

if (isset($_GET['code'])) {
	// это условие сработает при редиректе от Discord после авторизации
	$code = htmlspecialchars($_GET['code']); // получаем код авторизации
	// готовим api запрос
	$data = [
		'client_id' => $client_id,
		'client_secret' => $client_secret,
		'grant_type' => 'authorization_code',
		'code' => $code,
		'redirect_uri' => $script_url,
	];
	$res = api_request('POST', $token_url, $data);
	$token = $res['access_token']; // получаем токен
	$user = api_request('GET', $api_user_url, [], $token); // запрашиваем данные о пользователе
	var_dump($user); // массив данных
	
	// например так мы получим user_id пользователя:
	$user_id = $user['id'];
	
	// далее вы можете записать этот user_id в БД, а также выполнять любые другие действия с данными
	
	// если вам нужно было только получить и сохранить user_id для бота, вы при желании можете отозвать токен авторизации:
	api_request('POST', $revoke_url, $data);
	
	// после всех действий вы можете перенаправить пользователя куда нужно, например в профиль:
	header('Location: /profile');
} else {
	// запускаем авторизацию через Discord
	$data = [
		'client_id' => $client_id,
		'redirect_uri' => $script_url,
		'response_type' => 'code',
		'scope' => 'identify'
	];
	header('Location: '.$oauth_url.'?'.http_build_query($data));
}

На этом статья об авторизации через Discord подошла к концу, ведь здесь все довольно просто. Желаю вам удачи с реализацией!

]]>
https://alexell.ru/blog/php-wordpress/sozdaem-bot-v-discord-na-php.html <![CDATA[Создаем бот в Discord на PHP]]> Wed, 23 Aug 2023 05:05:45 +0000

Создаем бот в Discord на PHP

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
бот в Discord

Иметь свой сервер в Discord уже не является чем-то необычным, сейчас сервера есть у всех – от простых руководителей гильдий, до авторов крупных игровых проектов. И не только игровых. У всех владельцев серверов в Discord есть одна необходимость – поддерживать порядок и безопасность на сервере, а также предоставлять участникам возможности, необходимые в рамках тематики. Сейчас в Discord существует множество ботов, которые могут модерировать сообщения, контролировать соблюдение правил участникам, включать музыку, выполнять различные команды и прочее. Но в этой статье мы остановимся на том, как сделать свой бот в Discord, который будет выполнять определенные действия на вашем сервере.

Создаем приложение в Discord Developer Portal

Перед написанием кода для бота, создадим приложение и бота в самом Discord. Для этого сначала переходим по этой ссылке, авторизуемся, нажимаем “New Application”. В появившемся окошке вы заполняете название вашего будущего приложения, ставите галочку соглашения и нажимаете “Create”. Дальше вы можете установить иконку для приложения и указать описание. Обратите внимание, что указанное здесь описание – станет описанием в профиле будущего бота. А вот иконка у бота отдельная, так что здесь ее можно пока не ставить. Далее переходим на вкладку “Bot”:

discord bot

Здесь вы увидите автоматически созданный юзернейм, который вы можете поменять на свой. Система новых юзернеймов пока не дошла до ботов, поэтому пока что юзернейм и имя бота, это одно и то же. Вы можете установить иконку для бота, а также выполнить некоторые настройки. Если ваш бот будет только для вашего сервера, снимите галочку “Public Bot”. Если функционал вашего бота будет связан с чтением сообщений в каких-либо чатах сервера и работой с пользователями, лучше сразу установите 2 галочки: “Server Members Intent” и “Message Content Intent”. После этого нажмите “Reset Token” и сохраните куда нибудь полученный токен, он нам понадобится чуть позже.

Добавляем бот на ваш сервер

Переходим на вкладку OAuth2 и выбираем URL Generator.

В “Scopes” выбираем только одно – bot. После выбора появится раздел “Bot Permissions”, там вы должны выбрать необходимые разрешения для своего бота, в соответствии с тем, что он в будущем должен будет делать. Если не уверены, что выбрать – выберите “Administrator”.

Настройка бота Discord

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

Подготавливаем библиотеку и PHP скрипт

Для создания ботов в Discord на PHP, я использую RestCord. С этой библиотекой все довольно таки просто и понятно. Для установки нам потребуется PHP 7+ и Composer. Выполните следующую команду, находясь в директории вашего проекта:

composer require restcord/restcord

Далее, создайте тестовый PHP скрипт и подключите скрипт автозагрузки:

<?php
require __DIR__ . '/vendor/autoload.php'; // измените путь в соответствии с вашим

Я написал “тестовый скрипт”, потому что считаю это наиболее удобным. Вы создаете тестовый скрипт, изучаете и пробуете что-то новое и только когда уже во всем разберетесь, интегрируете нововведения в ваши рабочие скрипты. Так обычно делаю я сам.

Затем создаем переменную с токеном, который получили:

$bot_token = 'вставьте токен сюда';

Дальше нам понадобится ID вашего Discord сервера. Чтобы видеть ID всего и вся в Discord, нужно включить режим разработчика в клиенте. Для этого переходим в Настройки => Расширенные и ставим галочку “Режим разработчика”. Теперь вы можете скопировать ID вашего сервера, просто нажав правой кнопкой мыши по его иконке в списке серверов и выбрав последний пункт “Копировать ID сервера”. Этот метод вы также сможете использовать для копирования ID пользователей, сообщений, чатов на вашем сервере и т.д.

Добавляем ID сервера в ваш скрипт:

$guild_id = ID_СЕРВЕРА;

Теперь подключаем библиотеку и создаем клиент:

use RestCord\DiscordClient;
$client = new DiscordClient(['token' => $bot_token]);

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

Возможности библиотеки

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

Пишем сообщение в какой-либо канал:

$client->channel->createMessage(['channel.id' => ID_канала, 'content' => 'текст сообщения']);

Редактируем уже существующее сообщение. Обратите внимание, что бот может редактировать только те сообщения, которые отправлял сам.

$client->channel->editMessage(['channel.id' => ID_канала, 'message.id' => ID_сообщения, 'content' => 'текст сообщения']);

Это одна из самых полезных возможностей. С помощью нее, можно например выводить статус вашего игрового сервера. Подготовили сообщение со статусом, отправили его один раз в чат, там скопировали ID и дальше скрипт висит в cron и раз в минуту обновляет статус вашего игрового сервера и изменяет одно сообщение, не засоряя чат.

Удаляем сообщение в канале:

$client->channel->deleteMessage(['channel.id' => ID_канала, 'message.id' => ID_сообщения]);

Получаем информацию об участнике сервера:

$discord_user = $client->guild->getGuildMember(['guild.id' => $guild_id, 'user.id' => ID_пользователя]);
var_dump($discord_user);

Обратите внимание, что здесь мы используем переменную с ID вашего сервера. По результатам, в $discord_user будет объект, из которого можно получить полезную информацию об участнике сервера, включая все его роли. Например роли находятся в $discord_user->roles и легко обходятся в цикле:

foreach ($dis_user->roles as $role) {
    // тут ваш код
}

Меняем ник участника на сервере:

$client->guild->modifyGuildMember(['guild.id' => $guild_id, 'user.id' => ID_пользователя, 'nick' => 'новый ник']);

Добавляем роль:

$client->guild->addGuildMemberRole(['guild.id' => $guild_id, 'user.id' => ID_пользователя, 'role.id' => ID_роли]);

ID ролей вы можете скопировать в разделе Настройки сервера => Роли (нажимаете ПКМ по названию роли и выбираете “Копировать ID роли”).

Удаляем роль:

$client->guild->removeGuildMemberRole(['guild.id' => $guild_id, 'user.id' => ID_пользователя, 'role.id' => ID_роли]);

Это были лишь некоторые возможности, которыми я пользуюсь сам. Если разберетесь с ними, то без проблем сможете опробовать все остальные возможности RestCord, которые описаны на сайте библиотеки.

]]>
https://alexell.ru/blog/ubuntu/ustanovka-i-ispolzovanie-composer-na-ubuntu.html <![CDATA[Установка и использование Composer на Ubuntu]]> Fri, 04 Aug 2023 10:25:20 +0000

Установка и использование Composer на Ubuntu

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Composer на Ubuntu

Composer – популярный менеджер пакетов (или менеджер зависимостей) PHP, с помощью которого процесс установки пакетов (или библиотек) для ваших сайтов и проектов значительно упрощается. При установке любого пакета, Composer проверяет его зависимости и скачивает их требуемые версии вместе с запрошенным вами пакетом. Работать с ним очень удобно и далее вы узнаете как установить Composer на Ubuntu и как правильно использовать его в ваших проектах.

Установка Composer на Ubuntu

Вы можете установить Composer из репозитория Ubuntu:

sudo apt install composer

Но в таком случае вы получите далеко не самую свежую его версию. Например на Ubuntu 22.04 будет установлена версия 2.2.6 (февраль 2022). Проблем с ее использованием у вас не будет, но если вы все же хотите получить последнюю версию Composer, то используйте его собственный установщик.

Сначала установим требуемые пакеты:

sudo apt install php-cli unzip

Затем загрузим установщик:

curl -sS https://getcomposer.org/installer -o composer-setup.php

Далее выполним установку Composer. Лучше устанавливать его глобально, чтобы все ваши пользователи могли использовать его.

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

После успешного завершения установки, выполним команду composer и убедимся, что он работает:

Запуск composer

Если вы видите примерно то же самое, значит установка завершена.

Локальная установка Composer

Если у вашего пользователя нет прав sudo или вы просто хотите иметь отдельный исполняемый модуль Composer в каждом вашем проекте, то вы можете загрузить установщик composer-setup.php как описано выше, затем создать исполняемый модуль следующим образом:

php composer-setup.php​​

Таким образом, в каталоге, где вы находитесь, будет создан файл composer.phar, который необходимо запускать с помощью команды php composer.phar

Но далее по тексту я буду использовать примеры с Composer, полноценно установленным в системе.

Использование Composer

Предположим, у вас есть какой-то проект или сайт и вы ходите использовать в нем библиотеку, для примера пусть это будет monolog – библиотека, позволяющая направлять ваши логи в файлы, сокеты, базы данных и различные веб-сервисы. Для этого вам потребуется файл composer.json, который указывает Composer, какие зависимости нужно загрузить для вашего проекта и какие именно версии пакетов использовать. Для стабильной работы проекта это делать крайне необходимо, поскольку так вы будете контролировать совместимость пакетов с вашей версией PHP и другими пакетами.

Итак, загружать пакеты необходимо в директории вашего проекта, т.е. composer.json и набор пакетов в каждом проекте будут разными и вы будете использовать их независимо друг от друга. Например, если у вас один сайт или проект работает на PHP 7, а другой на PHP 8, вы сможете использовать monolog в обоих проектах, просто у него будут разные версии.

Если вы планируете разработать свой пакет для загрузки его в общедоступный репозиторий Packagist в будущем или вы просто хотите, чтобы в вашем composer.json было название вашего проекта, то перед тем, как загружать пакет, выполните команду composer init

Это запустит генератор конфигурации, который в первую очередь предложит вам указать название вашего пакета. Все пакеты в Composer имеют названия в следующем формате: автор/пакет

Затем вы можете указать описание, авторов и прочее. В самом конце вы сможете выбрать зависимости для вашего пакета в интерактивном режиме, но я не буду на этом останавливаться. По завершению будет создан composer.json с данными вашего проекта:

{
    "name": "alex/test",
    "description": "Test description of project",
    "type": "project",
    "license": "MIT",
    "authors": [
        {
            "name": "Alex"
        }
    ],
    "require": {}
}

Загрузка пакетов

Теперь мы можем загрузить нужный нам пакет и делается это с помощью команды composer require

composer require monolog/monolog

Если вы не использовали composer init, то в процессе будет автоматически создан файл composer.json со следующим содержимым:

{
    "require": {
        "monolog/monolog": "^2.9"
    }
}

В противном случае в существующем composer.json будет обновлен раздел require.

Здесь вы можете заметить необычное указание версии: ^2.9. Символ перед версией указывает Composer, что для проекта можно загружать monolog >= 2.9 и < 3.0, проще говоря мы разрешаем использовать более новые версии только в пределах мажорной версии 2, например будет разрешено обновиться до 2.9.1 или 2.9.9, но запрещено обновляться до 3.0. Более подробно об ограничении версий вы можете узнать из документации Composer.

Помимо файла composer.json в директории вашего проекта появится папка vendor, где находятся файлы самих пакетов и их зависимостей. При переносе проекта на другой сервер или в другую среду, папку vendor не переносят, нужно переносить только composer.json. Соответственно, если вы разворачиваете проект, в котором уже есть composer.json, вам достаточно перейти в директорию проекта и выполнить команду composer install, которая автоматически установит все необходимые зависимости для проекта.

Обновление пакетов

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

composer update

Если будут найдены новые версии используемых библиотек, которые соответствуют требованиям и ограничениям вашего composer.json, Composer обновит их.

Вы также можете обновить отдельно один или несколько пакетов:

composer update monolog/monolog guzzlehttp/guzzle

Подключение пакетов

Для подключения пакетов непосредственно в ваш PHP скрипт, достаточно подключить скрипт автозагрузки, любезно предоставляемый Composer. Для проверки создадим файл test.php, подключим скрипт автозагрузки и будем использовать инструменты библиотеки monolog.

Подключаем скрипт автозагрузки:

require __DIR__ . '/vendor/autoload.php';

Если файл test.php находится в корневой директории вашего проекта, рядом с папкой vendor, этого будет достаточно. Если же нет – измените путь под ваши нужды.

Используем пространства имен, согласно инструкциям библиотеки:

use Monolog\Level;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

Создаем логгер для дебага в файл:

$logger = new Logger('test');
$logger->pushHandler(new StreamHandler(__DIR__.'/test.log', Level::Debug));

Добавляем записи в лог:

$logger->info('Test log entry');

Теперь можете запустить ваш скрипт. Если путь к скрипту автозагрузки был указан верно, не должно возникнуть никаких ошибок и вы увидите новый файл test.log с созданной вами записью.

На этом я завершаю статью. Удачи в использовании Composer!

]]>
https://alexell.ru/blog/php-wordpress/poluchaem-dannye-s-igrovogo-servera-na-php.html <![CDATA[Получаем данные с игрового сервера на PHP]]> Thu, 20 Jul 2023 04:29:48 +0000

Получаем данные с игрового сервера на PHP

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Получаем данные с игрового сервера

В этой статье речь пойдет об играх на движке Source и о том, как при помощи одной PHP библиотеки можно получать данные с игрового сервера. Это может понадобиться вам для вывода этих данных на вашем сайте. Для получения данных используется Steam query protocol, также известный как Source Engine Query protocol.

Если вы используете Composer, то сможете установить библиотеку всего одной командой:

composer require xpaw/php-source-query-class

Или самостоятельно добавить запись в composer.json вашего проекта:

"xpaw/php-source-query-class": "^2.1"

Но в этом случае, вам еще нужно будет выполнить команду composer install для загрузки пакета.

Далее в вашем PHP скрипте необходимо подключить скрипт автозагрузки :

<?php
require __DIR__ . '/vendor/autoload.php'; // измените путь в соответствии с вашим

Если вы не используете Composer, то можете просто скачать архив с библиотекой по ссылке, но на ваш сервер нужно загрузить лишь папку SourceQuery из архива. Предположим, что вы загрузили ее в директорию inc вашего проекта и теперь остается подключить библиотеку следующим образом:

<?php
require_once __DIR__ . '/inc/SourceQuery/bootstrap.php'; // измените путь в соответствии с вашим

Далее нам остается задействовать библиотеку, а также объявить константы или переменные с данными для подключения к вашему серверу. В моем примере это будут константы:

use xPaw\SourceQuery\SourceQuery;

// Данные сервера
define('SQ_SERVER_ADDR', 'IP сервера');
define('SQ_SERVER_PORT', 27015);
define('SQ_TIMEOUT', 1);
define('SQ_ENGINE', SourceQuery::SOURCE);

Примеры кода для получения данных с игрового сервера

Получаем основную информацию

$Query = new SourceQuery();
try {
    $Query->Connect(SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE);
    $server_info = $Query->GetInfo();
    $password = $server_info['Password']; // пароль сервера
    $map = $server_info['Map']; // карта на сервере
    $players = $server_info['Players']; // кол-во игроков онлайн
    $max_players = $server_info['MaxPlayers']; // макс игроков (слотов)

    if (empty($password)) {
        // здесь, при желании вы можете вывести на ваш сайт информацию, что сервер онлайн
    }
    else {
        // а здесь, что сервер под паролем
    }
}
catch(Exception $e) {
    // а здесь, что сервер оффлайн
}
finally {
    $Query->Disconnect();
}

Получаем список игроков онлайн

$Query = new SourceQuery();
try {
    $Query->Connect(SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE);
    $players = $Query->GetPlayers();
    var_dump($players); // выведет вам массив с игроками онлайн, дальше придумаете что с ним делать
}
catch(Exception $e) {}
finally {
    $Query->Disconnect();
}

В общем-то это всё.

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

$Query = new SourceQuery();
try {
    $Query->Connect(SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SQ_ENGINE);
    $Query->SetRconPassword('your_rcon_password');
    var_dump($Query->Rcon('say hello'));

}
catch(Exception $e) {
    echo $e->getMessage();
}
finally {
    $Query->Disconnect();
}
]]>
https://alexell.ru/blog/games/zapuskaem-vydelennyj-server-ets2-na-ubuntu.html <![CDATA[Запускаем выделенный сервер ETS2 на Ubuntu]]> Tue, 27 Jun 2023 08:00:00 +0000

Запускаем выделенный сервер ETS2 на Ubuntu

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Запускаем выделенный сервер ETS2 на Ubuntu

Как известно, в Euro Truck Simulator 2 появился режим конвоев, где можно создавать сессии для друзей и вместе выполнять доставки, общаясь в текстовом чате и с помощью рации по кнопке [x], наподобие TruckersMP. А в конце прошлого года, SCS Software выпустили ПО, с помощью которого можно запускать сессию конвоя отдельно от игры (выделенный сервер). Эта новость пришлась по вкусу многим игрокам и сейчас в списке сессий конвоя можно увидеть большое количество выделенных серверов. К сожалению, пока что лимит игроков в сессии – 8, но я надеюсь, что в будущем этот лимит поднимут. Ну а сегодня я расскажу как запустить выделенный сервер ETS2 на ОС семейства Linux, а именно на Ubuntu 22.04.

Рекомендую выполнять указанные далее действия от имени отдельного пользователя. В нашем примере это будет пользователь ets.

Устанавливаем SteamCMD

Устанавливаем SteamCMD прямо из репозитория, потому что он умеет обновлять сам себя, да и при таком варианте не придется вручную ставить 32-битные библиотеки:

sudo apt install steamcmd

Запускаем SteamCMD для обновления: steamcmd

После завершения обновления, можно выйти из него: quit

Устанавливаем выделенный сервер ETS2

Начинаем процесс установки в домашнем каталоге пользователя:

cd ~ && steamcmd +login anonymous +app_update 1948160 validate +quit

После завершения операции, перейдем в директорию, куда были установлены исполняемые и вспомогательные файлы сервера:

cd "Steam/steamapps/common/Euro Truck Simulator 2 Dedicated Server"

Далее нам нужно запустить сервер, чтобы он создал рабочую папку:

cd bin/linux_x64 && ./server_launch.sh

По итогу сервер выдаст ошибку *** ERROR *** : [MP] Error: Server packages file not found и самостоятельно завершится, не обращайте внимания.

Рабочая папка сервера была создана и теперь мы сделаем символьную ссылку к ней для удобства:

cd ~ && ln -s ".local/share/Euro Truck Simulator 2" ETS2_Server

Это значит что в домашней директории пользователя (в моем примере это /home/ets) появится ссылка ETS2_Server, которая будет вести на рабочую директорию сервера ETS2.

Выгружаем необходимые данные из Euro Truck Simulator 2

Для успешного запуска сервера, требуется 2 специальных файла (те самые server packages из текста ошибки). Эти файлы можно получить только из игры на вашем ПК.

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

Примечание: если ваш сервер будет работать с модами, то при обновлении какого-либо мода в Steam, вам будет необходимо снова генерировать файлы server packages из игры и импортировать на сервер.

Если вы определились с модами, загрузитесь в мир, откройте консоль по клавише [~] и отправьте команду export_server_packages

После выполнения команды, в вашей папке “Документы => Euro Truck Simulator 2” будут созданы файлы server_packages.dat и server_packages.sii. Их нужно загрузить на сервер, в директорию /home/ets/ETS2_Server (рядом с server_config.sii). Для обмена файлами можно использовать WinSCP.

Настраиваем выделенный сервер ETS2

Откройте файл /home/ets/ETS2_Server/server_config.sii в любом удобном для вас текстовом редакторе и внесите желаемые изменения (замените /home/ets на путь к домашней папке вашего пользователя или используйте ~/ETS2_Server/server_config.sii).

Описание параметров:

  • lobby_name – название сессии (макс. 63 символа)
  • description – описание сессии (макс. 63 символа)
  • welcome_message – приветственное сообщение сессии, которое будет приходить игроку в чат, после подключения (макс. 127 символов)

Обратите внимание: в этих параметрах можно использовать русские символы, но после запуска сервера, эти символы в конфиге будут заменены на шестнадцатеричные значения байтов UTF-8 символов. Также следует помнить, что сервера с русскими названиями в списке будут отображаться ниже всех серверов, имеющих английское название.

  • password – пароль сессии, если нужен (макс. 63 символа)
  • max_players – максимум игроков, пока лимит 8
  • server_logon_token – токен Steam авторизации, в целом не обязателен, но лучше сделайте и пропишите
    • токен получаем здесь, номер игры 227300 для ETS или 270880 для ATS
  • player_damage – столкновения между игроками
  • traffic – трафик
  • hide_in_company – скрывать игроков в зонах компаний
  • hide_colliding – скрывать столкнувшееся ТС после телепортации
  • force_speed_limiter – принудительное ограничение скорости
  • mods_optioning – позволить модам, помеченным как необязательные, быть действительно необязательными
  • timezones – принимает значения от 0 до 2
  • service_no_collision – выключить коллизии в зонах сервиса
  • in_menu_ghosting – столкновения при нахождении в меню
  • name_tags – показывать теги имен игроков над их ТС

Если вам не нужны модераторы в сессии, то оставьте значение параметра moderator_list по умолчанию. Если модераторы все же нужны, измените значение на 1 и добавьте на новой строке еще один параметр, в котором нужно указать SteamID64 модератора. Вы можете добавить несколько модераторов, увеличивая число в квадратных скобках. В итоге это может выглядеть вот так:

...
 moderator_list: 1
 moderator_list[0]: 76561198210303223
 moderator_list[1]: 76561197990364979
...

На этом работа с конфигом завершена. Вы можете экспериментировать с разными параметрами и настроить все на ваш вкус.

Теперь создадим скрипт автозапуска сервера ETS2:

nano ETS2_Server_Run.sh

вставляем следующее содержимое:

#!/bin/sh
cd "Steam/steamapps/common/Euro Truck Simulator 2 Dedicated Server/bin/linux_x64" && ./server_launch.sh &

Сохраняем при помощи [Ctrl]+[o] и выходим при помощи [Ctrl]+[x].

Затем добавляем права на запуск: sudo chmod +x ETS2_Server_Run.sh

Другие настройки

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

sudo iptables -A INPUT -p tcp -m multiport --dports 27015,27016 -j ACCEPT
sudo iptables -A INPUT -p udp -m multiport --dports 27015,27016 -j ACCEPT

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

По желанию, вы также можете добавить сервер в автозапуск, чтобы при перезагрузке вашего VPS, игровой сервер запускался автоматически. Для этого откройте crontab -e и добавьте следующую строку:

@reboot cd /home/ets && ./ETS2_Server_Run.sh >/dev/null 2>&1

Не забудьте заменить путь к домашнему каталогу на свой.

На этом все. Теперь вы можете перезагрузить ваш VPS и выделенный сервер ETS2 автоматически запустится. Или просто запустите сервер в фоновом режиме вручную:

cd ~ && ./ETS2_Server_Run.sh >/dev/null 2>&1 &

Когда сервер запущен в фоновом режиме, вы не видите его выводы в консоль, поэтому вам понадобятся логи сервера: ~/ETS2_Server/server.log.txt

]]>
https://alexell.ru/services/uni-tools-it-servisy-i-instrumenty.html <![CDATA[Uni-Tools – IT сервисы и инструменты]]> Thu, 01 Jun 2023 09:18:01 +0000

Uni-Tools – IT сервисы и инструменты

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Uni-Tools - IT сервисы и инструменты

Пришло время объявить о запуске Uni-Tools, но сначала немного предыстории. Посетители, читающие этот материал, наверняка знают, что у меня есть небольшой сайт с полезными сервисами и инструментами, а именно tools.alexell.ru. И я давно хотел превратить его в нечто большее, просто не хватало сил и времени. Но как только у меня появилась возможность, я погрузился в создание нового сайта, куда смогли бы переехать все имеющиеся инструменты, и где должны были появиться новые. Мне по прежнему хочется иметь место, где все пользователи, в том числе и я, смогут пользоваться различными полезными сервисами и инструментами из IT сферы. И новый сайт Uni-Tools предназначен именно для этой цели.

Проект я назвал Uni-Tools (Universal Tools). Возможно сейчас набор инструментов еще не в полной мере соответствует выбранному названию, но со временем это изменится, ведь я буду обновлять и расширять функционал. Сайт проекта получил новый дизайн, сохранив при этом прежние принципы минимализма и отсутствия отвлекающих элементов. Были решены некоторые проблемы с отображением элементов, например выпадающего списка с масками в IP калькуляторе, который теперь нормально скроллится и не выходит за пределы экрана. Адаптивность нового сайта стала более продвинутой, благодаря чему пользоваться сайтом на мобильных устройствах стало еще удобнее.

Возможности Uni-Tools

Теперь о самом интересном. На старом сайте был доступен следующий функционал:

  • Сервисы:
    • Все сайты на одном IP
    • Информация об IP или домене
    • Производитель по MAC
    • Местоположение по MAC
    • Оператор и регион по тел. номеру
    • Моб. оператор с учетом переноса номера
    • Проверка IP в спам базах
    • Проверка существования E-Mail
  • Инструменты:
    • IP калькулятор
    • Онлайн генератор паролей
    • Конвертер punycode для IDN

Все эти инструменты переехали на новый сайт, а также были доработаны по мере необходимости. Однако, на Uni-Tools появились и новые возможности:

  • Сервисы:
    • DNS записи домена
    • Whois домена
    • Информация о вашем IP и браузере
  • Инструменты:
    • Кодирование и хеширование строк: Base64, MD5, SHA-1, SHA-256, SHA-512
    • Минификация JavaScript
    • Обфускация JavaScript
    • Минификация CSS

В будущем я планирую запустить API некоторых имеющихся на Uni-Tools сервисов. Пока что я не знаю в каком виде это будет реализовано, а также не могу назвать ориентировочных сроков. На момент запуска Uni-Tools, API находится лишь на стадии задумки. Всему свое время.

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

Добро пожаловать на Uni-Tools!

]]>
https://alexell.ru/blog/php-wordpress/avtorizacziya-cherez-steam-na-php.html <![CDATA[Авторизация через Steam на PHP]]> Wed, 24 May 2023 12:55:50 +0000

Авторизация через Steam на PHP

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Авторизация через Steam

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

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

Итак, вам потребуется файл OpenID.php из библиотеки LightOpenID. Если ваш сайт работает на PHP 5-7, скачайте оригинальный файл. Если же ваш сайт работает на PHP 8, то скачайте мою версию файла с правками для PHP 8. Загрузите файл на ваш сервер в директорию, из которой будете его подключать. Рекомендую создать на сайте директорию inc или lib, в которую вы будете складывать все подключаемые вручную библиотеки, чтобы поддерживать порядок в файлах.

Далее, определитесь, откуда на вашем сайте будет производиться авторизация через Steam. Если у вас есть другие способы авторизации, вы можете просто создать там кнопку “Войти через Steam” со ссылкой на php скрипт, который мы сейчас будем создавать.

Итак, предположим, что мы создали скрипт steam_auth.php. Подключаем в него скачанную библиотеку:

require __DIR__ . '/inc/OpenID.php';

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

define('STEAM_REDIRECT', 'https://example.com/steam_auth.php');

Далее пишем код самой авторизации:

try {
	$openid = new LightOpenID(STEAM_REDIRECT); // здесь константа со ссылкой на этот скрипт
	if (!$openid->mode) {
		$openid->identity = 'http://steamcommunity.com/openid/?l=russian';
		header('Location: '.$openid->authUrl());
	}
	elseif ($openid->mode == 'cancel') {
		header('Location: /'); // здесь можно редиректить пользователя, если он начал процесс авторизации через steam, но отказался от него
	}
	elseif ($openid->validate()) {
		$id = $openid->identity;
		$sid64 = intval(preg_replace('/[^0-9]/', '', $id));
		
		// авторизация пройдена, у вас появился Steam_ID64 пользователя, теперь вы можете писать здесь любой ваш код 
		
		header('Location: /'); // после вашего кода нужно редиректнуть пользователя на нужную вам страницу сайта
	}
	else header('Location: /');
}
catch(ErrorException $e) {
	header('Location: /');
}

Как видите, ничего сложного. В том месте кода, где указано, что авторизация пройдена, вы можете начать с того, что пропишете echo $sid64; и протестируете авторизацию на вашем сайте. Просто перейдите по ссылке на созданный скрипт, после чего вас перенаправит в Steam, затем, после авторизации, вернет обратно на этот скрипт и вы должны увидеть в браузере ваш SteamID64 (новый SteamID вида 76561198210303223). Если все так – значит авторизация работает.

Получив SteamID64 после авторизации пользователя, вы можете делать что угодно, в зависимости от ваших целей. Приведу несколько примеров того что вы можете сделать:

  • завершить процесс авторизации, создав необходимые куки в браузере пользователя и запись о сессии в БД
  • обновить дату входа пользователя в БД, если вы храните эти даты
  • конвертировать SteamID64 в старый SteamID32 вида STEAM_0:1:12501874 (может понадобиться для игр на движке Source, таких как Couter Strike или Garry’s Mod)
  • обратиться к Steam Web API для получения аватарки пользователя, его никнейма и других сведений.
]]>
https://alexell.ru/blog/php-wordpress/polnoe-rukovodstvo-po-steam-web-api.html <![CDATA[Полное руководство по Steam Web API]]> Thu, 11 May 2023 12:43:33 +0000

Полное руководство по Steam Web API

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Используем Steam Web API

Если на вашем сайте есть авторизация через Steam или ваш сайт связан с БД игрового сервера, вам может понадобиться получить статус, никнейм, аватарку игрока или другие сведения. А может быть вы даже хотите выгружать публикации разработчиков игр прямо из Steam себе на сайт? В этой статье я покажу, как использовать все доступные на момент написания статьи методы Steam Web API.

Для начала вам необходимо получить API ключ. Вы можете сделать это здесь.

Далее в вашем скрипте PHP объявим константу с полученным API ключом:

define('STEAM_API_KEY', 'ваш ключ');

Получаем информацию о пользователе через Steam Web API

Для использования методов, вам потребуется SteamID 64 пользователя. Если в вашей БД SteamID хранятся в другом формате, вы можете конвертировать их, об этом я рассказал в этой статье.

Получаем основную информацию:

$sid64 = 76561198210303223;
$res = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=".STEAM_API_KEY."&steamids=$sid64");
$res = json_decode($res, true)['response']['players'][0];
$nick = $res['personaname'];
$profile = $res['profileurl'];
$avatar = $res['avatarfull']; // 184x184
//$avatar = $res['avatarmedium']; // 64x64
//$avatar = $res['avatar']; // 32x32
$status =  $res['personastate']; // 0 - не в сети, 1 - в сети, 2 - занят, 3 - нет дома, 4 - спит, 5 - ищет с кем обменяться, 6 - ищет с кем поиграть
$visibility = $res['communityvisibilitystate']; // 3 - открытый профиль
$logoff = date('d.m.Y H:i', $res['lastlogoff']); // был онлайн
$comments = $res['commentpermission']; // 1 - публичные комментарии разрешены, 0 - нет

Эти данные можно получить для всех пользователей, они являются публичными. Обратите внимание на переменную $visibility, если вы хотите получить больше данных. Если она равна 3, значит профиль открытый и вы сможете получить некоторые приватные данные, иначе приватные данные могут быть не видны. Они могут быть видны, если владелец API ключа находится в друзьях у пользователя с приватностью “только для друзей”. В любом случае, приватные параметры лучше проверять на существование, прежде чем к ним обращаться и в примерах ниже я буду использовать для этого тернарный оператор ??.

Что можно получить из приватных данных в открытых профилях:

$name = $res['realname'] ?? null;
$created = date('d.m.Y H:i', $res['timecreated']);
$group = $res['primaryclanid'] ?? null; // id основной группы в профиле
$game = $res['gameid'] ?? null; // id игры, если пользователь в игре
$game_server = $res['gameserverip'] ?? null; // ip и порт сервера для доступных онлайн игр, если пользователь в игре, иначе значение будет 0.0.0.0
$game_extra = $res['gameextrainfo'] ?? null; // название игры, если пользователь в игре
$country = $res['loccountrycode'] ?? null; // ISO-код страны пользователя, если указан
$state = $res['locstatecode'] ?? null; // код штата пользователя, если указан
$city_id = $res['loccityid'] ?? null; // код города пользователя, если указан (внутренняя нумерация Steam)

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

if ($country && $state && $city_id) {
    $cities = json_decode(file_get_contents("https://steamcommunity.com/actions/QueryLocations/$country/$state"), true);
    $i = array_search($city_id, array_column($cities, 'cityid'));
    $city = $cities[$i]['cityname'];
} else $city = 'N/A';

Получаем список друзей:

Это можно сделать только если у пользователя открытый профиль.

$sid64 = 76561198210303223;
$res = file_get_contents("http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=".STEAM_API_KEY."&steamid=$sid64&relationship=friend");
$res = json_decode($res, true)['friendslist']['friends'];
foreach ($res as $f) {
    echo $f['steamid'].PHP_EOL; // SteamID 64
    echo date('d.m.Y H:i', $f['friend_since']).PHP_EOL; // дата начала дружбы
}

Далее мы рассмотрим методы, связанные не только с пользователем, но и с его играми.

Получаем информацию о пользователе и его играх через Steam Web API

Получаем список достижений пользователя по конкретной игре:

$sid64 = 76561198210303223;
$app_id = 227300;
$res = file_get_contents("http://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/?key=".STEAM_API_KEY."&steamid=$sid64&appid=$app_id&l=russian");
$res = json_decode($res, true)['playerstats'];
$game = $res['gameName']; // название игры
foreach ($res['achievements'] as $a) {
    echo $a['apiname'].PHP_EOL; // техническое название
    echo $a['achieved'].PHP_EOL; // 1 - получено, 0 - нет
    echo date('d.m.Y H:i', $a['unlocktime']).PHP_EOL; // дата получения, только если achieved = 1
    echo $a['name'].PHP_EOL; // локализованное название
    echo $a['description'].PHP_EOL; // локализованное описание
}

Метод выдает весь список достижений в игре, показывая какие получены пользователем, а какие нет. Локализованное название и описание есть только при передаче параметра l=russian в запросе, но названия и описания могут быть на английском, если не имеют русской локализации, сверяйтесь с клиентом Steam.

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

Получить список всех игр пользователя:

$sid64 = 76561198210303223;
$res = file_get_contents("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=".STEAM_API_KEY."&steamid=$sid64&include_appinfo=1&include_played_free_games=1");
$res = json_decode($res, true)['response'];
$game = $res['game_count']; // Кол-во игр на аккаунте
foreach ($res['games'] as $g) {
    echo $g['appid'].PHP_EOL; // ID игры
    echo $g['name'].PHP_EOL; // название игры
    echo isset($g['playtime_2weeks']) ? $g['playtime_2weeks'].PHP_EOL : ''; // кол-во минут игры за последние 2 недели, если есть
    echo $g['playtime_forever'].PHP_EOL; // общее кол-во минут игры за все время (учет ведется с начала 2009)
    echo "http://media.steampowered.com/steamcommunity/public/images/apps/".$g['appid']."/". $g['img_icon_url'].".jpg".PHP_EOL; // ссылка на иконку игры
    if (isset($g['has_community_visible_stats'])) {
        echo "http://steamcommunity.com/profiles/$sid64/stats/".$g['appid'].PHP_EOL; ; // страница со статистикой пользователя для этой игры
    }
    echo $g['playtime_windows_forever'].PHP_EOL; // кол-во минут игры на платформе Windows
    echo $g['playtime_mac_forever'].PHP_EOL; // кол-во минут игры на платформе MacOS
    echo $g['playtime_linux_forever'].PHP_EOL; // кол-во минут игры на платформе Linux
    echo date('d.m.Y H:i', $g['rtime_last_played']).PHP_EOL; // дата последней игры
}

Метод работает только для общедоступных профилей. Вы можете по желанию убрать из запроса include_played_free_games=1, тогда в результатах не будет отображаться статистика бесплатных игр. Если же убрать из запроса include_appinfo=1, то в результатах не будет названий игр и хэша иконок.

Получаем список игр, сыгранных пользователем за последние 2 недели:

$sid64 = 76561198210303223;
$res = file_get_contents("http://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v0001/?key=".STEAM_API_KEY."&steamid=$sid64");
$res = json_decode($res, true)['response'];
$game = $res['total_count']; // кол-во игр за последние 2 недели
foreach ($res['games'] as $g) {
    echo $g['appid'].PHP_EOL; // ID игры
    echo $g['name'].PHP_EOL; // название игры
    echo $g['playtime_2weeks'].PHP_EOL; // кол-во минут игры за последние 2 недели
    echo $g['playtime_forever'].PHP_EOL; // общее кол-во минут игры за все время (учет ведется с начала 2009)
    echo "http://media.steampowered.com/steamcommunity/public/images/apps/".$g['appid']."/". $g['img_icon_url'].".jpg".PHP_EOL; // ссылка на иконку игры
    echo $g['playtime_windows_forever'].PHP_EOL; // кол-во минут игры на платформе Windows
    echo $g['playtime_mac_forever'].PHP_EOL; // кол-во минут игры на платформе MacOS
    echo $g['playtime_linux_forever'].PHP_EOL; // кол-во минут игры на платформе Linux
}

Метод работает только для общедоступных профилей. По желанию, вы можете добавить в запрос параметр count=число, чтобы ограничить кол-во игр в результатах.

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

Получаем информацию об играх через Steam Web API

Получаем новости игры или приложения:

$app_id = 227300;
$res = file_get_contents("http://api.steampowered.com/ISteamNews/GetNewsForApp/v0002/?appid=$app_id&count=5");
$res = json_decode($res, true)['appnews'];
foreach ($res['newsitems'] as $n) {
    echo $n['gid'].PHP_EOL; // id публикации
    echo $n['url'].PHP_EOL; // ссылка на публикацию в Steam
    echo $n['title'].PHP_EOL; // заголовок
    echo $n['author'].PHP_EOL; // автор
    echo $n['contents'].PHP_EOL; // контент
    echo date('d.m.Y H:i', $n['date']).PHP_EOL; // дата публикации
}

В указанном примере будут выведены 5 последний публикаций приложения. Вы можете убрать параметр count=5 из запроса или изменить под свои нужды. Также можно ограничивать длину контента каждой публикации, для этого передайте в запросе maxlength=число

Получаем глобальную статистику достижений по игре:

$app_id = 227300;
$res = file_get_contents("http://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v0002/?gameid=$app_id");
$res = json_decode($res, true)['achievementpercentages'];
foreach ($res['achievements'] as $a) {
    echo $a['name'].PHP_EOL; // техническое имя достижения
    echo '~'.round($a['percent']).'%'.PHP_EOL; // процент игроков, получивших достижение
}

На этом у меня все, надеюсь, что статья была для вас полезной.

]]>
https://alexell.ru/blog/php-wordpress/konvertiruem-steamid-i-steaminvite-na-php.html <![CDATA[Конвертируем SteamID и SteamInvite на PHP]]> Mon, 01 May 2023 08:10:59 +0000

Конвертируем SteamID и SteamInvite на PHP

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Конвертируем SteamID

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

Какие бывают виды SteamID пользователей

  • Steam 2 ID, его еще часто называют SteamID 32, выглядит так: STEAM_1:1:125018747
  • Steam 3 ID, выглядит так: [U:1:250037495]
  • SteamID, он же UInt64, он же SteamID 64, выглядит так: 76561198210303223 и по нему можно найти профиль пользователя, подставив в ссылку, например: https://steamcommunity.com/profiles/76561198210303223

Ссылки-приглашения

В Steam существуют ссылки-приглашения или быстрые приглашения, позволяющие мгновенно добавить в друзья того, кто перешел по этой ссылке. Выглядят они так: https://s.team/p/vvk-ggwk/FBWQQDJB. Есть также более длинная версия таких ссылок: https://steamcommunity.com/user/vvk-ggwk/FBWQQDJB

Последняя часть ссылки временная и может быть использована лишь 1 раз. А вот предпоследняя часть ссылки является закодированным в HEX вашим SteamID, поэтому ссылка без последней части всегда будет вести на ваш профиль. Например эта короткая ссылка ведет на мой профиль: https://s.team/p/vvk-ggwk

Эти ссылки вы можете создавать на этой странице. Там же вы найдете “код для друга”, который является не чем иным, как вашим AccountID.

Конвертируем SteamID и SteamInvite

Для этого нам потребуется библиотека в виде всего одного файла. Если у вас PHP 8, скачайте этот файл и загрузите к себе на сайт, например в папку inc или lib. Если же у вас PHP 7.3 или 7.4, скачайте более старую версию файла.

Подключаем библиотеку в ваш PHP скрипт:

require __DIR__ . '/inc/SteamID.php';

Создаем переменную с любым известным вам SteamID и экземпляр класса:

$sid = 'STEAM_1:1:125018747';
$s = new SteamID($sid);

Теперь мы можем получать конвертированные данные.

Получить Steam 2 ID (SteamID32):

echo $s->RenderSteam2();

Обратите внимание: эта функция вернет вам SteamID следующего вида: STEAM_1:1:125018747. Но в старых играх, таких как Garry’s Mod или Counter Strike, ваш SteamID может начинаться на STEAM_0, а не на STEAM_1 и корректный SteamID32, например для Garry’s Mod, в моем случае выглядит так: STEAM_0:1:125018747. Если вы столкнулись с той же проблемой, то для ее решения вам нужно лишь добавить одну строчку перед получением Steam2:

$s->SetAccountUniverse(0);
echo $s->RenderSteam2();

Получить Steam 3 ID:

echo $s->RenderSteam3();

Получить SteamID (SteamID 64):

echo $s->ConvertToUInt64();

Получить AccountID:

echo $s->GetAccountID();

Получить SteamInvite (короткую ссылку на профиль):

echo 'http://s.team/p/'.$s->RenderSteamInvite();

Получить код приглашения друга в CS: GO:

echo $s->RenderCsgoFriendCode();

Как видите, здесь все просто. Однако, я рекомендую оборачивать функции в try … catch во избежание проблем, особенно, если вы не контролируете ввод. Это может выглядеть примерно так:

$sid = 'STEAM_1:1:125018747';
$s = new SteamID($sid);
try {
	$sid32 = $s->RenderSteam2();
	// далее ваш код
}
catch(InvalidArgumentException $e) {
	// тут можно обработать ошибку
}

Если из всего перечисленного в статье вам, как и мне, требуется лишь получать SteamID32 и SteamID64, вы можете подключить библиотеку в файле ваших функций и создать там для себя 2 функции, которые будете дальше использовать на вашем сайте и в которые будете передавать известный SteamID:

function GetSteamID32($sid) {
	$s = new SteamID($sid);
	try {
		//$s->SetAccountUniverse(0); // для старых игр
		$sid32 = $s->RenderSteam2();
		return $sid32;
	}
	catch(InvalidArgumentException $e) {
		return false;
	}
}

function GetSteamID64($sid) {
	$s = new SteamID($sid);
	try {
		$sid64 = $s->ConvertToUInt64();
		return $sid64;
	}
	catch(InvalidArgumentException $e) {
		return false;
	}
}

Библиотека имеет и другие функции, ознакомиться с ними вы можете на GitHub проекта. Обратите внимание на VanityURLs.php, его функции способны парсить любой ввод, будь то SteamID или ссылка на профиль или что-то еще. Мне это не понадобилось, но может быть будет интересно вам.

]]>
https://alexell.ru/blog/various/zapusk-novogo-sajta-v-2023-godu.html <![CDATA[Запуск нового сайта в 2023 году]]> Fri, 14 Apr 2023 12:15:06 +0000

Запуск нового сайта в 2023 году

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
запуск нового сайта alexell.ru

Добро пожаловать на мой сайт.

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

Причины обновления сайта

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

Вторая причина, по которой обновление сайта было необходимо – переход на PHP 8. Тема (шаблон) на моем старом сайте давно не обновлялась и не работала корректно на PHP 8. То же касалось некоторых плагинов. Я настоятельно рекомендую всем владельцам сайтов, переходить на актуальную версию PHP 8+, предварительно убедившись, что ваш движок, шаблон, плагины, библиотеки и собственный PHP код будут работать на новой версии PHP.

Ну и третья причина является даже не причиной, а скорее параллельной задачей – я хотел отказаться от панели управления ISP Manager. Дело в том, что помимо оплаты нескольких моих VPS, мне приходилось платить еще 450р/мес за эту панель, хотя раньше, когда она была 5-й версии, я платил за нее всего пару сотен и у нее не было ограничения на кол-во доменов. Кроме того, за последние 2 года я немного освоился в работе с веб-сервером и файлами на Ubuntu без панели, поэтому решил что пора от нее отказаться.

Результаты

Когда работа над новым сайтом подходила к концу, я заказал новый VPS, установил там nginx, php8.1-fpm, mysql и приготовил конфигурацию nginx для моего сайта, благо есть статья по настройке nginx для wordpress. Позднее, я перенес новый сайт на новую VPS, прописал себе статичный DNS и смог увидеть сайт уже на нормальном домене.

Сразу можно заметить, что сайт стал работать в разы быстрее, нежели на предыдущей конфигурации nginx+apache-mpm-itk, поэтому если у вас есть возможность – переводите ваш сайт на WordPress на конфигурацию nginx+php-fpm и вы получите максимальную производительность.

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

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

]]>
https://alexell.ru/blog/ubuntu/avtomaticheskij-perezapusk-kontejnerov-docker.html <![CDATA[Автоматический перезапуск контейнеров Docker]]> Fri, 10 Feb 2023 09:31:00 +0000

Автоматический перезапуск контейнеров Docker

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
перезапуск контейнеров docker

Если вы уже освоились в Docker и начали пользоваться различными существующими образами и создавать контейнеры для своих нужд, то наверняка заметили, что контейнеры не перезапускаются сами по себе после перезагрузки системы и пришли к такому же вопросу, которым не так давно задавался и я: “Как сделать так, чтобы контейнер работал постоянно?“. В этой статье мы рассмотрим автоматический перезапуск контейнеров средствами Docker, а также дополнительный способ контроля их работы с помощью простенького скрипта и планировщика Cron.

Перезапуск контейнеров средствами Docker

Docker предоставляет политики перезапуска контейнеров, но по умолчанию контейнеры не перезапускаются даже при перезагрузке системы (перезапуске демона Docker). Политику перезапуска можно указать с помощью флага --restart и он может принимать одно из следующих значений:

  • no – не перезапускать контейнер автоматически (значение по умолчанию)
  • on-failure[:макс-попыток] – перезапускать контейнер автоматически, если он завершается с кодом, отличным от нуля (то есть с ошибкой). По желанию, здесь можно также указать максимальное кол-во попыток перезапуска контейнера демоном, указывается через двоеточие.
  • always – всегда перезапускать контейнер. Однако контейнер, остановленный вручную (через docker stop), будет перезапущен автоматически только после перезагрузки системы (перезапуска демона Docker)
  • unless-stopped – то же самое что и always, за исключением того, что контейнер, остановленный вручную, не будет перезапущен даже после перезапуска демона Docker.

Приведу несколько примеров запуска контейнера с использованием этого флага.

Предположим, что у вас уже есть загруженные образы, которые вы хотите использовать и вам известен ID или имя образа, для примера пусть это будет httpd. О том, как загружать образы и запускать контейнеры, я рассказал в этой статье.

Первый запуск контейнера с помощью docker run:

docker run --restart on-failure:5 httpd

С помощью этой команды будет создан и запущен контейнер из образа httpd, который будет автоматически перезапускаться, если завершится с ошибкой. Попыток перезапуска будет 5.

docker run --restart unless-stopped httpd

С помощью этой команды будет создан и запущен контейнер из образа httpd, который будет перезапускаться автоматически, но не будет перезапускаться, если был остановлен вручную с помощью docker stop. Как по мне – это наиболее подходящий вариант.

Обновление существующих контейнеров:

Если контейнер из образа у вас уже создан и допустим вы указали ему имя httpd, то вы можете добавить к нему политику перезапуска с помощью команды docker update:

docker update --restart unless-stopped httpd

Иногда в интернете пишут, что --restart перезапускает контейнеры только после перезагрузки системы. Но это не правда. В помощью этой политики контейнеры перезапускаются автоматически сразу после падения и конечно после перезагрузки системы тоже.

Контроль и перезапуск контейнера с помощью скрипта

Если у вас возникнут проблемы с использованием политик перезапуска контейнеров, которые предоставляет Docker или вы хотите сделать дополнительную проверку помимо этих политик, вы можете воспользоваться следующим способом:

Создайте скрипт, например httpd_check.sh со следующим содержимым:

#!/bin/bash
if(( $(docker ps --filter name=httpd --filter status=running --filter status=restarting | wc -l) == 1)) 
then
    docker start httpd
    exit 0
fi

Этот скрипт будет искать контейнер httpd, который не находится в статусе running (up) или restarting и выполнять для него обычный запуск с помощью docker start.

Добавляем права на запуск:

sudo chmod +x check.sh

Вам останется только добавить в cron примерно следующее:

* * * * * alex cd /home/alex && ./httpd_check.sh

Только замените имя пользователя и путь на ваши. На этом у меня все. Удачи!

]]>
https://alexell.ru/blog/ubuntu/ustanovka-i-ispolzovanie-docker-na-ubuntu-18-20-22.html <![CDATA[Установка и использование Docker на Ubuntu 18, 20, 22]]> Sat, 21 Jan 2023 10:57:00 +0000

Установка и использование Docker на Ubuntu 18, 20, 22

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Docker на Ubuntu

Что такое Docker?

Docker – это платформа, позволяющая создавать, распространять и управлять специальными контейнерами, которые могут содержать в себе определенный набор ПО или даже целую ОС, но запускаются в изолированной среде, что позволяет безопасно запускать приложения без риска навредить основной ОС в случае ошибки или сбоя приложения. Эта система чем-то напоминает виртуализацию, но контейнеры не виртуализируют оборудование, поэтому куда менее требовательны к ресурсам.

Личный опыт

Я познакомился с Docker, когда мне нужно было протестировать одно приложение с гитхаба, написанное на Python с использованием кучи библиотек. Мне не хотелось устанавливать столько всего себе в ОС и тут в описании я увидел упоминание Docker. Разобравшись в теме, я понял, что Docker дает возможность запустить это приложение из готового образа, внутри которого уже содержится нужная версия Python и всех зависимостей приложения, что гарантирует 100% работоспособность приложения и позволит в будущем легко удалить контейнер и образ, не оставляя следов в системе. Хочу добавить, что на гитхабе вы можете встретить как приложения, образы для которых официально распространяются через Docker Hub и могут быть установлены с помощью всего одной команды, так и приложения, чьи образы, которые нужно компилировать самому (об этом позже). Существуют готовые образы Docker для множества известных приложений, например, можно в пару кликов развернуть веб-сервер с mysql или vpn сервер. Docker значительно упрощает развертывание сложных приложений.

Устанавливаем Docker на Ubuntu

Чтобы использовать самые свежие версии Docker, я рекомендую устанавливать его из его собственного репозитория. Процесс подключения и установки будет описан для Ubuntu с указанием отдельных команд для разных версий, если они отличаются.

Обновляем кэш репозиториев:

sudo apt update

Устанавливаем пакеты, позволяющие apt загружать пакеты по защищенному протоколу HTTPS:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Добавляем в свою ОС GPG ключ Docker:

На Ubuntu 18 и 20:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

На Ubuntu 22:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Добавляем в список источников репозиторий Docker:

На Ubuntu 18:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

На Ubuntu 20:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

На Ubuntu 22:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновляем базу репозиториев, чтобы получить информацию о пакетах Docker из нового источника:

sudo apt update

Устанавливаем Docker:

sudo apt install docker-ce

Использование Docker

Проверить статус процесса Docker можно следующей командой:

sudo systemctl status docker

Если все хорошо, вы должны увидеть примерно следующее:

Статус процесса Docker

По умолчанию, для использования команды docker требуются права sudo. Вы можете избежать этого, если добавите своего пользователя в группу docker. Например, ваш пользователь “alex”, тогда добавить его в группу docker можно так:

sudo usermod -aG docker alex

После этого вам придется перелогиниться в системе.

Если вы введете команду docker, вы получите подсказку о доступных командах. Для каждой команды можно ввести docker COMMAND --help чтобы увидеть список доступных аргументов.

Работа с образами Docker:

Список установленных образов:

docker images

Это образы, которые вы уже загрузили и из которых можете создавать контейнеры.

Вы также можете искать образы в Docker Hub прямо в консоли, например поищем Apache:

docker search apache

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

Загружать образы нужно командой docker pull. Пример для официального образа Apache:

docker pull httpd

Запускать контейнеры из образов можно по как по IMAGE ID, так и по названию образа (REPOSITORY), которые указаны в списке образов по команде docker images.

Небольшие open-source проекты могут не распространять готовый образ в Docker Hub, но могут иметь Dockerfile, который позволит вам создать образ. Для этого вам потребуется клонировать репозиторий к себе и перейти в папку репозитория, например:

git clone https://github.com/test/test && cd test

Затем останется только собрать образ с помощью команды:

docker build -t test .

Обычно инструкции по сборке образа присутствуют в описаниях репозиториев.

Удалить любой образ можно с помощью следующей команды с указанием ID образа:

docker rmi f75571d82318

Работа с контейнерами Docker:

Вы можете создать контейнер из образа и он будет сразу запущен:

docker run f75571d82318

Список работающих в данный момент контейнеров можно увидеть по команде:

docker ps

Также можно посмотреть список всех контейнеров, включая не активные:

docker ps -a

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

docker run --name apache f75571d82318

Если у вас интерактивный контейнер, т.е. позволяющий выполнять команды внутри него, то вы можете запустить его с ключами -it, включающими интерактивный режим:

docker run --name apache -it f75571d82318

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

root@e2f464551004:/#

Если у вас уже запущен контейнер, вы все равно можете попасть внутрь, для этого используйте команду:

docker exec -it apache /bin/bash

Здесь я использовал имя контейнера, но если вы не указывали его при запуске, используйте ID контейнера. Это касается и других команд с обращением к контейнерам далее по тексту.

Обратите внимание, что изменения, которые вы вносите в интерактивном режиме, распространяются только на контейнер, в котором вы это делаете. На его исходный образ это не влияет.

Если вы создали контейнер из образа с помощью docker run и потом он был остановлен вами или завершил свою работу, то запускать его снова нужно будет уже другой командой:

docker start apache

Остановить контейнер можно с помощью команды:

docker stop apache

Контейнеры также можно перезапускать:

docker restart apache

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

docker rm apache

Обратите внимание, это удалит контейнер, но образ, из которого он был создан, все еще будет находиться в вашей системе.

Если ваш контейнер должен выполнить какую-то задачу, после чего больше не понадобится, вы можете запустить его из образа с ключем --rm:

docker run --rm test

Тогда контейнер будет создан из образа, запущен и будет автоматически удален, когда завершит свою задачу.

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

Пример: вы находитесь в директории /home/alex/project1 (будем считать ее рабочей директорией) и создали в ней директорию reports для получения отчетов из контейнера test. Также вы узнали, что отчеты внутри контейнера складываются в директорию /app/reports. Тогда вам остается лишь запустить контейнер, добавив специальный аргумент -v с указанием сначала директории в вашей ОС, затем директории внутри контейнера (через двоеточие):

docker start -v "$PWD/reports:/app/reports" test

Таким образом, контейнер test выполнит свою работу и отчет, который он обычно сохраняет внутри себя в /app/reports, попадет в вашу основную ОС, в директорию /home/alex/project1/reports

Этот метод я постоянно использую в своих проектах и это работает как для существующих контейнеров, запускаемых с помощью docker start, так и для контейнеров, создаваемых из образа через docker run.

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

docker run --rm -v "$PWD/reports:/app/reports" test "google.com" --proxy "5.5.5.5.5:3128" --pdf
]]>
https://alexell.ru/blog/games/kak-popolnit-steam-v-2023-godu.html <![CDATA[Как пополнить Steam в 2023 году]]> Mon, 02 Jan 2023 12:00:00 +0000

Как пополнить Steam в 2023 году

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Как пополнить Steam в 2023

Приветствую всех посетителей и поздравляю вас с наступившим Новым 2023 годом! В этой статье я расскажу как жителям России пополнять Steam и покупать игры с учетом всех наложенных на Россию ограничений.

Пополнение кошелька Steam

Сразу скажу – нет никаких проблем с пополнением кошелька Steam. Просто теперь приходится делать это не внутри Steam, а через другие сервисы. На текущий момент у меня есть 3 проверенных способа как пополнить Steam. Расскажу о каждом по порядку.

Пополнить Steam через QIWI

Вы наверняка слышали что в кошельке QIWI в разделе игр можно было выбрать Steam (Казахстан) и пополнить свой Steam (не важно, что ваш Steam в России). Но вы наверное также слышали, что эту возможность из QIWI убрали. Однако, это не совсем так. Есть два способа, как это сделать:

Первый способ.

Вам нужно пройти идентификацию и получить статус кошелька Профессиональный.

QIWI идентификация

После этого, у вас сразу же снова появится Steam (Казахстан) в разделе Игры. Разумеется, помимо того, что у вас существенно вырастут лимиты кошелька.

QIWI пополнение Steam

Так выглядит форма оплаты Steam через QIWI.

Этим способом воспользовался и я сам. Статус Профессиональный получить легко – я просто сходил с паспортом и СНИЛС в офис QIWI, заполнил анкету, через пару часов мне пришло СМС и я получил свой новый статус. Идентификация делается не только в офисе QIWI, а еще и у партнеров. Вся информация об этом на сайте QIWI.

ВНИМАНИЕ: в данный момент при попытке пополнения Steam (Казахстан) возникает ошибка, так что этот метод пока не работает.

Второй способ.

Тут вам никуда идти не придется. Вам нужно зайти в QIWI, открыть счет в тенге (KZT) и самое главное – сделать его основным. Затем вам нужно пополнить этот счет на сумму, которую хотите направить в Steam. Обязательно указывайте сумму с запасом, потому что конвертация валют отнимет какую-то часть. После этого, в разделе Игры снова появится Steam (Казахстан) и вы сможете совершить платеж.

Пополнить Steam через WebMoney

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

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

WebMoney WMZ

Нажимаем Пополнить кошелек.

Webmoney пополнение

Методов пополнения достаточно, вы без проблем сможете пополнить свой WMZ кошелек с вашей рублевой банковской карты. Здесь тоже пополняйте с запасом, но не только на конвертацию, а еще и на комиссию.

Далее идем в Платежи -> Игры и сверху в популярном видим “Steam пополнение в USD”.

Webmoney пополнение Steam

Здесь все почти так же как в QIWI. Указываете ваш логин Steam, сумму в USD, но сервис берет комиссию в 4%, как видно на скриншоте. Я часто пополнял этим способом, деньги поступают в Steam в течение пары минут.

Пополнить Steam через посредников

Нельзя также не упомянуть возможность пополнения Steam через посредников. Для этого я посоветую вам всего одно место – старый добрый сервис Plati.

Plati.market - пополнение Steam

Заходим в раздел пополнений Steam и выбираем продавца из первых в списке, которые подсвечены. С ними редко бывают проблемы. Дальше просто читайте внимательно условия продавцов и можете пополнять. Обратите внимание, что после оплаты вам может придти специальный код, который нужно отправить продавцу в форме на сайте, сразу после оплаты. Об этом будет написано, просто внимательно читайте надписи. Так было, по крайней мере когда я в последний раз пополнял здесь, может быть сейчас процесс стал полностью автоматизированным. В любом случае, посредники берут существенную комиссию, поэтому будьте внимательны, а еще лучше – пользуйтесь способами с QIWI или WebMoney.

Покупка кодов активации

Ну и напоследок, добавлю, что игры можно покупать “на стороне”. Вы оплачиваете игру по цене продавца и получаете код активации для Steam (при покупке обязательно обращайте внимание, что продажа идет именно активации для Steam). Дальше активируете игру в Steam и все готово – игра в вашей библиотеке. Но тут надо понимать, что ключами в Steam торгуют налево и направо и по большей части это лохотрон или рулетка. Если уж выбирать этот способ, то нужно выбирать проверенных продавцов и я перечислю их ниже:

  • STEAMBUY – хороший продавец с большим каталогом. Оплачивать можно картами, СПБ, QIWI, WebMoney и даже скинами Steam.
  • VK Games Store – площадка внутри VK довольно большим каталогом. Оплата будет через VK Pay по номеру карты + получите кешбек.

У каждого из продавцов я купил по одной игре + мои знакомые у них тоже покупали, так что надежность гарантирую. Также хочу отметить, что у таких продавцов иногда можно купить код активации для игры, которая вообще недоступна в магазине Steam для России, что позволит вам обойти ограничения. Правда ключи для таких игр у продавцов заканчиваются максимально быстро.

]]>
https://alexell.ru/blog/mikrotik/nastraivaem-podklyuchenie-wireguard-na-mikrotik.html <![CDATA[Настраиваем подключение WireGuard на MikroTik]]> Mon, 12 Dec 2022 09:15:22 +0000

Настраиваем подключение WireGuard на MikroTik

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
WireGuard на Mikrotik

В этой статье вы узнаете как быстро настроить WireGuard на MikroTik. Сразу хочу сказать, что такая возможность появилась только в RouterOS 7, поэтому если вы еще не обновились до нее, самое время это сделать.

Для некоторых, вопрос о переходе на RouterOS 7 может быть спорным. Если вы сомневаетесь, что после обновления у вас все будет работать нормально, лучше проведите предварительное тестирование. Лично у меня на MikroTik CCR обновление прошло спокойно, тунели, скрипты и все прочее работает без сбоев и проблем.

Итак, предполагается, что у вас уже есть WireGuard сервер. Процесс установки WireGuard на Ubuntu я описал в этой статье. Вам необходим конфиг подключения для клиента. Он создается вместе с QR-кодом при создании нового клиента WireGuard и имеет примерно такой вид:

[Interface]
PrivateKey = oLANp72uJp2W2uhyd5WmJWqZheYMXGHQfJY/SNbE6mU=
Address = 10.66.66.2/32,fd42:42:42::2/128
DNS = 1.1.1.1,1.0.0.1

[Peer]
PublicKey = pHqTm8RdG76P3W65lM7oN9HiggJrrC88r/lezCR0Ak8=
PresharedKey = gexI+cOQCKaPFl9eH26ebCLSO5ZfaRYEXrT1TPWNV+c=
Endpoint = 5.5.5.5:62085
AllowedIPs = 0.0.0.0/0,::/0

Здесь 5.5.5.5 – вымышленный IP сервера WireGuard.

Приступаем к настройке WireGuard на MikroTik.

Настройка WireGuard на MikroTik

Открываем раздел WireGuard и добавляем новый интерфейс. Вписываем любое название интерфейса, к примеру vpn и вставляем Private Key из раздела [Interface] конфига клиента WireGuard, т.е. в нашем примере это oLANp72uJp2W2uhyd5WmJWqZheYMXGHQfJY/SNbE6mU=

ВНИМАНИЕ: Private Key нужно вставлять сразу при создании интерфейса, нельзя делать этого потом, иначе у интерфейса будет сгенерирован не тот Public Key и туннель работать не будет.

Затем в IP->Addresses создаем ip адрес для интерфейса, все данные есть в разделе [Interface] конфига клиента.

Настройка WireGuard на MikroTik

Затем включаем маскарадинг для интерфейса. Заходим в IP->Firewall->NAT, добавляем правило:

  • Chain: srcnat
  • Out interface: vpn
  • Action: masquerade

Затем создаем пира в WireGuard->Peers и прописываем ему настройки из раздела [Peer] конфига клиента WireGuard.

Настройка WireGuard на MikroTik

Если ваш микротик находится за NAT, можно указать Persistent Keepalive секунд на 20-25.

На этом настройка завершена.

Список команд для терминала для тех же действий:

/interface wireguard add name=vpn private-key="oLANp72uJp2W2uhyd5WmJWqZheYMXGHQfJY/SNbE6mU="
/ip address add address=10.66.66.2/24 interface=vpn network=10.66.66.0
/ip firewall nat add action=masquerade chain=srcnat out-interface=vpn
/interface wireguard peers add allowed-address=0.0.0.0/0 endpoint-address=5.5.5.5 endpoint-port=62085 interface=vpn public-key="pHqTm8RdG76P3W65lM7oN9HiggJrrC88r/lezCR0Ak8=" preshared-key="gexI+cOQCKaPFl9eH26ebCLSO5ZfaRYEXrT1TPWNV+c="

Только не забудьте заменить параметры на свои.

Дальше вам остается только решить вопрос с маршрутизацией. Вы можете завернуть весь трафик в сторону нового интерфейса в IP->Routes или заворачивать определенный трафик по маркировке. Если вы хотите узнать, как маршрутизировать через vpn определенные сайты или подсети, я пару лет назад писал об этом в статье про обход блокировки.

]]>
https://alexell.ru/blog/ubuntu/bystraya-ustanovka-servera-wireguard-na-ubuntu-22-04.html <![CDATA[Быстрая установка сервера WireGuard на Ubuntu 22.04]]> Thu, 08 Dec 2022 08:36:50 +0000

Быстрая установка сервера WireGuard на Ubuntu 22.04

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
WireGuard на Ubuntu

Коротко о WireGuard

Это относительно новый протокол VPN туннелирования, работающий через UDP, использующий современные криптографические средства и обладающий высокой производительностью на ОС семейства Linux. Быстрое и надежное решение для соединения двух или нескольких точек между собой.

Установка на Ubuntu

Для сервера WireGuard достаточно недорогой виртуальной машины, если мы говорим о домашнем использовании туннеля. Недорогие VPS в РФ, Франции, Нидерландах и Канаде можно найти здесь.

Мы будем использовать скрипт автоматизированной установки и настройки и это займет лишь пару минут.

Обновляем кэш репозиториев:

sudo apt update

Переходим в любой удобный вам каталог, например в домашний: cd

Скачиваем скрипт установки:

curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh

В описании скрипта сказано, что он подходит для Ubuntu, Debian, Fedora и других ОС семейства Linux. Я производил установку на Ubuntu 22.04

Устанавливаем права на запуск и запускаем скрипт:

sudo chmod +x wireguard-install.sh && sudo ./wireguard-install.sh

В первую очередь, скрипт попросит у вас указать данные для настройки: ip, порт, dns и прочее. Разумеется он предлагает значения по умолчанию для всех настроек, их можно не менять, если вам это не нужно. При этом порт каждый раз предлагается рандомный, я запускал скрипт на разных машинах и убедился в этом. На скриншоте ниже вы можете увидеть что спрашивает и предлагает скрипт:

WireGuard установка на Ubuntu

Далее вы нажимаете любую клавишу и начинается процесс установки, по завершению которого, скрипт запросит у вас данные для первого клиента: имя клиента и ip, который можно оставить по умолчанию, скрипт сам предлагает их по порядку, т.е. для первого клиента 10.66.66.2, для второго 10.66.66.3 и так далее. По завершению будет создана конфигурация для клиента, а вы получите QR-код прямо в консоли:

WireGuard добавление клиента

Эта же конфигурация в текстовом виде будет находиться в той директории, из которой вы запускали скрипт. Например в моем случае, там появился файл wg0-client-test.conf.

Теперь, если вы используете firewall, вам необходимо открыть указанный при настройке сервера UDP порт, в нашем случае это 55852:

sudo iptables -A INPUT -p udp --dport 55852 -j ACCEPT

Или если у вас UWF:

sudo ufw allow 55852/udp

На этом установка завершена.

Проверить статус сервиса можно следующей командой:

sudo systemctl status wg-quick@wg0

При повторном запуске скрипта вы сможете добавлять и удалять пользователей, а также удалить сервер WireGuard:

WireGuard управление

Подключение клиентов

Вы сможете подключаться к вашему серверу WireGuard с любых устройств. Например, на ПК с Windows вы скачиваете приложение, запускаете, нажимаете “Импорт туннелей из файла” и выбираете тот самый файл конфигурации wg0-client-test.conf, предварительно скачав его с вашей виртуальной машины. Теперь можно подключаться:

WireGuard windows

На iPhone устанавливаете приложение WireGuard из AppStore, запускаете и через него можете сканировать тот QR-код или импортировать конфигурацию в виде файла:

WireGuard iphone

К серверу WireGuard также можно подключить роутеры MikroTik, но только на новой прошивке RouterOS 7. Об этом я рассказал в этой статье.

]]>
https://alexell.ru/blog/php-wordpress/plavnoe-uvelichenie-kartinki-po-kliku-v-wordpress.html <![CDATA[Плавное увеличение картинки в WordPress 6]]> Wed, 16 Nov 2022 09:34:13 +0000

Плавное увеличение картинки в WordPress 6

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
увеличение картинки в WordPress

Если у вас есть сайт на WordPress, то вы наверняка хотите знать, как реализовать плавное увеличение изображений по клику в ваших постах (эффект Highslide). В первую очередь, хочу обратить ваше внимание на то, что каким бы способом вы не решили воспользоваться, у них есть один общий знаменатель: все картинки в ваших постах, которые должны увеличиваться по клику, должны иметь ссылку на медиафайл. Для этого нажмите в редакторе на вставленную картинку, нажмите на иконку ссылки в панели инструментов блока и выберите “Медиафайл”, как показано на скриншоте ниже.

WordPress ссылка на медаифайл

Если у всех необходимых картинок уже включены ссылки на медиафайл, можно перейти к следующему шагу – выбору плагина. Плагинов для этой цели достаточно, например:

  • FancyBox for WordPress
  • Lightbox & Modal Popup WordPress Plugin – FooBox
  • WP jQuery Lightbox
  • и другие.

При выборе плагина нужно обращать не только на его функционал, но также на совместимость с вашей версией WordPress и датой последнего обновления, по которой можно судить, поддерживается ли плагин его автором. Если у вас последняя на момент написания статьи версия WordPress 6.1.1, я рекомендую использовать плагины, поддерживающие версию не ниже 6.0.3. Плагины, которые не обновлялись больше года лучше не использовать.

Для увеличения картинок в WordPress 6 я предлагаю рассмотреть плагин Easy FancyBox. У него есть несколько преимуществ:

  • После установки и активации, можно ничего больше не делать – все картинки со ссылкой на медиафайл уже увеличиваются по клику
  • Если вас все же интересуют настройки плагина, то они переведены на русский язык и находятся в разделе Настройки->Медиафайлы
  • Есть возможность изменения цвета и размера рамки, параметров затемнения и анимации и других параметров
  • Есть возможность открывать в модальном окне не только картинки, но и видео YouTube/Vimeo, PDF, SVG и др.
  • Поддерживаются галереи WordPress, переключение картинок можно делать как стрелками клавиатуры, так и кнопками-стрелками в модальном окне
  • Полностью адаптивное модальное окно, т.е. на мобильных устройствах все отображается хорошо

Рассмотрим некоторые настройки по умолчанию, которые я рекомендую изменить.

По умолчанию, для закрытия модального окна с увеличенной картинкой, нужно кликнуть на затемненную область вокруг картинки, на анимированный крестик в правом верхнем углу модального окна или нажать [Esc] на клавиатуре. Рекомендую включить в настройках галочку Закрывать FancyBox по клику на содержимом. Тогда вы сможете закрыть модальное окно фактически кликом в любое место.

По умолчанию, поверх увеличенной картинки выводится заголовок title или текст из alt. При желании, это можно отключить или изменить расположение заголовка в этой секции настроек:

wordpress easy fancybox

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

Или просто уменьшить/увеличить рамку в этом же параметре, а также изменить ее цвет (чуть выше в настройках).

Демонстрация:

Вы можете увидеть демонстрацию работы плагина здесь, на моем сайте. Увеличение изображений по клику здесь реализовано именно при помощи Easy FancyBox (анимация по умолчанию, рамка и заголовки отключены).

]]>
https://alexell.ru/blog/windows-internet/github-desktop-podpisyvaem-kommity-verified.html <![CDATA[GitHub Desktop – подписываем коммиты (Verified)]]> Tue, 01 Nov 2022 11:01:00 +0000

GitHub Desktop – подписываем коммиты (Verified)

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное

Думаю многие видели на GitHub коммиты со значком Verified:

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

В этой статье я расскажу как подписывать коммиты. Методы, описанные в статье подходят как для GitHub, так и для GitLab, а что касается клиентов, то коммиты будут подписываться и в GitHub Desktop и в TortoiseGit и в других графических приложениях. Сразу отмечу, что статья предназначена для пользователей Windows.

Если вы хотите максимально быстро настроить подпись коммитов – читайте первую часть статьи. А если вам интересны и другие детали, то можете прочитать остальное.

GitHub Desktop – подписываем коммиты (быстрая инструкция)

Подразумевается, что у вас уже установлен GitHub Desktop.

  • Скачиваем и устанавливаем GPG (выбираем Simple installer for the current GnuPG)
    • Сложностей в установке не возникнет
  • Скачиваем и устанавливаем Git for Windows
    • выбираете подходящие вам параметры
    • выбираете используемый вами редактор, например Notepad++
    • выбираете название ветки по умолчанию (как выбирали в Githib Desktop)
    • далее оставляем пункт помеченный как Recommended
    • далее можно все оставить по умолчанию или изменить на ваш вкус
    • по окончанию установки, рекомендую сразу поставить галочку Launch Git Bash

Далее мы будем работать в Git Bash. Если вы не поставили галочку для его запуска, то можете найти его в меню Пуск -> Все программы -> Git.

Для генерации ключей пишем:

gpg --full-generate-key

Далее:

  • Вводим 1
  • Вводим 4096
  • Вводим срок действия ключа в требуемом формате (там будет подсказка) или 0 для бессрочного ключа
  • Далее вас попросят ввести Real name и Email – их нужно вводить строго те же, которыми вы подписываетесь в коммитах
  • Далее вас попросят ввести пароль для ключа во всплывающем окне Pinentry – его вы потом будете вводить каждый раз, когда делаете коммит

Сразу скажу, я пробовал создать ключ без пароля. Тогда Pinentry выдает такое предупреждение:

подписываем коммиты - pinentry

И ключ в общем-то создается. Но проблема в том, что GitHub Desktop почему-то отказывается с ним работать и при попытке закоммитить изменения в любом репозитории он выдает ошибку. Работает только с ключами, имеющими пароль.

Продолжим:

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

Визуально процесс выглядит вот так:

подписываем коммиты - генерация ключа

Далее включаем подпись коммитов в конфиге Git (все там же, в Git Bash):

git config --global user.signingkey KEY_EMAIL

Вместо KEY_EMAIL укажите email который вписали при создании ключа.

git config --global commit.gpgsign true
git config --global gpg.program $(which gpg)

Далее экспортируем ключ:

gpg --armor --export KEY_EMAIL
подписываем коммиты - настройка

Выделяем и копируем из Git Bash ваш ключ вместе с заголовками блоков, т.е. скопированный ключ должен начинаться с -----BEGIN PGP PUBLIC KEY BLOCK----- и заканчиваться -----END PGP PUBLIC KEY BLOCK-----

Осталось только добавить ключ на GitHub в этом разделе. Нажимаете New GPG key, вставляете ключ и придумываете ему название.

После этого можете делать коммиты в GitHub Desktop и у вас будет появляться такое всплывающее окно:

подписываем коммиты - подпись

Тут вы указываете пароль, который указали при создании ключа и все – подписанный коммит готов.

Дополнительная информация для тех, кому будет интересно.

Экспорт и импорт ключей

Если вам понадобится экспортировать ключ в файл, чтобы можно было в будущем импортировать его, например после переустановки Windows, то открываем Git Bash или обычную командную строку Windows и пишем:

gpg --armor --export KEY_EMAIL > git.asc
gpg --armor --export-secret-key KEY_EMAIL > git_secret.asc

Вместо KEY_EMAIL укажите email, который вписывали при создании ключа или же идентификатор ключа, который можно получить, открыв список ключей:

gpg -k

Файлы сохранятся в папке вашего пользователя, например C:\Users\Alexell

Чтобы импортировать ключ в gpg, понадобится следующая команда:

gpg --import git_secret.asc

Только здесь нужно указать полный путь к файлу с приватным ключом.

Графический интерфейс, подпись и шифрование файлов и писем

Если вам больше нравится графический интерфейс и вы хотите получить больше возможностей, то вместо простого GPG вы можете установить пакет Gpg4win.

подписываем коммиты - установка Gpg4win

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

Менеджер ключей с графическим интерфейсом. Можно выбрать либо GPA, либо Kleopatra, я рекомендую последний. Kleopatra имеет русский язык и выглядит вот так:

менеджер ключей Kleopatra

GpgOL – дополнение, которое позволит вам подписывать письма в Microsoft Outlook, если вы конечно пользуетесь им. Будет добавлен такой пункт в меню:

подписываем письма в ms outlook

Если выбрать установку оболочки GpgEX, то в контекстное меню Windows будет добавлено меню, позволяющее подписывать и шифровать файлы.

gpgex для подписи и шифрования файлов

На этом я заканчиваю статью и желаю всем успехов с подписью коммитов или файлов.

]]>
https://alexell.ru/services/search-universe-bot-najdet-vsyo-obo-vseh.html <![CDATA[Search Universe Bot – найдет всё обо всех]]> Thu, 14 Jul 2022 10:13:00 +0000

Search Universe Bot – найдет всё обо всех

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Search Universe Bot

На днях я запустил в Telegram бота для поиска информации. На самом деле это зеркало того самого бота ГБ/EOG, который постоянно блокируют и полное название которого я не хочу упоминать, дабы Search Universe работал долго и без блокировок.

Что касается функционала бота, то он весьма обширный. Вы можете найти довольно много информации о каком-либо человеке, запуская поиск по ФИО, номеру телефона, email адресу, telegram-аккаунту, странице другой социальной сети или даже по фото – так называемый поиск двойников. Search Universe также может найти логины или email адреса по указанному паролю, а также данные и пароли из известных утечек.

Если вы владеете автомобилем или планируете его покупку, для вас будут полезны такие возможности бота, как поиск по VIN, который найдет сведения об автомобиле, сроках владения и страховании, а также поиск по гос. номеру, который выдаст вам не только информацию и фото автомобиля, но также информацию по страхованию и даже ФИО с контактами возможных владельцев.

Если отправить в бот кадастровый номер, вы получите адрес, кадастровую стоимость и прочую информацию по объекту. А если отправить адрес или координаты, можно также получить кое-какую информацию или запустить поиск людей рядом. Еще можно отправить IP адрес или домен, чтобы получить основную информацию по ним или запустить Whois. Если вас интересует поиск по IP адресу или другие интернет-инструменты, рекомендую заглянуть сюда.

Напоследок добавлю что Search Universe Bot может найти информацию по юр. лицам (по ИНН или названию), а также поддерживает голосовые команды. А если вас смущает количество информации о вас, которую могут увидеть другие, вы можете заполнить требование об удалении персональных данных из поисковых результатов на основании статьи 10.3 Федерального закона от 27.07.2006 № 149-ФЗ «Об информации, информационных технологиях и о защите информации» и данные о вас будут удалены в течении 4-15 дней после подачи заявки.

]]>
https://alexell.ru/services/besplatnyj-monitoring.html <![CDATA[Бесплатный мониторинг]]> Fri, 19 Mar 2021 09:20:00 +0000

Бесплатный мониторинг

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Бесплатный мониторинг от Alexell

Представляю вашему вниманию мой новый сервис, с помощью которого вы сможете бесплатно поставить на мониторинг какие-либо ваши ресурсы, будь то VPS, игровой сервер или даже домашний роутер (с внешним IP).

Конечно, это не Zabbix, но ведь мониторинг Zabbix бесплатным не бывает, разве не так? Для мониторинга я арендую отдельную VPS, а сам мониторинг работает на open-source движке, которым я очень давно пользуюсь.

Я предоставляю следующие варианты мониторинга:

  • Пинг IP адреса
  • Доступность сервиса (например RDP, SSH, MySQL – в общем любой TCP порт)

Если вы ограничиваете по IP доступ к портам, которые собираетесь поставить на мониторинг, не забудьте добавить IP адрес сервера мониторинга 45.155.207.78 в список разрешенных (например в iptables на Linux и пр.)

Поддерживаются следующие варианты уведомлений:

  • Уведомления по E-Mail
  • Уведомления в Telegram
  • Уведомления в Pushover
  • Уведомления в канал Discord
  • Отправка JSON запроса на указанный URL

Что требуется от пользователя для получения уведомлений:

  • Для E-Mail: указать ваш e-mail в профиле
  • Для Telegram: добавить в Telegram бота @AlexellMonitorBot, отправить ему /start и указать в профиле на сайте мониторинга ваш chat_id, который бот любезно сообщит.
  • Для Pushover: зарегистрироваться на их сайте, установить мобильное приложение, авторизоваться в нем, а в мониторинг прописать User Key.
  • Для Discord: создать вебхук в разделе “Интеграции” вашего сервера, настроить его на нужный канал и указать вебхук в профиле мониторинга.
  • Для JSON: указать в профиле URL для отправки запроса, по желанию изменить структуру отправляемого JSON.

Лимиты и ограничения мониторинга:

Актуально только на момент написания поста.

  • Интервал опроса: 1 минута
  • Отправка уведомления: после 2-х неудачных попыток опроса
  • Сервисы уведомлений: не ограничено
  • Допускается мониторить: не более 2-х сервисов на 1 пользователя

Примечания:

Указанный выше список ограничений может в будущем измениться, по мере прироста пользователей и возрастания нагрузки на сервер. Пока я не могу предсказать, надо ли будет урезать лимиты, а может их и вовсе можно будет поднять… В любом случае, актуальная информация по ограничениям будет доступна на стартовой странице мониторинга по кнопке в конце поста. Ссылка на стартовую страницу также есть на боковой панели справа.

Уведомления отправляются при смене статуса сервиса (онлайн/оффлайн) и отправка по умолчанию происходит после двух неудачных попыток опроса, т.е. о падении своего сервиса вы узнаете через 2 минуты. Это сделано для того чтобы избежать ложной тревоги, ведь иногда на ICMP эхо-запрос ответа может и не быть.

Что касается доставки уведомлений, то пользователям по умолчанию доступны все перечисленные способы для получения уведомлений, но я настоятельно рекомендую ограничиться одним, максимум двумя (при обоснованной необходимости) настроенными способами уведомлений для того, чтобы не создавать лишнюю нагрузку на сервер, все таки мониторинг я вам предоставляю бесплатно 🙂

UPD 2023: проект закрыт.

]]>
https://alexell.ru/services/novye-internet-servisy-dlya-it-speczialistov.html <![CDATA[Новые интернет-сервисы для IT-специалистов]]> Sun, 07 Mar 2021 09:09:00 +0000

Новые интернет-сервисы для IT-специалистов

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
интернет-сервисы от Alexell

Приветствую гостей и пользователей моего сайта. Что же я подразумеваю под фразой “интернет-сервисы”?

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

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

У меня на сайте уже существовали интернет-сервисы, их было всего 3 и я, честно говоря, уже забыл когда именно их сделал.

интернет-сервисы от Alexell (старые)

Но в последнее время, мне все чаще приходили мысли о том, что надоело гуглить банальные инструменты, либо искать их в закладках. Надоело что страницы грузятся долго и что на 2ip.ru еще надо постараться чтобы быстро найти нужный мне сервис. И я принял решение наконец сделать больше инструментов, нужных мне как по работе, так и по личным задачам.

В итоге на момент написания этого поста, я внес некоторые изменения в код существующих сервисов, устранил недочеты, а также разработал 3 новых сервиса:

  • Информация об IP адресе или домене
  • Наличие IP в спам базах
  • Конвертер кириллических доменов в Punycode

Я очень рад, что смог проделать эту работу, ведь это необходимо и для меня тоже. Могу сразу пообещать что существующие сервисы будут дорабатываться и развиваться при необходимости и по мере наличия у меня свободного времени, а также я собираюсь создать еще немало инструментов, например различные конвертеры (байт конвертер, криптографическое кодирование/хеширование), инструменты, связанные с информацией браузера и скорее всего много чего еще, что я пока что не придумал. Но всему свое время 🙂

Добро пожаловать в мои интернет-сервисы: Uni-Tools

P.S. На указанном сайте есть своя страница новостей, где в дальнейшем будут публиковаться новости, связанные с развитием сервисов.

UPD 2023: Ссылка изменена после запуска Uni-Tools.

]]>
https://alexell.ru/blog/mikrotik/fasttrack-na-mikrotik-umenshaem-nagruzku-na-cpu.html <![CDATA[FastTrack на MikroTik – уменьшаем нагрузку на CPU]]> Tue, 14 Apr 2020 09:12:00 +0000

FastTrack на MikroTik – уменьшаем нагрузку на CPU

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
FastTrack на MikroTik

Добрый вечер, уважаемые читатели моего скромного блога! Прошу прощения, что давно ничего не писал, я был занят одним проектом, да и идей особо не было. Однако сегодня я хочу поделиться с вами своей историей о нагрузке на CPU моего MikroTik hAP ac. Вы узнаете про FastTrack на MikroTikи оптимизацию Firewall.

Итак, что мы имеем:

  • 2 постоянно работающих L2TP+IPSec подключения
  • 18 правил Firewall
  • 13 правил NAT
  • 3 правила Mangle
  • 10 скриптов в Scheduler (5 из которых выполняются каждую минуту)
  • Один игровой сервер
  • Один личный компьютер
  • Мобильные устройства

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

Когда я наконец пришел домой после смены, было похоже что Микротик завис. Лампочки горели, но DHCP он не раздавал, по MAC к нему подключиться тоже не удалось. После его перезагрузки связь восстановилась. Подозреваю что причиной стала высокая и длительная нагрузка на CPU, но выяснил я это уже позже. Как оказалось, при скачивании торрента на компьютере со скоростью 25-30 МБ/сек, нагрузка на CPU Микротика держится в районе 90-100%. А перед уходом на работу я как раз поставил скачиваться 5 сезонов сериала.

Как же я решил проблему высокой нагрузки на CPU MikroTik?

  1. Оптимизация маркировки пакетов. Не помню почему, но у меня было сделано 2 правила маркировки и соответственно 2 маршрута на VPN – отдельно для Telegram и отдельно для всего остального. Практической необходимости для этого я не нашел, поэтому объединил все в одно правило и исправил Address Lists. Быть может это никак не сказывалось на производительности, но все же я решил сделать нормально.
  2. Оптимизация Firewall.
    • В первую очередь необходимо убедиться, что правила расположены в нужном порядке. Сделать это не трудно – достаточно посмотреть статистику трафика. Правила с наибольшим количеством трафика должны быть самыми первыми. В идеале, самым первым правилом должно быть action=accept chain=forward connection-state=established,related.
    • Далее, я сократил число правил, объединив некоторые правила. Например тот же forward портов, порты можно было указать в одном правиле через запятую. Не знаю, почему не сделал этого раньше.
  3. Настраиваем FastTrack на MikroTik.
    • Если у вас есть бридж, объединяющий локальные интерфейсы, убедитесь что у него включена галочка Fast Forward. Также не забываем отключить IP Firewall для бриджа: /interface bridge settings set use-ip-firewall=no
    • Добавляем правило Firewall: /ip firewall filter add action=fasttrack-connection chain=forward connection-state=established,related
    • Сразу под ним должно быть расположено правило: /ip firewall filter add action=accept chain=forward connection-state=established,related
    • Если вы маркируете часть трафика и заворачиваете его на VPN, проверьте, чтобы в IP => Settings не стояла галочка Route Cache. При одновременно включенных FastTrack и Route Cache, у меня сильно проседала скорость открытия сайтов, которые заворачиваются на VPN.
  4. Оптимизация торрент-клиента. Если не качаете торренты, можете не читать это. Если в вашем торрент-клиенте включен протокол uTP – выключите его. Практической пользы от него я не увидел, зато из-за него очень сильно возрастает количество сетевых пакетов и соответственно нагрузка на CPU. Живой пример: после отключения uTP на моем торрент-клиенте, нагрузка на CPU Микротика при скачивании торрента у меня упала на 40%.

Подводим итоги: после выполнения этих манипуляций, при скачивании торрента со скоростью 25-30 МБ/сек, а также работающем игровом сервере (с игроками онлайн), двумя активными VPN соединениями и параллельном серфинге интернета – нагрузка на CPU моего Микротика не превышает 20-25%.

]]>
https://alexell.ru/blog/movies/forsazh-poryadok-prosmotra.html <![CDATA[Форсаж: порядок просмотра]]> Sun, 03 Mar 2019 16:00:00 +0000

Форсаж: порядок просмотра

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Форсаж: порядок просмотра

Форсаж – прекрасная франшиза студии Universal о тачках, гонках, деньгах, лихих парнях и конечно же о любви и семье. Дословный перевод оригинального названия “Fast & Furious” – “Быстрые и яростные“, но франшиза в России называется Форсаж.
Мне полюбилась эта серия фильмов за интересный сюжет и семью Доминика, за то как у них построены отношения и как они стоят друг за друга.

Порядок просмотра Форсажа простой, но усложняется наличием спин-оффа “Токийский дрифт”, который разрывает хронологическую цепочку, поэтому я опишу правильный порядок просмотра для себя, если когда-то снова решу пересмотреть все части и конечно же для тех, кто их еще не смотрел. В список фильмов я также включу две короткометражки, которые смотреть не обязательно, но они ведь короткие, так что лишним не будет.

Форсаж – хронологический порядок просмотра (обновлен в 2023)

  1. Форсаж [2001]
  2. Включай турбонаддув (короткометражка) [2003]
  3. Двойной форсаж [2003]
  4. Бандиты (короткометражка) [2009]
  5. Форсаж 4 [2009]
  6. Форсаж 5 [2011]
  7. Форсаж 6 (не смотреть сцену после титров) [2013]
  8. Тройной форсаж: Токийский дрифт (спин-офф) [2006]
  9. Сцена после титров Форсаж 6
  10. Форсаж 7 [2015]
  11. Форсаж 8 [2017]
  12. Форсаж: Хоббс и Шоу (спин-офф) [2019]
  13. Форсаж 9 [2021]
  14. Форсаж 10 [2023]
  15. Форсаж 11 [~2024]
]]>
https://alexell.ru/blog/movies/zvezdnye-voiny-poryadok-prosmotra.html <![CDATA[Звездные воины: порядок просмотра]]> Sun, 03 Mar 2019 12:19:00 +0000

Звездные воины: порядок просмотра

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Звездные воины: порядок просмотра

Звездные Воины – популярная во всем мире франшиза, уже ставшая классикой. Прошло более 40 лет с момента выхода первого фильма, но в мире все еще есть люди, либо по каким-то причинам не смотревшие ее совсем, либо желающие повторить просмотр всех частей и задумавшиеся, в каком же порядке лучше смотреть. На самом деле все проще чем кажется – порядок просмотра частей можно выбрать один из трёх:

  • премьерный – только фильмы, в порядке их выхода на экраны. Минус этого варианта в том, что фильмы выходили не в хронологическом порядке, поэтому придется напрягать мозг чтобы разобраться в родословной основных героев. Плюс в том, что вы будете смотреть фильмы в порядке развития технологий, т.е. от худшего качества спецэффектов к лучшему.
  • фанатский – фильмы, мультфильмы и мультсериалы, для тех, кто хочет досконально знать основную вселенную Звездных Воин, расставляются как правило в хронологическом порядке.
  • хронологический – только фильмы, части франшизы и спин-оффы в хронологическом порядке. Минус этого варианта в том, что сначала вы будете смотреть более новые по дате выхода фильмы, а потом старые. Будет непривычно смотреть старые фильмы после фильмов с современной графикой, но на мой взгляд, это самый адекватный вариант, поскольку с точки зрения простоты просмотра, здесь будет чисто линейная история и все будет понятно. Поэтому мы поговорим именно об этом варианте.

Звездные воины – лучшая космическая фантастика моего детства. Я видел пару частей в подростковом возрасте, но полностью все части посмотрел только в 2018 году и я проникся сюжетом именно потому что смотрел фильмы в хронологическом порядке. Я опишу порядок всех фильмов, включая новые истории и сделаю это как для вас, так и для себя, если лет через 5-10 решу снова пересмотреть все части.

Звездные воины: хронологический порядок просмотра (обновлен в 2024)

  1. Аколит (сериал) [2024]
  2. Звёздные войны. Эпизод I: Скрытая угроза [1999]
  3. Звёздные войны. Эпизод II: Атака клонов [2002]
  4. Звёздные войны. Эпизод III: Месть ситхов [2005]
  5. Хан Соло: Звёздные войны: Истории [2018]
  6. Оби-Ван Кеноби (сериал) [2022]
  7. Андор (сериал) [2022 – …]
  8. Изгой-один. Звёздные войны: Истории [2016]
  9. Звёздные войны. Эпизод IV: Новая надежда [1977]
  10. Звёздные войны. Эпизод V: Империя наносит ответный удар [1980]
  11. Звёздные войны. Эпизод VI: Возвращение джедая [1983]
  12. Мандалорец (сериал) [2019 – …]
  13. Книга Бобы Фетта (сериал) [2021]
  14. Асока (сериал) [2023 – …]
  15. Звёздные войны: Пробуждение силы [2015]
  16. Звёздные войны: Последние джедаи [2017]
  17. Звёздные Войны: Скайуокер. Восход [2019]
]]>
https://alexell.ru/projects/mss-project-dlya-metrostroi.html <![CDATA[MSS Project для Metrostroi]]> Sun, 03 Mar 2019 04:39:00 +0000

MSS Project для Metrostroi

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
MSS Project

MSS Project – один из лучших проектов в сообществе симулятора метрополитена Metrostroi. Сейчас, в 2023 году, это действительно так, но сперва я расскажу, что такое Metrostroi и как вообще все начиналось. Если вам было бы интересно почувствовать себя машинистом поезда метро – читайте дальше.

Осенью 2018 года я узнал о существовании интересного набора аддонов для Garry’s Mod – Metrostroi. Это самый реалистичный симулятор метрополитена на момент написания этого поста. Мне всегда нравилось все что связано с железной дорогой, поэтому метро по сути тоже оказалось интересно.

Запустить Метрострой и сразу поехать на поезде, как выяснилось, не выйдет. Сначала нужно разобраться как устроен сам Метрострой, познакомиться с интерфейсом Гаррис Мода, игровым процессом, разобраться клавишах и командах и почитать правила на серверах. Затем нужно изучить некоторую теоретическую часть сигнализации в метрополитене, чтобы осуществлять движение по линии без нарушений и наконец научиться запускать и водить составы, тут необходимы хотя бы минимальные знания пневматики и электрических систем составов. На это у меня ушло недели три. Garry’s Mod создан на движке Source, а значит Метрострой – онлайн игра. Если вы любите симуляторы, то это реально интересный вариант, потому что вы можете собраться с другими игроками на одном сервере и вместе отправиться на составах на линию, соблюдая интервалы и выполняя команды диспетчера. Какое-то время я просто играл в Метрострой, но потом мне захотелось большего…

И 31 декабря я официально запустил свой сервер для Метростроя, назвав его “Metrostroi Simple Server” и от остальных серверов его на тот момент отличало лишь наличие уникального динамического MOTD, написанного мною на PHP.

Карты, модели, скины и прочие аддоны для Metrostroi добавляются на сервер с помощью коллекции аддонов в Steam Workshop и на большинстве серверов контент почти одинаковый, за исключением серверов от самых продвинутых ребят из сообщества, у которых есть собственные разработки для своих серверов, не доступные для других серверов.

Как известно, я знаю PHP, MySQL и немного C++, но аддоны для Метростроя пишутся на скриптовом языке Lua, поэтому сначала я не лез в него. Но со временем ситуация изменилась. У меня на сервере появился человек под псевдонимом Agent Smith, который ранее работал машинистом в метрополитене Москвы и обладал нужными мне знаниями мат. части и со временем мы начали работать на сервере вместе. Он занимался обновлениями и доработками сигнализации на картах, созданием тестов для машинистов, набором инструкторов и придумывал различные идеи для нашего сервера. Я же занимался в основном технической частью сервера, нашим сайтом и воплощением идей Агента Смита. Он внес большой вклад в Metrostroi Simple Server и сервер перестал быть моим личным, а стал нашим общим. Так мы и продолжили работать вдвоем. Со временем мы разобрались в Lua и стали писать скрипты. Сначала лишь для нашего сервера, а позднее мы стали делать аддоны для всего сообщества и со временем наш сервер преобразился в целый проект…

MSS Project сейчас

Сейчас наш проект называется MSS Project, а сервер по прежнему называется Metrostroi Simple Server. Стоит отметить, что брозды правления я передал Агенту Смиту, поскольку мне пришлось покинуть проект на долгое время. Позже я вернулся в проект как разработчик. В 2022 году мы занимались разработкой нового сайта для проекта и наконец запустили его. MSS Project кардинально отличается от других проектов в Метрострое. Во первых, у нас уникальный, созданный с нуля сайт, в то время как многие проекты делают сайт на основе старой ранговой БД Метростроя, которая есть на GitHub. Во вторых, мы единственные, у кого помимо ранговой системы, есть еще статистика и рейтинги машинистов.

MSS Project (рейтинги)

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

В третьих, только у нас на сайте реализован полноценный Scoreboard (таблица с игроками) с отображением маршрута, состава и его местоположения, динамически выводится дополнительная информация о карте, а также схема карты и вся эта информация также динамически отображается на нашем Discord-сервере.

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

  • Metrostroi Advanced – Расширение для Метростроя, добавляющее много полезных возможностей для серверов и игроков.
  • Metrostroi Scoreboard Pro – Продвинутая таблица с игроками, разработанная специально для серверов Метростроя.
  • Metrostroi Dispatcher – Диспетчерский функционал и расписания для машинистов Metrostroi.
  • Metrostroi Clock Arrive – Мониторы для станций, отображающие линию, направление и время до прибытия состава.

Статья обновлена в 2023.

]]>
https://alexell.ru/blog/ubuntu/podnimaem-svoj-vpn-ikev2-na-ubuntu.html <![CDATA[Поднимаем свой VPN – IKEv2 на Ubuntu]]> Wed, 16 May 2018 11:59:00 +0000

Поднимаем свой VPN – IKEv2 на Ubuntu

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
IKEv2 на Ubuntu

Добрый день, дорогие гости и читатели. Сегодня я публикую последнюю на ближайшее время статью на тему запуска своего VPN и эта статья о запуске собственного IKEv2 на Ubuntu 16.04.

Для выполнения задачи нам понадобится:

  • VPS или выделенный сервер с установленной ОС Ubuntu 16.04 LTS и внешним IP адресом;
  • Зарегистрированный и делегированный домен;
  • Уметь добавлять записи в DNS вашего домена.

Напоминаю, что дешевые VPS во Франции для запуска своего VPN вы можете посмотреть здесь. Для примера, в статье я использую вымышленные данные: поддомен vpn.alexell.ru для подключения к VPN, внешний IP сервера 55.55.55.55 и почту на домене test@alexell.ru. При настройке своего IKEv2 на Ubuntu по этой статье, заменяйте эти значения на свои собственные.

Итак, если все из списка выше у вас имеется, тогда начнем приготовления:

  1. Добавляем A запись в DNS домена чтобы сопоставить поддомен vpn.alexell.ru с IP адресом сервера 55.55.55.55, на котором будем запускать VPN.
  2. Создаем почту в собственном домене, например test@alexell.ru (не обязательно);
  3. Определяемся с внутренней подсетью для клиентов. Для примера возьмем 10.10.1.0/24;
  4. Подключаемся по SSH к нашему VPS, например через PuTTY.

Настройки системы и фаервола

Открываем файл /etc/sysctl.conf и добавляем в самый конец следующие строки:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

Это активирует пересылку пакетов и отключит ICP-редиректы.

Стираем все правила фаервола командой iptables -F. Если у вас вдруг не установлен iptables, то просто установите его командой apt-get install iptables.

Узнайте название вашего сетевого интерфейса командой ifconfig. Запомните буквенный префикс, он может быть eth, ens или абсолютно другим. Например, если ваш интерфейс называется ens3, как было у меня, то при добавлении правил фаервола ниже, мы будем использовать обозначение ens+.

Для корректной работы NAT и протоколов IKE и ESP добавляем следующие правила:

iptables --append INPUT --protocol udp --destination-port 500 --jump ACCEPT
iptables --append INPUT --protocol udp --destination-port 4500 --jump ACCEPT
iptables --append INPUT --protocol esp --jump ACCEPT
iptables -t nat -A POSTROUTING -j SNAT --to-source 55.55.55.55 -o ens+

Не забудьте заменить 55.55.55.55 на внешний IP вашего сервера.

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

Сохраняем правила NAT в файл командой:

iptables-save > /etc/iptables.conf

Открываем файл /etc/network/interfaces и добавляем в конец файла строку:

pre-up /sbin/iptables-restore < /etc/iptables.conf

Открываем файл /etc/rc.local и добавляем в конец файла, но до строки exit 0 следующую строку:

for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done

Теперь можно перезагрузить сервер для применения всех изменений.

Получение SSL сертификата для IKEv2 на Ubuntu

Клиенты, подключающиеся к нашему IKEv2 будут проверять подлинность сервера, дабы исключить возможность того, что какой-то другой сервер «притворяется» нашим (атаки класса MITM). Получить SSL сертификат можно в любом действующем удостоверяющем центре за деньги, например GlobalSign и Comodo, но мы воспользуемся бесплатным Let’s Encrypt.

Установим пакет software-properties-common, который позволит подключать внешние репозитории:

apt-get install software-properties-common

Установим утилиту certbot:

add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install certbot

Получаем сертификат следующей командой:

certbot certonly --standalone --agree-tos -m test@alexell.ru -d vpn.alexell.ru

Не забудьте изменить ваш домен/поддомен и email. После окончания процедуры, в папке /etc/letsencrypt/live/vpn.alexell.ru появятся файлы: chain.pem – корневой и промежуточный сертификаты, cert.pem – сертификат сервера и privkey.pem – приватный ключ.

UPD 2023: На новых Ubuntu, например 20 или 22, для установки certbot лучше воспользоваться менеджером snap:

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --standalone --agree-tos -m test@alexell.ru -d vpn.alexell.ru

Установка и настройка IPsec

На этом шаге мы установим демон для работы IPsec и набор плагинов, в которых есть нужный нам EAP-MSCHAPv2 для аутентификации клиентов.

apt-get install strongswan libcharon-extra-plugins

Теперь нам необходимо создать ссылки на полученные сертификаты в директории ipsec.d, внутри которой находятся cacerts (для корневых сертификатов), certs (для сертификатов X.509 и PGP) и private для приватных ключей.

Для этого выполним команды:

sudo ln -s /etc/letsencrypt/live/vpn.alexell.ru/chain.pem /etc/ipsec.d/cacerts/ca.pem
sudo ln -s /etc/letsencrypt/live/vpn.alexell.ru/cert.pem /etc/ipsec.d/certs/certificate.pem
sudo ln -s /etc/letsencrypt/live/vpn.alexell.ru/privkey.pem /etc/ipsec.d/private/key.pem

Открываем файл /etc/ipsec.conf, стираем его содержимое и добавляем следующую конфигурацию:

# ipsec.conf - strongSwan IPsec configuration file

config setup
  #  Allows few simultaneous connections with one user account.
  #  By default only one active connection per user allowed.
  #  This option also usefull if you have limited rightsourceip pool and want to kick your ghost connection while reconnecting.
  uniqueids=yes

  # Increase debug level
  #charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2,  mgr 2"

conn %default
  keyexchange=ikev2

  # More advanced ciphers. Uncomment if you need it.
  # Default ciphers will works on most platforms.
  #ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024!
  #esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!

  # Dead peer detection will ping clients and terminate sessions after timeout
  dpddelay=300s
  dpdtimeout=2000s
  dpdaction=clear

  # Left is a server side
  leftcert=certificate.pem
  leftsendcert=always

  # Routes pushed to clients. If you don't have ipv6 then remove ::/0
  leftsubnet=0.0.0.0/0

  #rekey=no
  #reauth=no
  auto=add
  fragmentation=yes

  #authby=pubkey
  #left=%any
  #leftid=vpn.alexell.ru
  #right=%any

  # Right is a remote client side
  rightsourceip=10.10.1.0/24
  rightdns=8.8.8.8

  eap_identity=%identity

# All clients
conn ikev2-mschapv2
  leftid=vpn.alexell.ru
  rightauth=eap-mschapv2

Здесь leftcert – имя сертификата из /etc/ipsec.d/certs, leftid – ваш поддомен, на который был выдан сертификат, rightsourceip – пул внутренних IP адресов для клиентов, rightdns – DNS сервер, который будет использоваться при соединении через наш VPN.

Учетные записи для наших клиентов IKEv2  мы будем добавлять в файл /etc/ipsec.secrets, откройте его и замените содержимое на следующую конфигурацию:

include /var/lib/strongswan/ipsec.secrets.inc

# This is private key located at /etc/ipsec.d/private/key.pem
: RSA key.pem

# Create VPN users accounts
user : EAP "password"

Здесь : RSA key.pem – имя файла приватного ключа из /etc/ipsec.d/private, user – имя пользователя, password – пароль. В будущем, учетные записи вы можете добавлять в этот файл по аналогии.

Перезапускаем демон:

ipsec restart

Теперь можно проверить корректность подключения сертификатов. Для этого выполните команду ipsec listcerts. Результат выполнения команды будет примерно такой:

List of X.509 End Entity Certificates:

  altNames:  vpn.alexell.ru
  subject:  "CN=vpn.alexell.ru"
  issuer:   "C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3"
  serial:    03:ba:ba:68:d6:11:06:2d:69:e8:7e:f6:f9:05:cf:6a:27:29
  validity:  not before May 03 17:34:04 2018, ok
             not after  Aug 01 17:34:04 2018, ok 
  pubkey:    RSA 2048 bits, has private key
  keyid:     59:d3:1c:bb:5a:bf:fd:e7:4b:0d:7d:dd:09:d8:74:69:73:e8:6a:1f
  subjkey:   ee:3d:f6:f5:c6:11:1d:fa:3e:f2:e9:15:a9:52:ed:d1:cb:58:a8:63
  authkey:   a8:4a:6a:63:04:7d:dd:ba:e6:d1:39:b7:a6:45:65:ef:f3:a8:ec:a1

Обратите внимание, фраза has private key должна быть обязательно.

Получить информацию о загруженной конфигурации и текущем состоянии можно командой:

ipsec statusall

Теперь можно подключиться к вашему новому VPN и убедиться что все работает. При подключении, выбирайте тип IKEv2.

Дополнительная информация об IKEv2 на Ubuntu

Авторизация и проблемы с подключением

При использовании приведенной конфигурации, клиент с одной учетной записью сможет иметь только одно открытое соединение с VPN одновременно, т.е. если под этим же логином произойдет второе подключение при активном первом – первое будет разъединено. Если вы хотите сделать одну общую учетную запись, например anonymous, то пропишите логин и пароль в ipsec.secrets, затем откройте ipsec.conf и измените uniqueids=yes на uniqueids=no.

Если у вас возникнут проблемы с подключением или вылетами на некоторых мобильных устройствах (вообще, эту конфигурацию я проверял только на Windows 7, 10 и iOS) или появится желание настроить свой IKEv2 на Ubuntu таким образом, чтобы под одной учетной записью можно было подключаться одновременно с одного мобильного устройства и с одного ПК, то в файле ipsec.conf замените единую секцию подключения на несколько секций под разные устройства (для лучшей совместимости).

Убираем эту секцию:

# All clients
conn ikev2-mschapv2
  leftid=vpn.alexell.ru
  rightauth=eap-mschapv2

Добавляем вместо нее 2 секции:

# BlackBerry, Windows, Android
conn ikev2-mschapv2
  rightauth=eap-mschapv2

# macOS, iOS
conn ikev2-mschapv2-apple
  rightauth=eap-mschapv2
  leftid=vpn.alexell.ru

Можно еще попробовать такой вариант:

# IKEv2
conn ipsec-ikev2
  keyexchange=ikev2
  auto=add

# BlackBerry, Windows, Android
conn ipsec-ikev2-eap
  also="IPSec-IKEv2"
  rightauth=eap-mschapv2

# macOS, iOS
conn ikev2-mschapv2-apple
  also="IPSec-IKEv2"
  rightauth=eap-mschapv2
  leftid=vpn.alexell.ru

Обновление сертификатов

Как известно, сертификаты Let’s Encrypt выдаются на 3 месяца, после чего их необходимо обновлять.

Для этого добавляем ежедневное ночное задание в etc/crontab:

0  3	* * *	root	certbot renew --noninteractive

UPD 2023: если вы устанавливали certbot на новых Ubuntu 20 или 22 через snap, то сертификаты там продляются автоматически и делать вообще ничего не нужно. Разве что убедиться что сервис продления запущен: sudo systemctl status snap.certbot.renew.service

Также вы можете запустить симуляцию продления: sudo certbot renew --dry-run

Хранение логов

Если вы не хотите хранить логи работы IKEv2 на Ubuntu и подключений клиентов, тогда можно писать их в /dev/null, для чего просто выполните команды:

sudo rm /var/log/syslog && sudo ln -s /dev/null /var/log/syslog
sudo rm /var/log/auth.log && sudo ln -s /dev/null /var/log/auth.log
]]>
https://alexell.ru/blog/ubuntu/podnimaem-svoj-vpn-l2tp-ipsec-na-ubuntu.html <![CDATA[Поднимаем свой VPN – L2TP/IPsec на Ubuntu]]> Sat, 12 May 2018 11:33:00 +0000

Поднимаем свой VPN – L2TP/IPsec на Ubuntu

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
L2TP/IPSec на Ubuntu

Добрый день, уважаемые гости и читатели. Как и обещал в статье про PPTP, теперь расскажу как поднять на Ubuntu еще один тип VPN – L2TP/IPsec, где сам канал будет организован средствами L2TP, а поверх него для защиты передаваемых данных будет использоваться IPsec. Все описанные действия производились на Ubuntu 14.04.5 LTS. Напоминаю, что дешевые VPS во Франции для запуска своего VPN вы можете посмотреть здесь.

На новых Ubuntu, например 18 или 20 лучше воспользоваться вариантом с Docker, если он у вас установлен. Если вам это интересно, переходите сразу сюда.

Для установки L2TP/IPsec нам понадобятся права root пользователя или sudo.

1. Установим необходимые пакеты:

apt-get install openswan xl2tpd

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

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

Теперь вам необходимо определиться с локальной подсетью для клиентов VPN. Вы можете сделать себе подсеть из любой сети/подсети, которая не маршрутизируется в интернете:

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

2. Открываем файл /etc/ipsec.conf, стираем его содержимое и добавляем следующую конфигурацию:

version 2.0
config setup
    dumpdir=/var/run/pluto/
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v6:fd00::/8,%v6:fe80::/10
    protostack=netkey
    force_keepalive=yes
    keep_alive=60
conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    ikelifetime=8h
    keylife=1h
    ike=aes256-sha1,aes128-sha1,3des-sha1
    phase2alg=aes256-sha1,aes128-sha1,3des-sha1
    type=transport
    left=0.0.0.0
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
    dpddelay=10
    dpdtimeout=20
    dpdaction=clear

Не забудьте изменить 0.0.0.0 в параметре left на внешний IP вашего сервера.

Для обеспечения безопасности, IPSec будет использовать shared-key – совместно используемый ключ. Он один для всех пользователей, периодически его можно изменять в целях безопасности.

3. Открываем /etc/ipsec.secrets и добавляем строку в представленном ниже формате:

0.0.0.0 %any: PSK "syrz3qfkbe2koeer7o1m"

Здесь необходимо заменить 0.0.0.0 на внешний IP вашего сервера, а строку в кавычках на ваш собственный общий ключ. Быстро сгенерировать рандомную строку вы можете например моим сервисом или такой командой на вашей Ubuntu:

openssl rand -hex 10

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

apt-get install ppp lsof

5. Открываем файл /etc/xl2tpd/xl2tpd.conf, стираем его содержимое и добавляем следующее:

[global]
ipsec saref = yes
saref refinfo = 30

[lns default]
ip range = 192.168.1.2-192.168.1.254
local ip = 192.168.1.1
require authentication = yes
refuse pap = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
;ppp debug = yes
;debug avp = yes
;debug network = yes
;debug state = yes
;debug tunnel = yes

Здесь в ip range вы указываете пул адресов, которые будут выдаваться клиентам, подключающимся к вашему L2TP/IPsec VPN, а в local ip – локальный ip шлюза из этой подсети, но не входящий в пул (обычно первый адрес в подсети). Последние строки вы можете раскомментировать в случае, если вам нужен более подробный лог соединения.

6. Создаем файл /etc/ppp/options.xl2tpd и добавляем следующее содержимое:

require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
auth
mtu 1460
mru 1460
crtscts
hide-password
modem
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

Адреса DNS можете указать другие, если необходимо.

7. Пользователей будем добавлять в файл /etc/ppp/chap-secrets:

#username	server		password		IP
user1		l2tpd		password1		*
user2		l2tpd		password2		*

8. Открываем стандартный файл /etc/sysctl.conf и добавляем в конец файла параметры для форвардинга пакетов и отключения ICP-редиректов:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

9. Открываем стандартный файл /etc/rc.local и добавляем в конец файла перед строкой exit 0:

for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done

10. Посмотрите название сетевого интерфейса командой ifconfig. Если он начинается на eth, то смело добавляем правило iptables следующей командой:

iptables -t nat -A POSTROUTING -j SNAT --to-source 0.0.0.0 -o eth+

Не забудьте заменить 0.0.0.0 на внешний IP вашего сервера. Если название сетевого интерфейса отличается, то в eth+ замените буквенный префикс на префикс вашего интерфейса.

11. Сохраняем правила NAT в файл командой:

iptables-save > /etc/iptables.conf

12. Открываем файл /etc/network/interfaces и добавляем в конец файла строку:

pre-up /sbin/iptables-restore < /etc/iptables.conf

Таким образом, правила iptables будут добавляться автоматически при перезагрузке сервера.

Теперь можно перезагрузить сервер для применения всех изменений. После этого вы можете выполнить команду ipsec verify для проверки корректности настройки IPsec. У меня вот такие результаты:

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.38/K3.13.0-144-generic (netkey)
Checking for IPsec support in kernel                            [OK]
 SAref kernel support                                           [N/A]
 NETKEY:  Testing XFRM related proc values                      [OK]
        [FAILED]

  Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
  or NETKEY will accept bogus ICMP redirects!

        [OK]
Checking that pluto is running                                  [OK]
 Pluto listening for IKE on udp 500                             [OK]
 Pluto listening for NAT-T on udp 4500                          [OK]
Two or more interfaces found, checking IP forwarding            [FAILED]
Checking NAT and MASQUERADEing                                  [OK]
Checking for 'ip' command                                       [OK]
Checking /bin/sh is not /bin/dash                               [WARNING]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

На некоторые предупреждения и ошибки можно не обращать внимания. Теперь вы можете попробовать подключиться к вашему L2TP/IPsec VPN используя логин, пароль и общий ключ, который указывали в конфигурации.

UPD 2023:

На новых системах уже нет возможности сохранять правила iptables способом, описанным выше. И вообще, желательно отказаться от iptables-save по той простой причине, что есть сервисы, которые сами добавляют свои правила в iptables после перезагрузки машины (например Docker) и могут возникнуть конфликты с уже сохраненными через iptables-save правилами.

Поэтому проще делать следующим образом:

Сначала вы создаете iptables.sh и прописываете в него все собственные правила, например так:

#!/bin/sh
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ICMP
iptables -A INPUT -p icmp -j ACCEPT

# SSH 
iptables -A INPUT -s 5.5.5.5/32 -p tcp --dport 22 -j ACCEPT

# Веб-сервер
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Zabbix Agent
iptables -A INPUT -s 5.5.5.5/32 -p tcp --dport 10050 -j ACCEPT

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Затем добавляете файлу права на запуск: chmod +x /root/iptables.sh и добавляете в крон:

@reboot root /root/iptables.sh >/dev/null 2>&1

Поднимаем L2TP/IPsec через Docker на 1 минуту

Предполагается, что у вас уже установлен Docker. Если нет – можете прочитать, как его установить.

Получаем образ:

docker pull teddysun/l2tp

Создаем файл /etc/l2tp.env и добавляем следующее содержимое:

VPN_IPSEC_PSK=syrz3qfkbe2koeer7o1m
VPN_USER=user1
VPN_PASSWORD=password1

Если на вашем сервере несколько внешних интерфейсов, то нужно указать IP, на котором будет работать VPN. Добавляем строчку:

VPN_PUBLIC_IP=5.5.5.5

Не забудьте заменить IP на ваш внешний IP.

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

Убедитесь, что в вашем iptables открыты 500 и 4500 UDP порты.

Запускаем контейнер с именем l2tp:

docker run -d --privileged -p 500:500/udp -p 4500:4500/udp --name l2tp --restart=always --env-file /etc/l2tp.env -v /lib/modules:/lib/modules teddysun/l2tp

На этом всё. Логи можно посмотреть с помощью команды docker logs l2tp

]]>
https://alexell.ru/blog/ubuntu/podnimaem-vpn-pptp-server-na-ubuntu.html <![CDATA[Поднимаем VPN – PPTP сервер на Ubuntu]]> Wed, 18 Apr 2018 09:23:00 +0000

Поднимаем VPN – PPTP сервер на Ubuntu

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Поднимаем PPTP сервер на Ubuntu

В этой статье я расскажу как поднять собственный PPTP сервер на Ubuntu. Почему именно PPTP? У каждого свои цели и задачи, кому-то нужен PPTP, кому-то L2TP/IPSec, кому-то IKEv2, а может и OpenVPN. Я постараюсь написать статьи по установке и настройке хотя бы двух протоколов VPN на Ubuntu и начну с PPTP. Все описанные действия производились на Ubuntu 14.04.5 LTS. Напоминаю, что дешевые VPS во Франции для запуска своего VPN вы можете посмотреть здесь.

Для установки понадобятся права root пользователя или sudo.

1. Устанавливаем необходимые пакеты:

apt-get install ppp pptpd

После окончания установки, нам понадобится отредактировать несколько файлов. Для изменения файлов вы можете пользоваться любым удобным для вас способом, хоть nano, хоть визуальными редакторами и т.д.

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

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

2. Открываем файл /etc/pptpd.conf, находим и раскоментируем (если вдруг закоментированы) строки localip и remoteip, затем прописываем свою ip адресацию.

localip 172.16.0.1
remoteip 172.16.0.2-254
  • localip – ip адрес из выбранной вами подсети, который будет являться локальным шлюзом для клиентов VPN.
  • remoteip – пул ip адресов для раздачи клиентам VPN.

Если на вашей машине несколько внешних IP адресов, то вы можете указать конкретный IP, по которому будет доступно подключение к VPN серверу. В конце файла добавьте:

listen внешний_ip

3. Открываем файл /etc/ppp/pptpd-options и добавляем в конце файла:

mtu 1400
mru 1400
auth
require-mppe

В этом же файле при необходимости вы можете указать конкретные DNS, которые будут использоваться при подключении через VPN. Найдите и раскомментируйте строки ms-dns:

ms-dns 8.8.8.8
ms-dns 8.8.4.4

4. Открываем стандартный файл /etc/sysctl.conf, находим и раскомментируем строку:

net.ipv4.ip_forward=1

5. Добавляем необходимые правила в iptables:

iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 1723 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Обратите внимание, что eth0 – имя вашего сетевого интерфейса. Вы можете узнать его с помощью команды ifconfig

Если вам необходимо, чтобы была локальная сеть между клиентами, подключенными к VPN, добавьте следующие правила в iptables:

iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 172.16.0.0/24 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPT

Обратите внимание, что 172.16.0.0/24 – локальная подсеть, которую вы себе выбрали, а ppp0 – имя pptp интерфейса.

Для сохранения iptables, выполните команду:

iptables-save

6. Пользователей для подключения к VPN серверу добавляем в файле /etc/ppp/chap-secrets

user1	pptpd	password1	"*"
user2	pptpd	password2	"172.16.0.2"
  • user1 – имя пользователя
  • password1 – пароль пользователя
  • “*” – локальный ip будет выдаваться из пула, указанного в файле /etc/pptpd.conf
  • “172.16.0.2” – пользователю будет присвоен указанный ip адрес.

7. Перезапускаем сервис pptpd для применения новых настроек:

service pptpd restart

Ваш PPTP сервер на Ubuntu запущен!

P.S. Если вдруг вы столкнетесь с тем, что добавленные правила iptables пропадают после рестарта firewall или перезагрузки машины, то сделайте действия, описанные ниже.

1. Добавляем заново все правила, как описано в 5-м шаге.
2. Сохраняем правила в конфиг:

iptables-save > /etc/iptables.conf

3. Открываем файл /etc/network/interfaces и добавляем в самый конец:

pre-up /sbin/iptables-restore < /etc/iptables.conf

Теперь можете перезагрузить Firewall или всю машину и убедиться, что правила iptables сохраняются.

UPD 2023:

  1. Если ваши цели связаны с анонимностью и безопасностью, я крайне не рекомендую использовать PPTP. Лучше посмотрите в сторону OpenVPN или Wireguard.
  2. На новых системах уже нет возможности сохранять правила iptables способом, описанным выше. И вообще, желательно отказаться от iptables-save по той простой причине, что есть сервисы, которые сами добавляют свои правила в iptables после перезагрузки машины (например Docker) и могут возникнуть конфликты с уже сохраненными iptables-save через iptables-save правилами.

Поэтому проще делать следующим образом:

Сначала вы создаете iptables.sh и прописываете в него все собственные правила, например так:

#!/bin/sh
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ICMP
iptables -A INPUT -p icmp -j ACCEPT

# SSH 
iptables -A INPUT -s 5.5.5.5/32 -p tcp --dport 22 -j ACCEPT

# Веб-сервер
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Zabbix Agent
iptables -A INPUT -s 5.5.5.5/32 -p tcp --dport 10050 -j ACCEPT

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Затем добавляете файлу права на запуск: chmod +x /root/iptables.sh и добавляете в крон:

@reboot root /root/iptables.sh >/dev/null 2>&1
]]>
https://alexell.ru/blog/various/prezentatsiya-alboma-becoming-a-hero.html <![CDATA[Презентация альбома Becoming A Hero]]> Sun, 15 Apr 2018 09:02:00 +0000

Презентация альбома Becoming A Hero

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Becoming A Hero

Всем привет! Сегодня мне бы хотелось рассказать о замечательной отечественной рок-группе Becoming A Hero, записывающей песни на английском языке, которые действительно звучат по западному. Вообще, я слушаю много различных рок-групп, даже мало известных, невольно сравниваю их музыку и хочу сказать, что группа Becoming A Hero заслуживает уважения и особого внимания. Женский вокал прекрасен, а музыка очень живая, разнообразная, наполненная энергией и передающая слушателям чувства и эмоции участников группы. Я очень высоко ценю музыку, которую делают от души, а не для того, чтобы зарабатывать деньги, поэтому после презентации альбома группы, решил написать небольшую статью с полезными материалами.

Об этой группе я узнал 6 апреля 2017 года, увидев ее в расписании выступлений проекта “Музыка в метро“. Сразу после этого я познакомился с прекрасной девушкой – вокалисткой группы Becoming A Hero Лерой Грин и с тех пор слежу за творчеством группы, стараюсь не пропускать их концерты, а также по возможности посещаю интересные лекции Леры, которые она проводит в Посольстве США на английском языке.

Состав группы Becoming A Hero:

  • Лера Грин (вокал)
  • Куанг (соло-гитара)
  • Боря (ритм-гитара)
  • Лай (бас-гитара)
  • Саша (уданые)

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

Немного предыстории:

Группа была образована в апреле 2014 года в Москве и первое время называлась Wired Aloud. Уже в сентябре ребята выпустили свой первый сингл “We’re Done“. В июле 2015 года вышел в свет трэк Cry Out Loud, который стал Гимном Роупджамперов России. Помимо этого ребята принимали участие, становились финалистами и побеждали на различных конкурсах. В 2016 году в группе произошли изменения, на смену одному из гитаристов пришел Боря. Спустя еще некоторое время ребята начали думать над новым названием группы и в итоге группа получила известное нам название Becoming A Hero. Под новым брэндом в этом же году группа победила на конкурсе Metro On Stage и выступила на День Города возле Красной Площади, собрав большую аудиторию.

В настоящие дни

1 марта 2018 года состоялась премьера клипа на первую песню группы, исполненную на русском языке – “Монолог“. На самом деле путь этого клипа от простой идеи до его премьеры был длинным и не без трудностей, но преодолев все преграды, ребята стали еще более сплоченным коллективом. Вот, что говорит вокалистка и фронтвумэн группы Лера Грин об этом клипе (часть цитаты с musecube.org):

Девушка умирает и, даже находясь «на той стороне», не может забыть своих сильных чувств к возлюбленному, надеясь, что он помнит о ней. После смерти она всего лишь просит его хранить тот огонь, что когда-то горел в их сердцах. Карусель в клипе — как символ вечного круговорота жизненных циклов во Вселенной. Не знаю, у меня прям мурашки по коже побежали, когда слова сложились в строчки… Впервые я написала такой текст на русском языке, которым хочется поделиться со всеми.

12 апреля в клубе Rock House состоялась премьера альбома Becoming A Hero, состоящего из 10 песен, включая английскую версию песни “Монолог“, называющуюся “Love Is“.

Becoming A Hero - альбом

Ссылки на альбом Becoming A Hero:

Небольшое видео с концерта:

Специально для читателей моего блога и всех поклонников группы Becoming A Hero, я подготовил потрековые рипы альбома, полученные в достоверном режиме через Exact Audio Copy в разных форматах (lossless и lossy) с официального диска, который купил на концерте группы.

Скачать FLAC, lossless

Скачать MP3, lossy

UPD 2022: В 2019 году Лера Грин и некоторые участники группы перехали в город ангелов (Лос-Анджелес). В группе появился новый гитарист Taylor, ну и в июле 2022 вышел новый сингл и музыкальное видео к нему. Если интересно, вы можете почитать интервью о новой жизни в ЛА и оценить новый синг:

]]>
https://alexell.ru/blog/games/bystraya-zagruzka-kart-modelej-i-muzyki-dlya-servera-cs-source.html <![CDATA[Быстрая загрузка карт, моделей и музыки для сервера CS: Source]]> Thu, 05 Apr 2018 08:32:00 +0000

Быстрая загрузка карт, моделей и музыки для сервера CS: Source

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Быстрая загрузка карт для Counter-Strike: Source

Добрый день, дорогие гости и читатели моего блога.

В этой статье речь пойдет о подключении такой полезной функции как быстрая загрузка карт, моделей и музыки для вашего сервера CS: Source, работающего на любой ОС.

Когда вы подключаетесь к серверу CS: Source, на ваш компьютер автоматически начинают загружаться нестандартные файлы, используемые на сервере: карты, модели, звуки и др.

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

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

Быстрая загрузка контента: процесс подключения

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

1. Подготовка файлов.

Для начала копируем/скачиваем с вашего сервера папки с загружаемыми файлами. Это папки cstrike/maps, cstrike/materials, cstrike/models и cstrike/sound. Создаем где-нибудь на компьютере папку cstrike и помещаем в нее только что скачанные папки со всеми файлами.

2. Упаковка файлов.

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

Распаковываем скачанный архив и открываем папку bzip. В отдельном окне проводника открываем папку cstrike с вашими загруженными файлами для сервера. Переходим в папку maps, выделяем все файлы (Ctrl+A) и перетаскиваем их прямо на исполняемый файл архиватора bzip2.exe. Вот пример:

Быстрая загрузка контента для CS: Source - bzip

Архиватор не имеет GUI, поэтому он начнет процесс архивации файлов в консольном окне:

Быстрая загрузка контента для CS: Source - bzip

Удобная фича архиватора – он удаляет оригиналы файлов, которые запаковал, т.е. вы сразу получите готовую папку с запакованными файлами для загрузки на сайт. Консольное окно автоматически закроется, когда архиватор запакует все файлы, которые вы ему отправили. Результат:

Быстрая загрузка контента для CS: Source - bzip

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

3. Загрузка файлов на сайт.

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

Вы можете загрузить файлы в любую директорию любого вашего домена или поддомена. Важно, чтобы конечная директория с папками называлась cstrike, именно поэтому в самом начале мы создали ее на вашем компьютере. Если вы будете загружать файлы по FTP, то вы просто можете открыть в FileZilla или другом удобном вам FTP-клиенте нужную директорию и перетащить туда папку cstrike с вашего компьютера. Если вы будете загружать файлы на хостинг через панель (например ISP Manager), то сначала запакуйте всю папку cstrike в zip архив, а затем загрузите его в нужную директорию в Менеджере файлов вашей панели управления. Там же вы найдете кнопку “Извлечь”, с помощью которой ваша папка cstrike будет распакована в указанную вами директорию.

ISP Manager

Теперь вы можете открыть в браузере директорию cstrike на вашем сайте и убедиться что все в порядке. По умолчанию, возможность просмотра директорий обычно отключена, поэтому вы можете увидеть в браузере ошибку 403 – доступ запрещен:

Чтобы разрешить просмотр этой директории, создайте в ней файл .htaccess и добавьте в него один параметр:

Options +Indexes

Сохраните файл, после чего обновите вкладку с вашим адресом cstrike в браузере и увидите, что файлы стали доступны:

Быстрая загрузка контента для CS: Source - папка на сайте

4. Подключение быстрой загрузки.

Осталось подключить возможность быстрой загрузки файлов в конфигурации вашего сервера CS: Source. Для этого перейдите в директорию, где расположен ваш сервер (по FTP или через панель) и откройте файл cstrike/cfg/server.cfg

Добавьте в любое место следующие параметры:

sv_allowdownload 1
sv_allowupload 1
sv_downloadurl "http://ваш сайт/cstrike/"

Проверьте поиском (Ctrl+F) нет ли дублей этих параметров в вашем server.cfg. Если есть, удалите. Также убедитесь, что параметр sv_pure в вашем конфиге имеет значение 0, иначе серверу не будет разрешено загружать нестандартные файлы, а игроки не смогут загружать спреи. Сохраните файл и перезагрузите сервер CS: Source. На этом настройка быстрой загрузки файлов окончена. Вы можете подключиться к вашему серверу в CSS и при подключении увидите загрузку именно файлов в формате .bz2, а также заметите, что подключение происходит гораздо быстрее. Напоминаю, что вы можете скачать готовый архив с 41 картой для CS: Source в этой статье.

]]>
https://alexell.ru/blog/various/zapis-kontserta-alan-walker-31-03-2018-moskva.html <![CDATA[Запись концерта Alan Walker 31.03.2018 (Москва)]]> Tue, 03 Apr 2018 08:17:00 +0000

Запись концерта Alan Walker 31.03.2018 (Москва)

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное

Всем привет! 31 марта в клубе Adrenaline Stadium (г. Москва) состоялось грандиозное выступление Alan Walker! Мы заранее покупали билеты, с нетерпением ждали и готовились к этому дню. А тем, кто там не был, я даю возможность посмотреть запись концерта Alan Walker.

И вот настал этот день, огромная очередь на входе, огромный зал, радостные лица, предвкушающие появление их любимого артиста… Его появление под овации и аплодисменты…

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

На концерте Alan Walker отыграл свои самые популярные песни, такие как Faded, Alone, All Falls Down, Sing Me to Sleep, ремиксы на них, а также поддержал других известных артистов. В концертном зале было ~4500 человек, включая меня и мы увидели прекрасное шоу Alan Walker, а также получили невероятный драйв и огромный заряд энергии!

Спасибо Alan Walker за концерт в России!

Полное видео:

]]>
https://alexell.ru/blog/games/kak-nahodit-i-dobavlyat-karty-na-server-cs-source.html <![CDATA[Как находить и добавлять карты на сервер CS: Source]]> Mon, 02 Apr 2018 07:41:00 +0000

Как находить и добавлять карты на сервер CS: Source

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Как находить и добавлять карты на сервер CS: Source

Добрый день, уважаемые гости и читатели.

Общаясь в чатах и на форумах по игровым серверам, я вижу что начинающие держатели своих серверов часто интересуются где взять новые карты и как добавить их на свой сервер. В этой статье вы найдете все ответы на эту тему. На какой ОС запущен ваш сервер не имеет значения, расположение карт везде одинаковое. Стандартные карты на сервере расположены в папке cstrike/maps/ и чтобы добавить новые карты, вам нужно будет загружать их именно в эту папку.

Где взять карты?

Если вас интересуют популярные карты, такие как $2000$, aim_deagle, awp_city, awp_india и другие, то проще всего найти их на вашем компьютере, где вы играете в CS: Source.

  1. Открываем папку установленной игры: steamapps\common\Counter-Strike Source
  2. Переходим в папку, куда загружаются карты: \cstrike\download\maps

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

Сборки карт

Специально для вас я собрал 41 карту в один zip архив, который включает в себя 18 стандартных карт и 23 дополнительные популярные карты.

Список карт

$10000$
$2000$
35hp_2_2010
aim_ag_texture2
aim_ag_texture_city_advanced
aim_deagle7k
awp_4t
awp_arena
awp_assault
awp_beta_32
awp_city
awp_crazyjump2007
awp_dark_assault
awp_darthprawn
awp_dust_sky
awp_garden
awp_india
awp_lego_2
awp_map_css
awp_map_run
cs_assault
cs_compound
cs_havana
cs_italy
cs_militia
cs_office
de_alexandra2
de_aztec
de_cbble
de_chateau
de_dust
de_dust2
de_icewerk
de_inferno
de_nuke
de_piranesi
de_port
de_prodigy
de_tides
de_train
de_tuscan

Стандартный формат карт (.bsp):

Формат карт для быстрой загрузки (.bsp.bz2):

Куда загружать карты?

Карты имеют расширение .bsp, а также дополнительные файлы .nav (файл навигации для ботов) и .txt (описание карты). Если на вашем сервере нет ботов, то файлы .nav не нужны. Вы можете скопировать в отдельную папку все карты .bsp, которые хотите добавить на свой сервер, затем просто загрузите их в директорию cstrike/maps/ на вашем сервере.

Осталось только открыть файл cstrike/cfg/mapcycle.txt и добавить новые карты в этот список. Расширение там указывать не нужно, только название файлов карт. Если вы используете плагины, которые получают список карт не из файла mapcycle.txt, то не забудьте добавить новые карты в список самого плагина.

]]>
https://alexell.ru/blog/games/ustanovka-servera-counter-strike-source-na-linux-ubuntu.html <![CDATA[Установка сервера Counter-Strike: Source с нуля на Linux (Ubuntu)]]> Wed, 28 Mar 2018 06:53:00 +0000

Установка сервера Counter-Strike: Source с нуля на Linux (Ubuntu)

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Установка сервера Counter-Strike: Source

Добрый день, дорогие читатели и гости, которым интересна эта тематика.

Как известно, для работы игрового сервера меньше ресурсов (а значит и меньше затрат) нужно именно на ОС семейства Linux. Установка сервера Counter-Strike: Source на Linux с нуля в целом не сложная, но если вы не разбираетесь в Линуксе, тогда лучше все делать по пошаговой инструкции. В интернете можно найти информацию по установке сервера с нуля на Linux, но достаточно грамотных статей я встречал всего парочку. Недавно мы с друзьями запустили свой сервер для CS: Source, поэтому я решил свежим взглядом описать и показать весь процесс, а также обратить внимание на возможные проблемы и пути их решения.

Сразу оговорюсь, что речь идет об установке официального Steam сервера, потому что я не одобряю пиратство (по крайней мере с играми) и вам не советую. На момент написания статьи, цена на Counter-Strike: Source в Steam – всего 435р.

Для запуска сервера Counter-Strike: Source на Linux нам подойдет компьютер или VDS (виртуализация KVM) на любой ОС семейства Linux, имеющий минимум 1 ядро, 1 Гб ОЗУ и свободные 3 Гб места на диске под сам сервер. Если вы собираетесь запускать сервер дома, то вам понадобится внешний IP адрес или придется настраивать no-ip. Недорогие VDS с DDoS защитой вы можете посмотреть здесь. В этой статье мы будем удаленно устанавливать сервер на Ubuntu 14.04.5 LTS.

Если у вас под рукой компьютер на ОС Linux, то вам понадобится консоль и менеджер файлов, а если подключаться будем удаленно, то нам понадобятся shell-клиент PuTTY и FTP-клиент FileZilla или SFTP+FTP клиент WinSCP.

Подготовка

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

sudo apt-get install lib32gcc1 libc6-i386

Запускать сервер в целях безопасности рекомендуется от имени отдельного пользователя, поэтому давайте создадим нового пользователя. В моем примере это будет test.

sudo adduser test

После выполнения этой команды, вам нужно будет указать пароль для создаваемого пользователя, а также дополнительные данные. Вы можете пропустить ввод доп. данных, просто нажимая Enter. В конце, вам нужно будет подтвердить ввод данных, отправив Y.

Установка сервера Counter-Strike - добавление пользователя

Установка сервера Counter-Strike

1. Заходим под именем созданного пользователя:

su test

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

2. Теперь нам нужно создать папку для установки SteamCMD и перейти в нее. Для этого по очереди набираем команды:

mkdir steamcmd && cd steamcmd

Если все прошло успешно, вы увидите в консоли путь ~/steamcmd$

3. Скачиваем архив SteamCMD:

wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz

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

tar -xvzf steamcmd_linux.tar.gz

После распаковки, у вас появятся файлы и папки:

linux32/
linux32/libstdc++.so.6
linux32/steamcmd
steamcmd.sh
steam.sh

Если это так, значит все хорошо и можно удалить скачанный архив:

rm steamcmd_linux.tar.gz

4. Запускаем командную оболочку Steam:

./steamcmd.sh

Дожидаемся загрузки обновлений, после чего должна появиться консоль SteamCMD, вы поймете это по заголовку Steam>

Установка сервера Counter-Strike - SteamCMD

5. Получаем гостевой доступ к сервису скачивания серверов:

login anonymous

Должно появиться 2 строчки, в конце обеих должно быть OK.

Теперь указываем, в какую папку будем скачивать сервер (папка будет создана автоматически). Сервер для CS: Source можно установить в папку css, но вы можете назвать ее по своему.

force_install_dir ../css/

Директория css будет создана в домашнем каталоге, рядом с папкой steamcmd.

6. Запускаем загрузку сервера игры, указывая специальный стимовский app_id. Для CS: Source это 232330.

app_update 232330 validate

Начнется загрузка, которая будет выдавать Update state в процентах. Размер загружаемых данных примерно 2.30 Гб, поэтому придется подождать несколько минут до окончания загрузки.

Примечание: Если вдруг загрузка прервется и у вас будет написано Error! App '232330' state is 0x402 after update job или похожая ошибка, то просто снова отправьте команду app_update 232330 validate и процесс продолжится с того места, где прервался.

После успешной загрузки, вы увидите следующее:

Установка сервера Counter-Strike - завершение загрузки

7. Выходим из SteamCMD нажатием сочетания клавиш Ctrl+C или отправив команду quit.

Затем переходим в папку загруженного сервера.

Вот и все. Сервер фактически установлен. Теперь мы можем попробовать сделать тестовый запуск.

cd ../css && ./srcds_run -console -game cstrike +maxplayers 20 +port 27015 +map de_dust

У вас перед глазами пробежит много строк и в конце должно быть VAC secure mode is activated.

Установка сервера Counter-Strike - запуск сервера

Однако, как мы видим на скриншоте, в процессе загрузки сервера возникли некоторые ошибки. Иногда он запускается при их наличии, а иногда может выдать FATAL ERROR.

Если при запуске вы видите ошибку ... /.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory, то не пугайтесь, она легко поправима:

ln -s ~/steamcmd/linux32 ~/.steam/sdk32

Эта команда создаст символьную ссылку с директории sdk32 на директорию linux32 и при следующем запуске, таких ошибок вы уже не увидите:

Установка сервера Counter-Strike - успешный запуск

Первичная настройка сервера

Теперь давайте перейдем к визуальной работе с файлами, поскольку это удобнее, чем в консоли. Для этого подключаемся по FTP к нашему серверу (в случае удаленной работы).

1. Заходим в папку /css/cstrike/cfg/

В этой папке должен находиться главный файл конфигурации сервера – server.cfg. Вы можете создать этот файл, найти его описание и параметры в интернете, затем загрузить готовый файл в указанную папку по FTP. Но я рекомендую воспользоваться лучшим подробным конфигом, который я нашел и подкорректировал – в нем все настройки описаны на русском языке и вам не составит труда изменить все под ваши нужды. Скачайте его, затем откройте в любом текстовом редакторе, измените название сервера и другие необходимые настройки под себя, затем загрузите в папку css/cstrike/cfg на вашем сервере.

2. В этой же папке вы увидите и другие файлы конфигурации. Обратите внимание на файлы motd_default.txt, motd_text_default.txt и mapcycle_default.txt. Эти файлы вы можете скачать, изменить под себя и загрузить на сервер, убрав суффикс default.

  • motd.txt – файл используется для отображения информации в окне приветствия при подключении к серверу. Можно использовать HTML, картинки и даже музыку.
  • motd_text.txt – простой текстовый вариант приветствия, если не используется motd.txt
  • mapcycle.txt – файл со списком карт, смена карт происходит по списку из него. В него вы будете добавлять и новые карты, если будете загружать их на сервер.

3. При запуске сервера мы в логах видели надпись anonymous game server account. Для полноценной работы сервера и проверки игроков по STEAM_ID, нам нужно привязать сервер к Steam. Для этого переходим на эту страницу Steam, авторизуемся в своем аккаунте, внизу страницы вводим номер приложения: 240 и нажимаем кнопку Создать. Полученный идентификатор копируем и сохраняем где-нибудь, он нам скоро понадобится.

4. Чтобы сервер было проще запускать, мы можем создать специальный файл для запуска, в котором будет прописана команда запуска сервера с необходимыми параметрами. Позже, вы сможете добавить этот файл в автозагрузку (Cron) и сервер игры будет запускаться автоматически при перезапуске самого сервера Linux.

Создаем на рабочем столе текстовый файл start.sh. В него прописываем:

#!/bin/bash

./srcds_run -console -game cstrike +port 27015 +sv_setsteamaccount E25F0F3C2B8DADDCC5589D5538CF7343 +maxplayers 20 +map de_dust2 &
  • port – порт на сервере, вы можете указать любой, начиная от 27015
  • если на вашем VDS несколько внешних IP, добавьте +ip ваш_ip перед +port;
  • sv_setsteamaccount – здесь как раз и указываем идентификатор, который получили в Steam;
  • maxplayers – кол-во слотов на сервере;
  • map – карта.

Сохраняем файл, в FileZilla переходим в папку /css/ и загружаем созданный файл туда. Не забудьте добавить этому файлу права на исполнение:

chmod +x /home/test/css/start.sh

Теперь вы можете запускать сервер командой ./start.sh, находясь в папке css, а также добавить этот файл в Cron на автозапуск. После запуска сервера, обратите внимание на страницу, где получали идентификатор Steam для сервера, у вас должно обновиться поле “Последний вход” – это значит что сервер корректно запустился с привязкой Steam.

На этом установка сервера Counter-Strike: Source завершена. Для корректной работы сервера через интернет, на компьютере/VDS, где вы его запускаете, должны быть открыты порты 27000-27040.

P.S. В следующих статьях я расскажу о том, как добавлять карты на сервер, сделать быструю загрузку файлов, а также о SourceMod и возможностях плагинов для него.

]]>
https://alexell.ru/blog/games/euro-truck-simulator-2-multipleer.html <![CDATA[Euro Truck Simulator 2: Мультиплеер]]> Mon, 19 Feb 2018 03:44:00 +0000

Euro Truck Simulator 2: Мультиплеер

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Euro Truck Simulator 2: Мультиплеер

Всем привет. Сегодня хотелось бы поделиться интересной находкой: мультиплеер для игры Euro Truck Simulator 2 и American Truck Simalator. Я являюсь любителем играть в различные симуляторы, будь то симулятор метро, поезда или даже градостроительные симуляторы, поскольку считаю, что они являются в какой-то мере развивающими.

В игре Euro Truck Simulator 2 вы занимаетесь доставкой грузов в различные города и компании. Трафик в игре конечно есть, все машины катаются с соблюдением ПДД, хотя иногда там бывают “якобы” аварии – ограждения на дорогах, которые нужно объезжать. Меня все устраивало, пока друг не рассказал про мультиплеер.

Мультиплеер конечно же сделан за рубежом командой энтузиастов, является бесплатным и востребованным среди игроков. Имеет несколько серверов для каждой из игр (ETS и ATS), десктопный клиент и встроенные моды (пока видел только сезонные, например сейчас доступен мод, добавляющий снег).

Особенности мультиплеера

  • Работает только со Steam-версиями ETS и ATS
  • Для запуска игр используется специальный лаунчер-клиент
  • Для авторизации и других возможностей в игре у мультиплеера свой оверлей
  • Игровой трафик на дорогах полностью отсутствует
  • На дорогах вы катаетесь только с реальными игроками
  • Над грузовиками отображаются никнеймы игроков
  • Имеется общий чат
  • Имеется радио-связь с игроками на расстоянии не более 700 метров
  • Имеется команда “/fix”, которая бесплатно ремонтирует ваш грузовик прямо в дороге (трейлер не ремонтирует!)
  • На карте в навигаторе отображается движение игроков
  • имеются различные настройки

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

  • Для начала, у вас должна быть установлена Steam-версия Euro Truck Simulator или American Truck Simulator
  • Зарегистрируйтесь на сайте мультиплеера
  • Скачайте и установите клиент
  • При установке, укажите папку установленной ETS и/или ATS. Например D:\Games\steamapps\common\Euro Truck Simulator 2
  • Ярлык клиента появится на рабочем столе, игру запускать нужно через него.
TruckersMP

Так выглядит клиент, когда установлены обе игры. Слева и справа внизу окна появляются кнопки для запуска игр. Игра по кнопке запускается как положено через Steam, т.е. время игры будет засчитываться как обычно. Достижения также вы можете получать, как если бы играли без мультиплеера. Если для клиента есть обновления, кнопки запуска игр будут недоступны, появится небольшое меню, где нужно будет нажать на кнопку “Install Updates”, процесс обновления достаточно быстрый.

Когда вы подключаетесь и заходите в игру, то где бы вы не находились, на несколько секунд вы появляетесь в “призрачном” режиме, т.е. на экране вы полупрозрачны для других игроков и столкновение с вами невозможно. В городах есть зоны, в которых игроки вообще не могут сталкиваться друг с другом (проезжаете насквозь, будто их нет) – это все компании, где вы берете заказы на перевозку, а также все гаражи, все автосалоны, где вы ремонтируете грузовики или останавливаетесь на отдых. Это сделано потому что в таких зонах происходит большое скопление игроков и передвигаться там всем сразу физически становится трудно, а когда игроков много – вообще невозможно.

С мультиплеером также пришло небольшое неудобство – игру нельзя поставить на паузу (F1 или Esc) находясь в движении, поскольку тогда вы “замрете” посреди дороги, что может спровоцировать столкновение со следующим за вами грузовиком. Для того, чтобы выйти на паузу, остановите грузовик на обочине, после чего вам будет разрешено поставить игру на паузу. Это приемлемое решение проблемы, на мой взгляд. На самом деле, по своим наблюдениям, я заметил, что в мультиплеере реально все продумано. Играть в нем комфортно.

Управление и настройки, когда вы в игре

  • [Tab]: список игроков в радиусе 700 метров. Если нажать ПКМ после Tab, то вы сможете указателем мыши выбирать игроков для различных действий, а также выйти в настройки мультиплеера (шестеренка внизу окошка).
  • [X]: радио-связь с игроками в радиусе 700м. Работает по принципу голосовой связи в Counter Strike. Нажми и говори.
  • [Y]: общий чат и консоль.

Итоги

Играть в мультиплеере гораздо интереснее, чем без него, потому что по дорогам катаются реальные игроки и есть общение. На серверах есть модераторы, которые следят за движением на дорогах. Запрещено намеренно провоцировать аварии и столкновения, останавливаться посреди дороги, загораживая проезд своим грузовиком или создавать иные неудобства движению транспорта. На игрока, который намеренно спровоцировал аварию или мешает движению, можно подать жалобу через меню или через чат. Игроки – это не генерируемые игрой водители, а это значит, что катаются они с большой скоростью и с нарушениями ПДД, поэтому при перевозке грузов, будьте внимательнее на дорогах. В Зачастую случаются аварии, даже массовые, поэтому держите дистанцию и не теряйте бдительности, чтобы успеть вовремя затормозить, если трасса впереди вас будет закрыта столкнувшимися грузовиками. Конечно внутри городов все стараются более-менее придерживаться ПДД, потому что дороги там более узкие, а повороты более резкие. Поэтому рекомендую в городах передвигаться со скоростью, не превышающей разрешенную в навигаторе и останавливаться на красный свет, если в навигаторе видите игроков поблизости.

Успешной вам игры!

И напоследок – небольшой видео-обзор:

]]>
https://alexell.ru/services/internet-instrumenty.html <![CDATA[Интернет инструменты]]> Fri, 22 Dec 2017 03:21:00 +0000

Интернет инструменты

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Интернет инструменты от Alexell

Для удобства своей работы, а заодно и для всех, кому это может пригодиться – запустил интернет инструменты, которые будут полезны как IT специалистам, так и просто продвинутым пользователям. С помощью этих инструментов вы сможете:

  1. Определить местоположение вай-фай точки доступа по ее MAC-адресу
  2. Определить производителя сетевого устройства по MAC-адресу
  3. В один клик рассчитать параметры подсети

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

Определение местоположения Wi-Fi точки по ее MAC адресу

С помощью этого сервиса вы сможете определить координаты вай-фай роутера по его MAC-адресу с точностью до 150м в крупных городах. Сервис получает данные из нескольких источников: API приложений Яндекса, трафик которых отснифили и описали в статье на Хабре уже достаточно давно, а также базы Geomena, openBmap, OpenWifi.su, для удобного доступа к которым используется API товарища Mylnikov, за что ему спасибо. При поиске, сервис сначала обращается в Яндекс (местоположение у него определяется более точно), а если там не найдет информации по заданному MAC-адресу, то ищет в остальных базах. В настоящий момент сервис имеет доступ к информации о более 20 миллионах Wi-Fi точек по всему миру.

Определение производителя сетевого устройства по MAC адресу

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

IP калькулятор

Этот инструмент мгновенно рассчитает за вас адрес сети (network), обратную маску (wildcard), широковещательный адрес (broadcast), первый и последний хост, их количество, покажет предыдущий и следующий IP в подсети, а также предыдущую и следующую возможную подсеть с той же маской, которую вы выбрали.

UPD 2023: Ссылки изменены после запуска Uni-Tools.

]]>
https://alexell.ru/blog/games/chto-takoe-steam-i-zachem-on-nuzhen.html <![CDATA[Что такое Steam и зачем он нужен]]> Sun, 10 Dec 2017 15:47:55 +0000

Что такое Steam и зачем он нужен

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное

Мое личное мнение спустя 7 лет использования платформы.

Что такое Steam

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

Steam – это полноценная игровая платформа. Предпочитаю называть его так. Создан компанией Valve в 2000-х годах. Да-да, той самой Valve, которая разработала Counter Strike и другие игры. Сначала Steam был платформой для распространения игр от Valve, но с годами он превратился в огромную многофункциональную игровую платформу и социальную сеть для геймеров, сравнимую с Facebook или VK. Сейчас Steam предлагает уже около 30 000 игр в десятках различных жанров от самых разных студий разработки. Средний онлайн на платформе достигает 20 миллионов игроков со всего мира. Игры и приложения, распространяемые в Steam являются легальными и безопасными, ведь Steam является официальным магазином игр и приложений.

Какие платформы поддерживает Steam?

На текущий момент Steam доступен в веб-версии, имеет клиенты для Windows, OS X, Linux, PlayStation 3+, Android, iOS, а также клиент Steam Link на Samsung Smart TV, позволяющий запускать игры и даже смотреть игры VR прямо на вашем телевизоре.

Steam бесплатный?

Да, Steam полностью бесплатный. Вы платите только за игры и приложения, которые покупаете в нем. Купленные продукты добавляются на ваш аккаунт и навсегда становятся вашими. Также, при желании, вы можете покупать что-то на торговой площадке Steam. Как правило, это предметы интентаря. Но об этом позже.

Основные возможности Steam

  • Добавлять игры в список желаемого, чтобы не забыть купить, когда появится возможность.
  • Вы можете вернуть деньги, например если игра не понравилась (условия).
  • Покупать игры и другой контент со скидками до 80%. В Steam очень часто проходят акции и распродажи.
  • Устанавливать демо-версии игр бесплатно для ознакомления, если не уверены что понравится.
  • Добавлять в свою библиотеку бесплатные игры и приложения, которых в Steam немало.
  • Покупать игры в подарок другим пользователям.
  • Получать достижения Steam, а также достижения в играх, которые видно в профиле и вашей активности.
  • Прокачивать ваш профиль с помощью значков, которые создаются из карточек, которые выпадают во время игры.
  • Настраивать ваш профиль так как вам захочется – Steam дает достаточно возможностей для этого.
  • Покупать и обменивать на торговой площадке игровые предметы, карточки и другие предметы инвентаря.
  • Зарабатывать деньги, продавая на торговой площадке
  • Облачные сохранения – вам больше не надо беспокоиться о том, что вы забыли скопировать сэйвы перед переустановкой Windows.
  • Мастерская Steam (Steam Workshop) – место, где можно находить и подписываться на модификации к играм и создавать свои.
  • Автоматическое обновление игр. приложений и модификаций.
  • Знакомиться с играми в раннем доступе и участвовать в их развитии.
  • Устанавливать бета-версии будущих обновлений игры.
  • Откатываться на определенную предыдущую версию игры, если это предусмотрено.
  • Знакомиться с новостями и описанием обновлений игр прямо в своей библиотеке.
  • Семейный доступ – возможность делиться своей библиотекой игры с другими.
  • Вступать в различные сообщества и создавать свои
  • Добавлять друзей, видеть их профили, список желаемого и активность (достижения, публикации, покупки продуктов).
  • Подписывать друзей своими именами, чтобы не забыть кто есть кто
  • Общаться в текстовых и голосовых чатах, как с друзьями, так и в сообществах.
  • Делать скриншоты в играх и при желании публиковать их в своем профиле.
  • Писать комментарии в профилях пользователей, комментарии к любому контенту пользователей.
  • Писать обзоры игр и приложений, ставить свою оценку.
  • Присоединиться к игре друга в поддерживаемых онлайн-играх.
  • Вести трансляции без сторонних программ.
  • Наличие и поддержка VR игр.
  • Поддержка контроллеров.

Пожалуй на этом я остановлюсь. Список возможностей в Steam с годами стал настолько велик, что все их довольно сложно перечислить.

Особенности Steam

  • Удобный пользовательский интерфейс в темных тонах.
  • Доступность на более чем 28 языках.
  • Поддержка более 100 способов оплаты и более 35 валют.
  • Отсутствие необходимости указывать реальные персональные данные (кроме платежных средств) – вы можете представляться кем угодно.
  • Двухфакторная аутентификация (Steam Guard) для максимальной защиты вашего аккаунта (рекомендую подключать).
  • Античит Valve (VAC) защитит от тех, кто пытается получить привилегии над другими игроками нечестным способом.
  • Автономный режим позволит играть в некоторые игры, если у вас временно нет интернета.
  • Персональные рекомендации на основе ваших интересов.
  • Поиск игр по различным жанрам, топам, наличию скидок, поддержки VR и контроллеров, по рекомендациям друзей и т.п.

Дополнительно хочу отметить, что некоторые возможности Steam для новых пользователей недоступны, пока вы не пополните баланс или не купите игру не менее чем за 5$. Эта особенность помогает защитить пользователей Steam от спама, мошенников и недобросовестных пользователей.

Если вы все еще не до конца поняли что такое Steam, далее я поделюсь скриншотами некоторых разделов Steam.

Скриншоты разделов

Steam (мини-профиль)

Так выглядит мой мини-профиль. Мини-профили появляются как правило при наведении на ник или аватарку пользователя. Для мини-профилей можно устанавливать различные статичные и анимированные фоны. Делается это в редактировании профиля.

Steam (профиль)

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

Список доступных витрин:

  • Витрина редчайших достижений
  • Коллекционер игр
  • Витрина предметов
  • Предметы на обмен
  • Коллекционер значков
  • Любимая игра
  • Витрина скриншотов
  • Поле со своей информацией
  • Любимая группа
  • Витрина обзора
  • Витрина Мастерской
  • Витрина моей Мастерской
  • Любимое руководство
  • Витрина достижений
  • Успехи стимопланетянина
  • Витрина наград
  • Витрина перфекциониста

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

Магизин очков – это место, где можно за очки покупать смайлики для чатов, фоны, готовые стили оформления профиля и многое другое. Скриншот показывать не буду, это интереснее увидеть самому. Что касается очков – то их вы получаете при покупке контента в Steam.

Steam (друзья)

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

Steam (библиотека)

Библиотека – пристанище всех ваших игр и приложений. Вы можете создавать коллекции и таким образом разделять игры для удобства, как например это делаю я. Правая часть тоже настраивается, там можно добавлять разделы для отображения того, что вы хотите. Если провалиться в любую игру, то там в одном месте будет вся необходимая информация – ваша статистика, достижения, скриншоты, обзоры, также контент друзей и новости от разработчиков.

Steam (активность друзей)

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

Steam (группа)

Так выглядит страница группы на примере GTA V Community. Там есть обсуждения (что-то типа топиков на форуме), общий чат, объявления и прочее.

Пожалуй покажу еще несколько скриншотов из приложения Steam на iPhone.

Steam на iPhone

Steam на iPhone

Steam на iPhone

Ну и самое важное – Steam Guard. Тут вы можете получить код или авторизовать вход через QR код.

Steam на iPhone

Итоги

Подводя итоги, хочу сказать что ни разу не пожалел о том, что перестал играть в пиратские игры. Возможности, которые дает Steam во много раз превосходят любое желание сэкономить на покупке игр. Вы только представьте себе: ты всегда знаешь во что играют твои друзья, всегда видишь, когда они в сети, можешь написать им, посмотреть их стрим, когда ты на работе и не можешь играть. В активности ты видишь публикации друзей, их достижения и многое другое. Кроме того, делиться скриншотами тоже здорово. Потом спустя несколько лет смотреть старые скриншоты бывает очень забавно. Все это реально очень интересно, к этому быстро привыкаешь и обратно уже не хочется. Раньше, после покупки нового ПК или переустановки Windows нужно было бегать по торрент-трекерам в поиске игр, искать обновления и все такое прочее. Сейчас же, нужно лишь зайти в библиотеку, выбрать игру и нажать Установить. Кроме того, Steam не проигрывает торрент-трекерам по скорости скачивания игр. У меня была скорость 500 Мбит/сек и игры в Steam скачивались со скоростью 40-60 Мбайт/сек. Я настоятельно рекомендую всем, кто играет в игры, присоединиться к Steam. Вы не пожалеете!

UPD 2022:

Прошло уже 7 лет, как я в Steam. За это время я прошел большой путь от аккаунта с 0 уровнем и парой игр, до аккаунта с сотым уровнем, красивым профилем, 150+ игр и даже собственными аддонами в Steam Workshop. Я давно забыл что такое пиратские игры, но также и переключаться на другие платформы типа Epic Games меня не тянет. Все они пока проигрывают Стиму. Зато Electronic Arts придумали интересную фишку – подписку EA Play теперь можно купить прямо в Steam, после чего в библиотеке появляется специальный раздел, куда попадают игры, которые вы установите по подписке. Мое мнение не изменилось: Steam – лучшая игровая платформа в мире!

Что касается статьи, я заменил скриншоты на актуальные, обновил статистические данные и внес некоторые корректировки в текст. На этом у меня все.

P.S. Почем у меня так мало друзей в Steam, быть может спросите вы? А ответ прост: я ни в каких соц. сетях больше не добавляю большое количество людей, потому что лента заполняется кучей мусора, из-за которого я не могу видеть активность тех, кого действительно хочу видеть.

]]>
https://alexell.ru/blog/games/perenos-personazha-gta-v-gta-online-v-steam.html <![CDATA[Перенос персонажа GTA V (GTA Online) в Steam]]> Tue, 28 Nov 2017 12:17:00 +0000

Перенос персонажа GTA V (GTA Online) в Steam

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Перенос персонажа GTA V

… или мой первый фэйл в Steam.

Добрый вечер, читатели моего блога и случайные геймеры, попавшие на эту страницу!

Сегодня я хочу рассказать вам про мой перенос персонажа GTA V со всем игровым прогрессом в Steam, при том что покупал игру напрямую на сайте rockstargames.com. Это будет полезно тем, кто столкнется с такой же ситуацией.

Не так давно я написал небольшой обзор на Grand Theft Auto V – там описано все что я хотел бы сказать об игре, поэтому здесь об этом писать не буду. Скажу лишь, что когда я покупал GTA V – была скидка 50%, я впервые установил Steam и хотел купить игру в нем, но еще толком не знал как им пользоваться, поэтому получилось так, что по ссылке из описания игры меня перекинуло в обычный браузер, где я оплатил игру на сайте rockstargames.com. После регистрации ключа в Social Club – в загрузках становится доступной загрузка инсталлятора, который установит Social Club на компьютер и загрузит все файлы игры. Все что нужно для игры в GTA V в этом случае – авторизоваться в приложении Social Club, которое проверяет наличие оплаченной копии игры в аккаунте. Steam не понадобился.

После прохождения пролога, становится доступна игра онлайн. За полтора года игры я заработал/награбил/положил в игру немало денег и купил себе апартаменты, тачки, офис, склады, мотоклуб, бункер, трейлер и многое другое. Времени и сил на игру потрачено немало. За это время я уже купил несколько других игр в Steam и играть через Steam мне нравится – все игры в одном месте, все загружается автоматически + достижения, карточки, значки, уровень, друзья, активность, общение и т.д. Осознав это, мне захотелось чтобы GTA V тоже появилась в моей библиотеке Steam. Добавить ее как стороннюю не вариант, потому что достижений и часов от нее там не появится.

Тогда я решил написать в тех. поддержку rockstargames вопрос о том, можно ли перенести персонажа GTA Online в Steam. Они ответили следующее:

Хотим сообщить, что для запуска игры через Steam Вам необходимо иметь Steam версию GTAV. Также прогресс Вашего текущего персонажа не может быть перенесен на Ваш аккаунт Steam, поскольку речь идет о двух разных версиях игры, прогресс которых никаким образом не связан.

Благодарим за понимание.

Скриншот переписки:

Перенос персонажа GTA V (техподдержка Rockstar)

После этого я снова писал им, но уже переделанный вопрос – можно ли просто перенести все деньги, которые я покупал в игре на свой другой аккаунт, если я еще раз куплю GTA V, но уже в Steam. На это я тоже получил отрицательный ответ:

Перенос персонажа GTA V (техподдержка Rockstar)

На какое-то время я “забил” на эту идею, но в июне 2017 года на GTA V в Steam снова была 50% скидка и я решил, что обязан купить ее. Очень скоро выяснилось, что сделал я это не зря и Rockstar Support меня просто дезинформировали.

Как перенести персонажа GTA Online в Steam?

  1. Если вы покупали игру напрямую на сайте rockstargames.com, то у вас уже есть аккаунт Social Club, который хранит весь ваш игровой процесс.
  2. Можете полностью удалить игру с вашего ПК, поскольку локальные файлы игры отличаются от тех, что поставляются через Steam.
  3. Покупаете Grand Theft Auto V в Steam и устанавливаете
  4. При первом запуске появится точно такое же окно, где нужно авторизоваться в аккаунте Social Club или зарегистрировать новый.
  5. Авторизовываетесь в уже имеющемся аккаунте и запускаете игру.
  6. Проходите пролог, после чего входите в GTA Online.

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

Всем приятной игры!

]]>
https://alexell.ru/blog/php-wordpress/php-skript-monitoringa-interneta-s-opoveshheniem.html <![CDATA[PHP скрипт мониторинга домашнего интернета с оповещением]]> Mon, 20 Nov 2017 10:35:00 +0000

PHP скрипт мониторинга домашнего интернета с оповещением

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
PHP скрипт мониторинга

Добрый день, уважаемые читатели моего скромного блога.

Совсем недавно я написал 2 статьи на тему мониторинга локальных устройств и внешних узлов для роутеров MikroTik на базе RouterOS и рассказал о схеме грамотного мониторинга: Микротик <=> Сервер. Сегодня речь пойдет о мониторинге домашнего интернета с вашего сервера VDS/VPS с оповещением по СМС. Для этого будем использовать PHP скрипт мониторинга.

Все, кто говорят что нельзя выполнять пинг через PHP скрипты – ошибаются, а если точнее – тут все зависит от того, где запускать скрипт. В данной статье скрипт написан на языке PHP и выполняет пинг вашего внешнего IP адреса домашнего интернета, разумеется, если там реально внешний IP, а также если у вас есть доступ до выполнения функции exec() на PHP.

Рассмотрим скрипт по частям:

$homeip = '0.0.0.0';
$downsms = 'Home+inet+is+DOWN+'.date('H:i:s');
$upsms = 'Home+inet+is+UP+'.date('H:i:s');
$checkdns = exec('ping -c 1 8.8.8.8');

Здесь мы указываем внешний IP домашнего интернета, а также объявляем шаблоны текстов СМС и указали Google DNS для проверки доступности интернета на сервере (мало ли что может случиться) и сразу же выполняем пинг.

PHP скрипт будет проверять наличие интернета дома только при наличии интернета на сервере, за что отвечает это условие:

if ($checkdns != '')

Далее:

    $checkhome = exec('ping -c 1 '.$homeip);
    if ($checkhome == '') {
        if (!file_exists('homedown.txt')) {
            file_put_contents('homedown.txt','');
            file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$downsms);
        }
    }

Здесь мы выполняем ping внешнего IP адреса вашего домашнего интернета и если пинг не проходит, создаем файл, по которому скрипт в дальнейшем просто будет понимать что в предыдущих его запусках интернета дома уже не было и не будет снова посылать СМС. Кстати вы можете изменить количество отправляемых пингом пакетов, я указал 1, потому что скрипт не очень быстро выполняется в браузере. Просто замените цифру 1 перед IP адресом.

Затем отправляется СМС на ваш номер телефона об отсутствии домашнего интернета. Для отправки СМС я использую сервис SMS.RU, поскольку он дает возможность использовать API и отправлять 5 бесплатных СМС в день на свой номер (который использовали при регистрации).

Для отправки SMS в тексте PHP скрипта вам нужно заменить YOUR_API_KEY на ваш API ключ из личного кабинета SMS.RU, а 79012345678 заменить на ваш номер телефона.

    else {
        if (file_exists('homedown.txt')) {
            unlink('homedown.txt');
            file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$upsms);
        }
    }

В этой части кода если домашний интернет снова стал доступен, удаляется созданный файл и отправляется СМС. Что тут заменить для отправки СМС вы уже знаете.

Полный PHP скрипт мониторинга:

<?php

$homeip = '0.0.0.0';
$downsms = 'Home+inet+is+DOWN+'.date('H:i:s');
$upsms = 'Home+inet+is+UP+'.date('H:i:s');
$checkdns = exec('ping -c 1 8.8.8.8');

if ($checkdns != '') {
    $checkhome = exec('ping -c 1 '.$homeip);
    if ($checkhome == '') {
        if (!file_exists('homedown.txt')) {
            file_put_contents('homedown.txt','');
            file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$downsms);
        }
    }
    else {
        if (file_exists('homedown.txt')) {
            unlink('homedown.txt');
            file_get_contents('http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text='.$upsms);
        }
    }
}

?>

Чуть не забыл – передача текста СМС с пробелами не поддерживается, поэтому в переменных $downsms и $upsms вместо пробелов пишите знак “+” как сделано в моем скрипте. При этом СМС на ваш телефон будет приходить с пробелами вместо знаков “+”.

PHP скрипт следует поставить в крон на выполнение каждую минуту или любой другой удобный вам промежуток времени.

]]>
https://alexell.ru/blog/mikrotik/mikrotik-skript-monitoringa-interneta-i-vneshnih-uzlov.html <![CDATA[MikroTik – скрипт мониторинга интернета и внешних узлов с оповещением]]> Sun, 19 Nov 2017 10:18:00 +0000

MikroTik – скрипт мониторинга интернета и внешних узлов с оповещением

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
MikroTik — скрипт мониторинга

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

Кто то из вас мог уже прочитать мою предыдущую статью, где я представил скрипт для роутеров MikroTik на базе RouterOS для мониторинга подключенного ПК и перезагрузки LAN порта в случае необходимости. Сегодня речь пойдет о мониторинге домашнего интернета и любого внешнего узла, например вашего сервера, причем с оповещением по СМС или в Телеграм.

Для начала рассмотрим скрипт по частям:

:global inetdown
:global vdsdown
:local checkdns [/ping 8.8.8.8 count=5]
:local checkvds [/ping 0.0.0.0 count=5]
:local time [/sys clock get time]
:local downsms "VDS+0.0.0.0+is+DOWN+$time"
:local upsms "VDS+0.0.0.0+is+UP+$time"

Здесь мы объявили глобальные переменные – IP публичного Google DNS, IP вашего сервера, время и шаблоны текстов для СМС. Для мониторинга интернета вы можете использовать любой DNS – просто замените IP. Также вам нужно заменить IP 0.0.0.0 на IP вашего сервера.

:if (checkdns = 0) do={
	:if ($inetdown != true) do={
	/log error "INTERNET is DOWN"
	:set $inetdown true
	}

Здесь пингуется DNS и если он недоступен, переменная отсутствия интернета принимает значение true и пишется запись в лог.

else={
	:if ($inetdown = true) do={
		/log warning "INTERNET is UP"
		:set $inetdown false
	}

Далее, если пинг DNS успешено, но до этого не был успешен, переменная изменяет значение и делается запись в лог INTERNET is UP.

	:if (checkvds = 0) do={
		:if ($vdsdown != true) do={
/log error "VDS 0.0.0.0 is DOWN"
/tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text=$downsms" keep-result=no
		:set $vdsdown true
		}
	}

В коде выше начинается самое интересное – если DNS доступны, т.е. интернет есть, но ваш сервер не пингуется, то в лог пишется сообщение, а вам отправляется СМС. Здесь вам нужно заменить 0.0.0.0 на IP вашего сервера, YOUR_API_KEY на ваш API ключ на сайте SMS.RU и 79012345678 на ваш номер телефона. После регистрации на сайте SMS.RU вы получите свой API ключ и сможете бесплатно отправлять 5 СМС в день на свой номер телефона (тот, который использовали для регистрации). Очень полезный сервис.

Кстати строка текста сообщения не поддерживает пробелы, так что в переменных downsms и upsms используйте знак “+” вместо пробела, как показано в коде моего скрипта. При этом на телефон вам будет приходить СМС с пробелами, вместо знака “+”.

else={
		:if ($vdsdown = true) do={
/log warning "VDS 0.0.0.0 is UP"
/tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API+KEY&to=79012345678&text=$upsms" keep-result=no
			:set $vdsdown false
		}

В последней части кода, если ваш сервер был недоступен (глобальная переменная помнит об этом), но снова стал пинговаться, отправляется СМС на ваш номер с оповещением об этом событии. Что тут нужно заменить вы уже знаете.

Для использования оповещения в Телеграм вместо СМС, вам просто необходимо создать бота, получить chat_id с вашим аккаунтом и вместо запроса к API сервиса SMS.RU прописать запрос к API Телеграм бота:

/tool fetch url=”https://api.telegram.org/bot153358077:AAF4qYdUNIcWfp-SLtduVR18DuzqtXwEQAs/sendMessage?chat_id=-175202495&text=VDS_0.0.0.0_is_DOWN”

Более детально процесс создания бота в Телеграм для использования в роутерах Микротик описан в этой статье.

Полный текст скрипта:

:global inetdown
:global vdsdown
:local checkdns [/ping 8.8.8.8 count=5]
:local checkvds [/ping 0.0.0.0 count=5]
:local time [/sys clock get time]
:local downsms "VDS+0.0.0.0+is+DOWN+$time"
:local upsms "VDS+0.0.0.0+is+UP+$time"

:if (checkdns = 0) do={
	:if ($inetdown != true) do={
	/log error "INTERNET is DOWN"
	:set $inetdown true
	}
} else={
	:if ($inetdown = true) do={
		/log warning "INTERNET is UP"
		:set $inetdown false
	}
	:if (checkvds = 0) do={
		:if ($vdsdown != true) do={
/log error "VDS 0.0.0.0 is DOWN"
/tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text=$downsms" keep-result=no
		:set $vdsdown true
		}
	} else={
		:if ($vdsdown = true) do={
/log warning "VDS 0.0.0.0 is UP"
/tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text=$upsms" keep-result=no
			:set $vdsdown false
		}
	}
}

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

Полный текст скрипта после редактирования добавляете в System->Scripts и даете ему название. Для запуска скрипта каждую минуту или другой удобный вам промежуток времени добавляете его в System->Scheduler.

В On Event пишете: system script run inet-vds, где inet-vds – название вашего скрипта, указанное в System->Scripts.

P.S. Как вы понимаете, Микротик не может отправить вам СМС, о том что пропал интернет, ведь интернета нет и к API SMS.RU обратиться не получится. Вы можете дописать в скрипт  сохранение времени, когда интернет пропал в глобальную переменную и отправку СМС после появления интернета, с указанием промежутка времени, когда интернет отсутствовал. Но я предпочитаю мониторить домашний интернет с оповещением по СМС со своего VDS, ведь это удобно: Микротик мониторит VDS, а VDS мониторит Микротик. В этом случае вы 100% будете мгновенно оповещены о проблемах. Об этом я напишу в следующей статье.

UPD 2022: проверено, работает и на RouterOS 7.

]]>
https://alexell.ru/blog/mikrotik/mikrotik-skript-monitoringa-lokalnyh-ustrojstv.html <![CDATA[MikroTik – скрипт мониторинга локальных устройств]]> Sat, 18 Nov 2017 09:57:00 +0000

MikroTik – скрипт мониторинга локальных устройств

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
MikroTik - скрипт мониторинга

Добрый день, уважаемые читатели.

Я думаю многим опытным пользователям ПК, особенно IT-специалистам, хочется контролировать всё и вся. В эту категорию входит и мониторинг домашнего интернета и подключенных к нему устройств, особенно в ваше отсутствие. Многие, кто работают за ПК, часто используют удаленное подключение к домашнему ПК, чтобы заниматься попутно какими либо своими делами. Для этого было бы неплохо точно знать когда и что происходило с интернет-соединением, а также происходило ли отключение электричества. Если у вас есть Микротик, обязательно закажите внешний IP и тогда вы по-настоящему сможете все держать под контролем. В этой статье речь пойдет о мониторинге доступности подключенного к Микротику ПК с грамотным логированием.

Представляю вашему вниманию скрипт для Микротика на базе RouterOS, который ставится на запуск каждую минуту и выполняет следующий функционал:

  • Мониторинг доступности запущенного ПК
  • Логирование недоступности ПК, отсутствия линка до ПК
  • Скрипт различает недоступность ПК от выключенного ПК и не засоряет логи

В логах MikroTik используется 3 цвета:

  • серый – info-сообщения
  • синий – warning-сообщения
  • красный – error-сообщения

В скрипте я использую warning и error логирование, чтобы открыв лог вы наглядно могли выцепить из него только нужные вам сообщения.

Для хранения информации (пропал пинг ПК, пропал линк к ПК) используются глобальные переменные (раздел System->Scripts вкладка Environment). Если у вас пропал интернет, например авария у провайдера), в логе будет только одно сообщение об этом и скрипт не будет писать в лог об отсутствии пинга каждый свой запуск (каждую минуту).

Давайте рассмотрим скрипт по частям:

:global linkdown
:global landown
:local checklan [/ping 10.10.1.10 count=5]
:local link
/interface ethernet cable-test eth2-lan once do={
:set $link $"status";
};

Это первая часть кода, здесь объявляются переменные, выполняется пинг локального ip подключенного ПК и проверка линка на нужном порту (тест кабеля). IP вам нужно заменить на IP вашего ПК (или иного устройства), а название порта к которому подключен ПК тоже заменить на свое (раздел Interfaces).

:if ($link = "link-ok") do={
	:if ($linkdown = true) do={
		/log warning "LAN LINK UP"
		:set $linkdown false
	}

Если линк есть, проверяется глобальная переменная отсутствия линка на ПК и если его не было, глобальная переменная обновляется, а в лог пишется сообщение о том что линк снова появился.

	:if ($checklan = 0) do={
		:if ($landown != true) do={
			/log error "PING LAN FAILED"
			:set $landown true
			interface ethernet set eth2-lan disabled=yes
			:delay 5
			interface ethernet set eth2-lan disabled=no
			:delay 2
		}

Если ПК не пингуется и в глобальной переменной не указано что нет линка, то в лог пишется сообщение PING LAN FAILED, делается запись в глобальную переменную, а затем самое интересное. Бывают случаи, когда ПК находится включенным по несколько дней и иногда пропадает интернет, при этом линк на Микротике есть. Лично у меня интернет постоянно пропадал когда истекал срок аренды DHCP, почему то настройки просто не перезапрашивались моим компьютером, поэтому я специально сделал в скрипте проверку “Если линк на ПК есть, но ПК не пингуется – перезагрузить нужный порт на Микротике.” Собственно эти действия и происходят в части скрипта выше.

else={
		:if ($landown = true) do={
			/log warning "PING LAN OK"
			:set $landown false
		}
	}

Если пинг ПК есть, а до этого не было, в лог пишется сообщение.

else={
	:if ($linkdown != true) do={
		/log error "LAN LINK DOWN"
		:set $linkdown true
	}

Если линка до ПК нет, а до этого он был, то в лог пишется сообщение.

Скрипт добавляется в раздел System->Scripts. Для запуска каждую минуту (или другой промежуток времени) его следует добавить в System->Scheduler.

В On Event пишем: system script run ping-lan, где ping-lan – название скрипта, которое вы указали при добавлении в System->Scripts.

Полный код скрипта:

:global linkdown
:global landown
:local checklan [/ping 10.10.1.10 count=5]
:local link
/interface ethernet cable-test eth2-lan once do={
:set $link $"status";
};

:if ($link = "link-ok") do={
	:if ($linkdown = true) do={
		/log warning "LAN LINK UP"
		:set $linkdown false
	}
	:if ($checklan = 0) do={
		:if ($landown != true) do={
			/log error "PING LAN FAILED"
			:set $landown true
			interface ethernet set eth2-lan disabled=yes
			:delay 5
			interface ethernet set eth2-lan disabled=no
			:delay 2
		}
	} else={
		:if ($landown = true) do={
			/log warning "PING LAN OK"
			:set $landown false
		}
	}
} else={
	:if ($linkdown != true) do={
		/log error "LAN LINK DOWN"
		:set $linkdown true
	}
}

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

P.S. Завтра будет статья со скриптом для мониторинга интернета и любого внешнего узла, например вашего сервера, с оповещением по СМС/Телеграм.

UPD 2022: проверено, работает и на RouterOS 7.

]]>
https://alexell.ru/blog/various/muzyka-v-telegram-vmesto-muzyki-vk-vozmozhno-li-eto.html <![CDATA[Музыка в Telegram вместо музыки ВК – возможно ли это?]]> Fri, 27 Oct 2017 09:15:00 +0000

Музыка в Telegram вместо музыки ВК – возможно ли это?

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Музыкальный центр

Всем привет! Сегодня мы снова поговорим о набирающем популярность и в Российском сегменте, мессенджере Telegram, созданном Павлом Дуровым, основателем соц. сети ВКонтакте.
Но начнем мы наш разговор с последних нововведений ВК: ограничение на прослушивание музыки ВКонтакте и платная подписка.

Что мы имеем: теперь прослушивание музыки в мобильном приложении ВК ограничено 30 минутами, после чего в фоновом режиме музыку послушать не получится. Все это происходит скорее всего из-за постоянного давления на тему соблюдения авторских прав и совершения необходимых отчислений в сторону правообладателей. Музыкальный раздел VK потихоньку превращается в стриминговую платформу. Ладно, ближе к делу.

Так как же все таки слушать музыку, если ВК больше не сохраняет музыку в кэш, да еще и только 30 минут дает на прослушивание? Очень просто – используем Telegram!

У Telegram есть приложения для всех мобильных платформ, а также десктопные версии клиентов и даже браузерная версия, что не может не радовать. Более того, все прикрепленные файлы, будь то картинки, видео или музыка сохраняются в кэш! Я серьезно! Также всем известно, что каждый пользователь Telegram может создать группу (общий чат), канал, бота или даже собственную мини-игру. Если говорить о каналах и загудевшей теме про музыку в Телеграм, то мы стали встречать рекламу двух новых каналов с музыкой. Чтобы вам было понятнее о чем речь, я покажу вам оба.

Этот канал за пару недель набрал уже немало подписчиков, НО: что он из себя представляет? 69 аудиозаписей? Всего 69 песен за 2 недели? Мне стало даже смешно…

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

Что же на самом деле нужно пользователям? Общаясь на эту тему с разными людьми, я понял, что пользователям нужен канал с большим количеством музыки и средство ее поиска, разделения на плейлисты + прослушивание оффлайн (кэш).

Специально для этого мы с друзьями создали канал Музыкальный центр в Telegram и за 3 дня загрузили на него больше 1000 песен, различных направлений, вкратце это описано здесь.

Музыка в Telegram

Ссылка на канал: [удалена]

С помощью поиска по каналу вы легко можете находить любые песни. У меня iPhone, поэтому скриншоты показывать буду именно с него, но на Android и Windows Phone все должно выглядеть почти так же.
Чтобы открыть поиск по каналу, заходим на канал, нажимаем сверху на название канала (именно на название, а не на аватар), выплывает окошко, в котором и нажимаем “Поиск”. В поиск можете вписать как имя артиста, так и название песни. Для наглядности скриншот:

Найденную музыку вы можете сразу включить и послушать, при этом она сохранится в кэш, либо вы можете пересылать песни друзьям и даже сами себе, чтобы потом слушать то что понравилось.
При прослушивании музыки в Telegram, сверху появляется строка с названием песни и кнопкой Play/Pause. При нажатии на эту строку, появляется плеер, который выглядит вот так:

Плеер в Телеграм умеет играть друг за другом все песни, которые видит на канале, также имеются основные возможности: перемешать песни, повторять список, повторять одну. Остается решить вопрос с плейлистами.

Если вам не нужны плейлисты, вы можете просто пересылать понравившиеся песни в чат с самим собой. Если вы все же хотите сделать плейлисты, то все просто: нажимаете на иконку нового сообщения в списке чатов и выбираете “Создать канал”, отмечаете что этот канал “Частный”, придумываете ему название, например “Альбомы Noize MC” и все. Вы можете сделать сколько угодно таких каналов и просто пересылать в них нужные песни. Потом просто заходите на канал, включаете первую песню и слушаете по порядку, либо вперемешку.

Каналы-плейлисты, как в общем и любые чаты, можно закрепить в начале списка чатов. Это обеспечит вам быстрый доступ к любимым песням.

Вы можете по желанию делиться своим личными плейлистами с друзьями, давая им приглашение на канал-плейлист, и даже делать с ними совместные плейлисты, назначая их администраторами. Telegram – мощный инструмент, который имеет множество полезных функций. Присоединяйтесь!

]]>
https://alexell.ru/services/muzykalnyj-tsentr-v-telegram.html <![CDATA[Музыкальный центр в Telegram]]> Fri, 27 Oct 2017 09:05:00 +0000

Музыкальный центр в Telegram

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Музыкальный центр

Всем известно, что компания Mail.Ru, которая теперь владеет соц. сетью ВКонтакте, ввела серьезные ограничения на прослушивание музыки в мобильном приложении VK – всего 30 минут музыки в фоновом режиме. В полной версии ВК не лучше – постоянная реклама в аудиозаписях. Избавиться от рекламы и ограничения можно, купив платную подписку на музыку ВКонтакте. Платить за нее нужно каждый месяц и мало кто согласится на это.

Павел Дуров, основатель ВКонтакте, после своего ухода, разработал мессенджер Telegram, уже давно ставший популярным за рубежом. В России Telegram уже тоже стал набирать популярность и именно он нам нужен для решения проблем с прослушиванием музыки на мобильных телефонах.

Мы с друзьями создали канал в Telegram и назвали его “Музыкальный центр“. Мы постоянно загружаем на канал музыку различных направлений – рок, рэп, радийную, электронную, танцевальную и клубную музыку. На канале вы найдете как современные ТОПовые песни, так и давно известные композиции. С помощью поиска по каналу, вы можете найти песни по исполнителям и по названию, послушать их и скачать. Кстати, вся музыка, которую вы слушаете на канале – сохраняется в кэш и ее можно будет слушать без интернета.

Ссылка на канал: [удалена]

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

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

UPD 2018: проект заброшен.

]]>
https://alexell.ru/blog/windows-internet/ustanovka-ms-visual-studio-na-windows-10.html <![CDATA[Установка старых MS Visual Studio на Windows 10]]> Tue, 10 Oct 2017 08:58:00 +0000

Установка старых MS Visual Studio на Windows 10

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
MS Visual Studio 2013 ошибка

Сегодня я бы хотел затронуть процесс установки старых версий Microsoft Visual Studio на Windows 10. Пригодится тем, кто уже успел пересесть на “десятку” или купил ПК/ноутбук, где она была предустановлена. Если не хотите читать всю историю и ищете готовое решение проблемы – просто прокрутите страницу в самый низ, рабочее решение там.

Зачем устанавливать старую версию, спросите вы? Отвечу так: у каждого проекта свои задачи, потребности, идеи, и проблемы, для решения которых может потребоваться установка именно версии 2013 года, например. В работе над обновлением Celestia мне помогает один иностранец. Он до сих пор пользуется Windows XP и позволил себе апгрейд только до MS Visual Studio 2013. Поэтому и мне пришлось эту версию, поскольку в 2017-й его проекты не компилируются (уж больно тонко он заточил их именно под 2013).

Я скачал замечательную раздачу MS Visual Studio 2013 Ultimate и, не ожидая никаких подводных камней, монтировал ISO образ, запустил установку и … обломался. Установщик выдал сообщение с заголовком Setup Blocked и текстом “Windows Program Compatibility mode is on. Turn it off and then try Setup again” (скриншот в начале поста). Я человек разбирающийся, поэтому сразу полез в процессы и службы, чтобы найти что либо похожее. В итоге в службах я нашел “Служба помощника по совместимости программ”.

PcaSvc

Я остановил его в службах (Диспетчер задач), а в компоненте Службы вообще полностью отключил. Перезагрузив ПК, я понял что установщик MS Visual Studio 2013 все равно выдает ту же ошибку. После поиска на англоязычных ресурсах, я узнал несколько любопытных вещей, например, что Windows Program Compatibility проверяет по стандартным (оригинальным) именам пакетов установки Microsoft и для решения проблемы достаточно переименовать файл установщика, например дописав ему суффикс “(1)”. После распаковки ISO в папку, пришлось искать дальше, потому что это тоже не помогло.

Но решение все же нашлось! Не знаю почему, но 100% работает имя установщика wdexpress_full.exe

То есть просто переименовываем стандартный установщик vs_ultimate.exe в wdexpress_full.exe и все прекрасно установится. Этот способ работает и для других устаревших продуктов Microsoft. Надеюсь эта информация кому-то пригодится.

]]>
https://alexell.ru/blog/php-wordpress/perenos-sajta-s-dle-na-wordpress.html <![CDATA[Перенос сайта с DLE на WordPress 2023]]> Wed, 20 Sep 2017 04:49:00 +0000

Перенос сайта с DLE на WordPress 2023

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
с DLE на WordPress

Однажды, с сайтом одного из проектов, с которыми я работаю случилась неприятность – его взломали и удалили все файлы с хостинга. Сайт был создан на платформе Data Life Engine (DLE), разумеется, на ломаной (nulled) версии. Полагаю, нас взломали сами авторы движка. Бекапы конечно у нас были и тогда я понял, что в движке полно уязвимостей и пора выполнить перенос сайта с DLE на WordPress. О том, как это сделать, я хочу рассказать вам в этой статье. В интернете есть несколько статей на эту тему, однако в них описано не все и код для переноса не полностью переносит все, что нужно для полноценной работы, содержит косяк с переносом анонсов, да и плагины WordPress там указаны устаревшие.

Шаг первый: бекап и установка WordPress

Для начала, рекомендую сделать бэкап базы данных DLE и его файлов. Затем посмотрите настройки подключения к БД в файле engine\data\dbconfig.php. Нас интересует DBNAME, DBUSER и DBPASS – скопируйте их куда-нибудь. Теперь нужно выполнить несколько простых действий:

  • Удаляем все файлы с корня сайта, кроме папки uploads и всех, созданных вами папок и файлов в корне, если такие есть.
  • Скачиваем WordPress
  • Распаковываем файлы движка в корень сайта. Все файлы и папки, начинающиеся на “wp-“, должны оказаться в корневой папке сайта, где от DLE осталась только папка uploads.
  • Заходим на сайт в браузере, появится страница установки WordPress, при установке укажите параметры подключения к той же БД, где остались данные DLE (параметры подключения мы копировали).
  • После успешной установки, авторизуемся в админке
    • В разделе плагины нажимаем “Добавить новый”, в поиске в углу вводим “Cyr to Lat” и устанавливаем этот плагин.
    • Затем нам нужно убрать префикс “/category/” из URL и для этого подойдет плагин “No Category Base (WPML)
    • Или мы можем вместо него сразу установить отличный плагин для СЕО – “Yoast SEO“, который, помимо прочего, тоже обладает нужной нам функцией.
    • Активируем оба плагина. Если ставили Yoast SEO, то заходим в раздел SEO -> Дополнительно -> Постоянные ссылки и в первом пункте ставим “Убрать”.
    • Далее нам нужно сделать структуру ЧПУ (человекопонятных URL) такой же, как была в DLE. Для этого в консоли WordPress идем в Настройки -> Постоянные ссылки, выбираем “Произвольно” и вписываем /%category%/%post_id%-%postname%.html. Это приведет ссылки к такому виду, в каком они были на DLE. Опять же, может быть на вашем сайте DLE не было категорий в ссылках, тогда вам достаточно будет вписать /%post_id%-%postname%.html
    • Теперь вам нужно найти и установить нужный вам шаблон (тему). Сделать это можно через Внешний вид -> Темы. Можно выбрать, установить и посмотреть темы из большого количества бесплатных тем, либо загружать свои шаблоны в виде zip архивов, которые вы найдете в интернете.
    • Важно: не пытайтесь создавать на этом шаге новые посты и рубрики в WordPress, они все равно исчезнут на следующем шаге и будут заменены теми, которые были в DLE.

Первый шаг переноса сайта с DLE на WordPress завершен, осталась половина задачи.

Шаг второй: Миграция базы данных

Начну с того, что принцип хэширования паролей пользователей на движках отличается, поэтому пароли с DLE на WordPress не мигрируют вообще! Если у вас есть пользователи и открыта регистрация, то после переноса сайта, сделайте рассылку на E-Mail с просьбой восстановить свои пароли через кнопку “Забыли пароль”.

Дополнительные поля в записях (если они есть) не будут перенесены, поэтому если хотите их перенести, вам придется найти их в таблицах DLE, понять, где они должны быть в таблицах WP и изменить SQL код, который представлен ниже, чтобы он и их переносил куда следует.

А вообще это должно решиться заменой d_p.full_story в коде на CONCAT(d_p.full_story,d_p.xfields).

Записи, созданные пользователем, который был потом удален, тоже могут быть не перенесены. Рекомендую сначала проверить, чтобы всем записям был указан какой-нибудь автор (существующий пользователь). Добавить автора всем записям, где его нет можно следующим SQL запросом:

UPDATE 'dle_post' SET author='ЛОГИН АВТОРА' WHERE author=''

Теперь о SQL коде для миграции

Если вы зайдете в phpMyAdmin, вы увидите, что в базе данных есть таблицы, начинающиеся на “wp_” и на “dle_”. Если все так – значит вы нигде не ошиблись при установке WordPress.

Для нормальной работы сайта, мы хотим в автоматическом режиме перенести пользователей, категории, записи и комментарии в соответствующие таблицы WordPress.

Когда мне пришлось переносить сайт с DLE на WordPress, я читал другие статьи на эту тему и понял, что везде дают один и тот же код для миграции БД, однако этот код имеет существенные недостатки:

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

При переносе сайта с DLE на WordPress, я доработал этот код, теперь он переносит данные пользователей и добавляет аттрибуты прав. Что же касается анонсов записей, то тут все зависит от того, как вы использовали их и использовали ли вообще. Поэтому далее я предоставлю несколько вариантов SQL запроса для этих случаев.

Итак, в phpMyAdmin выбираем нашу базу данных, переходим на вкладку “SQL” и будем выполнять запросы по частям (так безопаснее, особенно, если у вас большой сайт):

Сперва переносим пользователей их данные и права. Всем будет установлена роль “Подписчик”.

DELETE FROM `wp_users` WHERE `wp_users`.`ID` != 1;
INSERT INTO `wp_users` (ID, user_login, user_nicename, user_email, user_registered, display_name) SELECT user_id, name, name, email, FROM_UNIXTIME( reg_date ), name FROM dle_users WHERE user_id != 1;

INSERT INTO `wp_usermeta` (user_id, meta_key, meta_value) SELECT user_id, first_name, 'fullname' FROM dle_users;
INSERT INTO `wp_usermeta` (user_id, meta_key, meta_value) SELECT user_id, description, 'info' FROM dle_users;
INSERT INTO `wp_usermeta` (user_id, meta_key, meta_value) SELECT user_id, admin_color, 'fresh' FROM dle_users;
INSERT INTO `wp_usermeta` (user_id, meta_key, meta_value) SELECT user_id, show_admin_bar_front, 'false' FROM dle_users;
INSERT INTO `wp_usermeta` (user_id, meta_key, meta_value) SELECT user_id, wp_capabilities, 'a:1:{s:10:"subscriber";b:1;}' FROM dle_users;
INSERT INTO `wp_usermeta` (user_id, meta_key, meta_value) SELECT user_id, 'wp_user_level', 0 FROM dle_users;

Затем переносим категории.

TRUNCATE `wp_terms`;
INSERT INTO `wp_terms` (`term_id`, `name`, `slug`) SELECT `id`, `name`, `alt_name` FROM `dle_category`;

TRUNCATE `wp_term_taxonomy`;
INSERT INTO `wp_term_taxonomy` (`term_taxonomy_id`, `term_id`, `description`, `parent`) SELECT `id`, `id`, `descr`, `parentid` FROM `dle_category`;
UPDATE `wp_term_taxonomy` SET `taxonomy`='category';

TRUNCATE `wp_term_relationships`;
INSERT INTO `wp_term_relationships` (object_id, term_taxonomy_id) SELECT id, category FROM dle_post;

Теперь можно переносить посты. Тут я предложу 3 варианта:

Если на вашем сайте текст постов находится только в короткой версии (анонсе):

TRUNCATE `wp_posts`;
INSERT INTO `wp_posts` (id, post_author, post_date, post_content, post_title, post_name) SELECT d_p.id, d_u.user_id, d_p.DATE, d_p.short_story, d_p.title, d_p.alt_name FROM dle_post AS d_p, dle_users AS d_u WHERE d_p.autor = d_u.name;

Если на вашем сайте текст постов находится только в полной версии версии:

TRUNCATE `wp_posts`;
INSERT INTO `wp_posts` (id, post_author, post_date, post_content, post_title, post_name) SELECT d_p.id, d_u.user_id, d_p.DATE, d_p.full_story, d_p.title, d_p.alt_name FROM dle_post AS d_p, dle_users AS d_u WHERE d_p.autor = d_u.name;

А если вам нужно объединить обе версии каждого поста:

TRUNCATE `wp_posts`;
INSERT INTO `wp_posts` (id, post_author, post_date, post_content, post_title, post_name) SELECT d_p.id, d_u.user_id, d_p.DATE, CONCAT(d_p.short_story, '' ,d_p.full_story), d_p.title, d_p.alt_name FROM dle_post AS d_p, dle_users AS d_u WHERE d_p.autor = d_u.name;

И наконец, переносим комментарии:

TRUNCATE `wp_comments`;
INSERT INTO `wp_comments` (comment_ID,comment_post_ID, comment_author, comment_author_email, comment_date, comment_content) SELECT id, post_id, autor, email, DATE, text FROM dle_comments;

После выполнения этого кода, все ваши пользователи, посты, категории и комментарии будут копированы в WordPress. Теперь вы можете удалить таблицы с префиксом dle_ из базы данных и смело посмотреть работу сайта. Если пути к картинками в DLE были прописаны правильно, они должны будут отображаться, ведь папку uploads с картинками мы оставили. Вам останется только сделать основные настройки сайта (заголовок, описание, другие настройки в консоли WordPress) и конечно поработать с шаблоном, чтобы все было как вы хотите.

С помощью этого кода, я успешно в 2012 году перенес с DLE на WordPress сайт проекта Club-FL с ~2000 записями и более 3000 пользователями.

Конечно стоит отметить, что такой перенос никогда не пройдет без осечек. В зависимости от набора установленных у вас на DLE плагинов и дополнительных функций в постах, в их отображении могут быть проблемы. Например могут быть проблемы с цитатами BLOCKQUOTE, блоками PRE и CODE (если вы такие используете), а также со спойлерами и лишними тегами при отображении картинок.

Если после переноса вы обнаружили какие-то из перечисленных проблем, то некоторые из них можно решить следующим образом (спасибо сайту kinorossia.ru):

В phpMyAdmin выбираем таблицу wp_posts и экспортируем ее в файл. Рекомендую открыть этот файл не блокнотом, а нормальным текстовым редактором, например Notepad++. Учтите, что при большом размере дампа, редактор может подвиснуть. Просто дайте ему время на обработку файла.

Теперь нажимаем комбинацию [Ctrl]+[F] и в появившемся окне переключаемся на вкладку “Замена”.

Notepad++ (замены)

Ниже будут описаны замены, которые необходимо выполнить. Когда заполните поля, нужно нажимать кнопку “Заменить все” и ждать окончания обработки. Редактор может зависнуть на некоторое время, если файл слишком большой.

  • найти: <!--dle_image_begin:http и заменить на: <a href="http
  • найти: .jpeg|--><img и зменить на: .jpeg"><img
  • найти: .png|--><img и зменить на: .png"><img
  • найти: .gif|--><img и зменить на: .gif"><img
  • найти: <!--dle_image_end--> и заменить на: </a>
  • найти: <!--colorstart: и заменить на <span style="color:
  • найти: "><!--/colorstart--> и заменить на: ;">
  • найти: <!--/colorend--> и заменить на: </span>
  • найти: <div class="quote"><!--QuoteEBegin--> и заменить на: <blockquote>
  • найти: <!--QuoteEnd--></div> и заменить на: </blockquote>
  • найти: \" и заменить на: "

Теперь сохраните изменение в файле, вернитесь в phpMyAdmin, и выполните запрос:

SQL TRUNCATE wp_posts;

Затем можно импортировать ваш измененный дамп.

И последнее, что бы я хотел сказать в этой статье. В отличие от DLE, в движке WordPress из коробки отсутствует функция плавного увеличения изображения по клику (технология Highslide). Однако добавить ее очень просто и это описано в этой статье.

UPD 2023: статья отредактирована и дополнена. Что касается SQL запросов, то есть вероятность, что спустя столько лет и обновлений как DLE, так и WordPress, что-то может уже не подходить, но у меня больше нету сайтов на DLE, чтобы проводить эксперименты, поэтому актуализировать эту информацию я не могу.

]]>
https://alexell.ru/blog/various/zapusk-novogo-sajta-alexell-ru.html <![CDATA[Запуск нового сайта Alexell.Ru]]> Tue, 19 Sep 2017 04:44:40 +0000

Запуск нового сайта Alexell.Ru

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Alexell.Ru

Добро пожаловать на мой сайт.
Для тех, кто бывал здесь раньше, очередной перезапуск моего сайта не станет чем-то удивительным. И правда – в этом нет ничего удивительного, запуск нового сайта Alexell.Ru за несколько лет я делаю уже далеко не в первый раз.

Немного истории

Несколько лет назад, после того как я придумал себе ник Alexell и купил этот домен, я сделал сайт на платформе WordPress и выкладывал там свои разработки и разработки партнеров. Наряду с этим, у меня было еще 2 сайта на WordPress по другим проектам и все было прекрасно какое-то время.
Потом мне захотелось общения с посетителями, а также надоел дизайн сайта, поэтому я удалил его и запустил на его месте форум на платформе phpBB. Я думаю что форум прожил гораздо дольше. Хоть и выкладывал я там то же самое, что было на сайте, но ощущения другие – на форуме регистрировались и писали разные люди, я им отвечал, прислушивался и старался делать в своих программах все что просили пользователи. Это мне нравилось. Но после армии, в 2016 году я понял, что форум на главной странице домена – это не престижно. Тогда я купил себе доступ к HTML5 шаблонам на Pixelarity и сделал красивый, адаптивный статичный сайт, при этом форум поместил в директорию /forum и оставил в рабочем состоянии. Кстати на форум я тогда поставил новый дизайн.


Почему я перезапустил сайт снова

С тех пор прошло полтора года и за это время в моей голове несколько раз рождались мысли о создании собственного блога. Я отбрасывал их пока не понял, что это действительно стоящая идея. Дело в том, что каждый человек, который занимается любого вида созиданием – программированием, созданием сайтов или даже музыки, часто сталкивается и чем-то новым, что ему приходится изучать, с проблемами, которые ему приходится решать или просто попадаются очень полезные сервисы, плагины или инструменты. Весь этот пройденный путь и накопленный опыт со временем начнет забываться, а ведь какие-то знания могли бы пригодиться кому-то еще! Когда я это осознал, я решил снова сделать свой сайт на WordPress, чтобы начать писать статьи в свой блог. Форум было решено закрыть из-за нехватки времени.
Итог

Это мой первый пост в собственном блоге и он скорее исторический, чем информативный и полезный. Но все ведь только начинается! В завершение, хочу сказать, что планирую вспоминать различные интересные проблемы, их решения и другие полезные знания по прикладному программированию, веб-программированию, созданию музыки и другим сферам, с которыми я сталкивался и конечно писать об этом в своем блоге. До новых встреч!

]]>
https://alexell.ru/services/vk-onliner.html <![CDATA[Вечный Онлайн ВКонтакте (VK Onliner)]]> Mon, 11 Sep 2017 10:02:00 +0000

Вечный Онлайн ВКонтакте (VK Onliner)

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Вечный Онлайн ВКонтакте

Ни для кого не секрет, что ВКонтакте запретили режим невидимки и в оффлайне через Kate Mobile или VFeed больше не посидеть. Но скрыть свое присутствие можно совершенно обратным способом – подключить Вечный Онлайн ВКонтакте. Первое время конечно придется отвечать на вопросы друзей насчет вашего круглосуточного онлайна, но потом, когда все уже будут знать о вашем Вечном Онлайне, вы получите требуемый результат – никто не будет знать, когда вы реально в сети, а когда нет. Таким образом вы получаете рабочую отмазку – мол меня не было в сети.

Сервисов, выполняющих такую функцию много, доверять всем я не согласен, а старый добрый Help In Web стал платным, поэтому я разработал свой собственный бесплатный сервис Вечного Онлайна ВКонтакте.

С помощью этого сервиса, вы сможете подключить неограниченное количество страниц и все они будут онлайн 24/7.

UPD 2023: проект закрыт.

]]>
https://alexell.ru/projects/boty-dlya-onlajn-igr.html <![CDATA[Боты для онлайн игр]]> Tue, 31 Jan 2017 18:30:00 +0000

Боты для онлайн игр

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное

Все началось в 2014 году, когда я частенько зависал в браузерных играх на своем телефоне…
Не знал я еще в то время слова “боты” и честно играл я в “Генералы”, пока не пришла мне в голову мысль о том, что основные полезные действия в игре можно автоматизировать. А что? Я трачу на игру свое время, мне это интересно, но не так, чтобы не жалеть о потраченном времени. Кроме того, я подумал что найду единомышленников, которые думают так же. И вот я начал разработку своего первого бота. Сначала эта была программка с минимальным функционалом – держала в онлайне игрока, поскольку это необходимо для повышения онлайна и возможности собрать больше людей в альянсе. Потом постепенно программка обросла новыми функциями и в итоге стала полноценным ботом, который делал в игре большинство основных действий. Подробнее об этом боте описано здесь.

Боты для онлайн игр – эта та тематика, которая мне очень заходила в то время. Энтузиазма было много. Первый бот был даже бесплатным. Когда мне надоели “Генералы”, я стал играть в “Авиаторы”. Тогда весь движ был и браузерные игры были на сайте spaces.ru (заблокирован на территории РФ) и я частенько там зависал. Когда я разобрался в Авиаторах, я быстро понял, что здесь можно довольно много чего автоматизировать. И заручившись поддержкой игроков, я приступил к созданию бота.

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

Потом, в конце 2016 года, меня попросили сделать бота для игры “Имперцы”. Окунувшись в эту игру, я быстро понял почему. Там все построено на заранее заданных сценариях и когда новые сценарии приходится ждать – становится скучно. Я довольно быстро выкатил первую тестовую версию Imper Online Bot, но через какое-то время мой интерес ко всему этому начал угасать.

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

]]>
https://alexell.ru/projects/club-fl.html <![CDATA[Club-FL.Ru – Создадим музыку вместе]]> Thu, 10 Mar 2016 03:32:00 +0000

Club-FL.Ru – Создадим музыку вместе

MikroTik PHP и WordPress Ubuntu / Linux Windows и Интернет Игры Фильмы и сериалы Разное
Club-FL.Ru

Проект Club-FL родился около 6 лет назад в виде сайта с названием “SekretFL“, его основатель Семен Гутин (Numall Fix) является хорошим саунд-продюсером и знает толк в создании качественного звучания, а также в сведении и мастеринге. Целью проекта было сделать все возможные материалы для создания музыки (VTS, семплы, пресеты, акапеллы и др.) доступными широким массам совершенно бесплатно и в одном месте.
Через некоторое время появился канал на YouTube, где Семен записывал свои видео-уроки по созданию музыки. Позже, где-то в 2012 году сайт переехал на домен club-fl.ru, к Семену присоединились энтузиасты (в том числе и я), видео-уроков на канале стало стало больше, появились различные обзоры, на сайте появился новый функционал, в группе ВК подписчиков стало на несколько тысяч больше… Проект развивался.

Конечно не все было так гладко, сайт взламывали конкуренты, причем не один раз, на YouTube прилетали страйки, были и другие проблемы, однако мы решали их и продолжали жить дальше, хотя после взлома сайта в 2014 году мы потеряли посещаемость ~1000 хостов в сутки, которая у нас была и как бы мы ни старались, вернуть ее больше не удавалось.

Сейчас в группе ВК у нас 19 тыс. подписчиков, на канале YouTube 12 тыс. подписчиков и более 1.5 млн. просмотров видео. Вместо сайта теперь форум, на котором появилось много эксклюзива, как от команды Club-FL, так и из некоторых закрытых источников за рубежом. Был создан отдельный паблик для новостей проекта, без всякой рекламы, репостов партнеров и прочего. Проект не стоит на месте, развивается, хоть и не так активно как раньше. Энтузиазм – вещь не постоянная, и у меня он закончился. Музыкой я стал заниматься реже и к этому проекту интерес немного потерял.

Как бы там ни было, я рад что познакомился с Семеном, мы с ним много общались и продолжаем общаться, более того, у меня остались админские доступы и в группе, и на канале и на форуме, на случай если захочу вернуться. У меня даже был свой раздел на том форуме, где я выкладывал свой софт, пока этого форума не было. В любом случае в форс-мажорных ситуациях я всегда приду Семену и его проекту на помощь. Но свое свободное время на развитие проекта больше не трачу. Вот такая замечательная история у проекта Club-FL.

UDP 2018: форум мы закрыли из-за отсутствия времени им заниматься.

]]>