05.02.2017 04:07
289 просмотров

MetaTrader под Linux: запускаем в облаке

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

Этот пост - про разворачивание своей торговой системы на выделенном сервере с операционной системой Linux.

Как брокеры, так независимые сервисы предлагают услуги запуска торговых систем с использованием VPS - Virtual Private Server или Виртуальный Выделенный Сервер.  Внешне выглядит все неплохо: $5-$10 и ваш терминал работает 24 часа 7 дней в неделю. Но, при ближайшем рассмотрении, обнаруживается, что большинство недорогих вариантов - это варианты с серьезными ограничениями: 

  • Как работать с файлами?
  • Можно работать с базой данных или сетью?
  • Можно ли использовать системные библиотеки в советниках?
  • Можно ли устроить взаимодействие нескольких советников?

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

Альтернатива: свой собственный сервер, который можно менее чем за час развернуть у любого продавца (Amazon, Digital Ocean) облачной инфраструктуры. Дешевле всего, надёжнее всего и перспективнее всего будет это делать используя Linux. Иначе, в стоимость аренды надо будет добавить отчисления производителям ПО и принять целый ряд дополнительных ограничений. 

Но и с Linux тоже не все так просто.  Ниже я попробую найти плюсы и минусы использования Linux в облаке для торговли:

Минусы:

  • Сложный первый шаг: фаза обучения намного шире, чем просто "запустить программу"
  • Всё придётся настроить и запустить самому

Оба этих минуса - это необходимость обучения. Но точно ли это минусы? Всегда ведь считалось, что обучение - лучшая инвестиция!  

А теперь давайте посмотрим что будет в плюсах:

  • В советниках можно использовать любые технологии: базы, файлы, сеть, библиотеки.
  • Независимость от одного провайдера: подойдет любой провайдер, который даст возможность развернуть свой Linux сервер.
  • Недорогой полноценный хостинг (на уровне $5/месяц)
  • Сервер может параллельно решать и другие задачи (быть прокси-сервером, поддерживать простой веб-сайт, хранить файлы)
  • Полученные знания можно будет применять в решении любых схожих задач в будущем.

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


Шаг 1. Получаем доступ к своей облачной Linux машине.

Покупаем хостинг. Можно у Amazon, компания даже предлагает каждому новому клиенту целый год бесплатного использования слабенького сервера и набора сервисов. Минус Amazon: сервер действительно слабый, а если заходите его улучшить, это уже будет не $5, а минимум $15 в месяц.  Одним из реально практичных решений, на мой взгляд, будет использование сервиса Digital Ocean: $5 за машину с 20Gb SSD диском, 512Mb памяти и 1.5Gz процессором с помесячным контрактом. Первый месяц - бесплатно.

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

Как установить Linux на свою облачную машину? Обычно, нужно просто выбрать тип системы из списка предлагаемых в браузере, ввести имя пользователя и пароль и нажать кнопку "Вперед!". После этого вы получите сетевой адрес компьютера и доступ по SSH.

И вот тут стоп!  SSH стоит изучить отдельно. Если у вас есть доступ к машине по SSH - у вас есть любой возможный доступ к этой машине: и к графическим приложениям, к базам данных и вообще к любым портам. Можете даже смотреть видео через SSH - была бы быстрой сеть. Поэтому, тут стоит остановиться и почитать об SSH.

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

Вы все еще используете пароль, чтобы зайти на свой компьютер? :)


Шаг 2. Настраиваем свой Linux

Первое действие на новой машине: расширяем память за счёт добавления виртуального своп-диска. Если в процессе работы программы заканчивается память - Linux убивает одну из программ и продолжает работать. Так как умирание торгового терминала не входит в наши планы, то за счёт использования свопа (дисковой памяти), мы увеличим в несколько раз размер доступной системе памяти:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Далее, устанавливаем Wine для запуска Windows программ. Подробнее об этом читайте в  предыдущем посте.

И последнее, что стоит сделать - это установить библиотеки для работы виртуального графического сервера. Ведь на данный момент на вашем Linux нет никакой графической оболочки, а MetaTrader - графическая программа. Linux позволяет запускать графические программы и без "реальной графики". Они будут отрисовываться либо на удаленном компьютере, либо в виртуальной памяти - любом виде сервера который поддерживает протокол X11:

sudo apt-get install xvfb x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps

Готово. Теперь осталось скопировать на сервер папку с самим терминалом. Это, кстати, тоже можно сделать при помощи команды из пакета SSH: scp или Secure Copy.  Альтернатива: скачать дистрибутив терминала прямо с сервера программой  wget <адрес>. В этом случае терминал придётся устанавливать - то есть работать с графикой. Об этом - следующая секция.

Шаг 3. Работаем с графикой

Итак, если у вас родная система Linux: запуск программ на удалённых машинах крайне прост: используйте ключ -X для ssh и любая графическая программа запущенная на той машине из текущей SSH сессии будет открывать отдельное окно уже на вашей машине:

ssh -X <адрес-компьютера>

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

ssh -XC -c blowfish-cbc,arcfour <адрес-компьютера>

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

В примере ниже мы устанавливаем переменную DISPLAY в :1 - это номер виртуального дисплея (аналог реального монитора) и запускаем виртуальный сервер с этим дисплеем - аналог включения реального монитора. В последней строке мы уже запускаем любую графическую программу, которая будет отрисовываться на дисплее, номер которого записан в переменной DISPLAY.

export DISPLAY=:1
Xvfb $DISPLAY &
xvfb-run terminal.exe

Вот так просто на Linux получить дополнительный монитор. Реально одной только командой Xvfb.

Теперь у нас есть графический сервер на Linux который могут использовать любые графические программы. Для того, чтобы облачный компьютер разрешил подключаться к виртуальному серверу запускаем на нём сервис VNC используя следующую команду:

x11vnc -rfbport 4544 -display :1 -forever

Внимание! Это доступ без пароля с текущем именем пользователя. Для постоянной работы, позже, установите пароль следующей командой и перезапустите x11vnc с ключём -rfbauth /tmp/vncpass

x11vnc -storepasswd /tmp/vncpass # сохранение пароля для x11vnc

Теперь к серверу можно подключаться любым клиентом поддерживающим протокол VNC. Например Remmina Desktop или RealVNC.

Порт VNC сервера, как и любой другой кроме SSH, будет, скорее всего, закрыт для удалённого доступа и открывать его не нужно: используйте SSH туннель. Сервис SSH позволяет "пробросить" любой порт с удалённой машины так, словно это порт на вашей локальной машине. Современные VNC клиенты об этом знают и имеют для этого опцию. Если ваш клиент нет - ничего страшного, но придется запускать SSH-туннель отдельной командой или установить его сервисом.


Шаг 4. Запускаем терминал как сервис

Последний шаг: как сделать так, чтобы программы запущенные нами на Linux продолжали работать и после закрытия окна с ssh сессией? Для этого, их нужно запустить специальным образом: как системные сервисы или демоны. В нашем случае нужно запустить 3 программы: виртуальный графический сервер Xvfb, сам терминал MT4, и сервис VNC для удалённого доступа к графическому серверу. VNC здесь - опция. Его можно запускать на время использования через командную строку и отключать позже.

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

/etc/init.d/xvfb

XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset"
PIDFILE=/var/run/xvfb.pid
case "$1" in
start)
echo -n "Starting virtual X frame buffer: Xvfb"
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
echo "."
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
start-stop-daemon --stop --quiet --pidfile $PIDFILE
echo "."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
exit 1
esac
exit 0
/etc/init.d/mt4
USER=myuser
BROKER=weltrade
PIDFILE=/var/run/mt4_$BROKER.pid

case "$1" in
start)
echo -n "Starting $BROKER mt4 terminal: $BROKER.exe"
start-stop-daemon --start --user $USER --chuid $USER --chdir /home/$USER/mt4/$BROKER --pidfile $PIDFILE --make-pidfile --background --exec $BROKER.exe
echo ""
;;
stop)
echo -n "Stopping $BROKER mt4 terminal"
start-stop-daemon --stop -u $USER --quiet --pidfile $PIDFILE
echo ""
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/$BROKER {start|stop|restart}"
exit 1
esac
exit 0
Заметьте, что терминал в этом примере запускается с правами вашего пользователя из папки ~/mt4/$BROKER

/etc/init.d/x11vnc:
USER=myuser
X11_VNC=/usr/bin/x11vnc
X11_VNC_ARGS="-rfbport 4544 -rfbauth /tmp/vncpass -display :1 -forever -auth /tmp/xvfb.auth"
PIDFILE=/var/run/x11vnc.pid

case "$1" in
start)
echo -n `"Starting X11 VNC server"
start-stop-daemon --start --user $USER --chuid $USER --pidfile $PIDFILE --make-pidfile --background --exec $X11_VNC -- $X11_VNC_ARGS
echo ""
;;
stop)
echo -n "Stopping X11 VNC server"
start-stop-daemon --stop -u @ --quiet --pidfile $PIDFILE
echo ""
;;
restart)
$0 stop
$0 start
;;
*)

echo "Usage: /etc/init.d/x11vnc {start|stop|restart}"
exit 1
esac
exit 0

Запускаем программы как сервисы:
sudo /etc/init.d/xvfb start
sudo /etc/init.d/mt4 start
sudo /etc/init.d/x11vnc start
и открываем удалённый рабочий стол при помощи VNC клиента.

Что в итоге?

Итак, было потрачено время на установку. Решены десятки вопросов. Это было сложно. Но теперь, когда все сделано, результатом можно пользоваться без каких-либо усилий. Нажимая на иконку VNC клиента на рабочем столе вы сразу попадаете на удалённый компьютер в торговый терминал.

На моей машине с 512 Мб оперативной памяти типично используется порядка 270Mb, а в кэше при этом "исторически" занято порядка 290Mb. Использование 1 процессора на уровне 20% при 1 терминале с 6 открытыми графиками.  Кроме этого на сервере стоят http-proxy, база MySQL куда активно ведется дамп тиковых котировок и запущен веб-сервер.

Хотите повторить это на другом компьютере? Запишите все команды и, в итоге, весь процесс установки и настройки Linux для MetaTrader не займёт более 15 минут.
Но главное здесь, понять этот опыт применим вообще к любым программам и сервисам! Чувство того, что знаешь и умеешь - это чувство свободы.



 0     0
« к списку постов

Обсуждение
Добавить комментарий