Production TKControl¶
Установка будет проводиться на 2-х хостах на дистрибутиве Debian 10.
Salt-Master Server¶
Следующая инструкция выполняется на первом хосте. Инструкция включает в себя установку и настройку salt-master, salt-api и vncrepeater.
Установка¶
Перед началом установки обновите список пакетов и установите необходимые библиотеки:
sudo apt update -y sudo apt install -y git make gcc python3-pip python-dev
SaltStack¶
Установите Salt Master и Salt Api:
sudo apt install -y salt-master salt-api
TKControl¶
Установите tkcontrol-configure модуль:
sudo pip3 install --prefix /usr/local \ --index-url http://pypi.accentos.ru/ \ --trusted-host pypi.accentos.ru \ tkcontrol-configure
VNC Repeater¶
Склонируйте репозиторий uvncrepeater-ac:
git clone https://github.com/tenchman/uvncrepeater-ac
Запустите сборку приложения:
sudo make -C uvncrepeater-ac install
Добавьте пользователя для uvncrepeater:
sudo useradd -s /sbin/nologin uvncrep
Настройка¶
Запустите конфигурирование для salt-master и vnc-repeater:
sudo tkcontrol-configure vnc-repeater --with-systemd && \ sudo tkcontrol-configure salt-master --with-patch
Если необходимо подключение к VNC по паролю, замените файл
/srv/salt/states/connect-vnc.sls
:sudo cp /srv/salt/states/connect-vnc.sls /srv/salt/states/connect-vnc-notify.sls sudo cp /srv/salt/states/connect-vnc-pass.sls /srv/salt/states/connect-vnc.sls
Сгенерируйте пароль для salt пользователя:
openssl rand -base64 16
Полученный пароль вставьте в поле «sharedsecret» в
/etc/salt/master.d/api.conf
, гдеgenerated_password
- пароль, сгенерированный прошлой командой:sudo sed 's|saltpass|generated_password|' -i /etc/salt/master.d/api.conf
Откройте доступ к salt-api для других сетей:
sudo sed 's|"host": "127.0.0.1"|"host": "0.0.0.0"|' -i /etc/salt/master.d/api.conf
Включите SSL:
sudo sed 's|"disable_ssl": True|"disable_ssl": False|' -i /etc/salt/master.d/api.conf
Добавьте сертификат salt-api. Если его нет, сгенерируйте самоподписанный сертификат:
# Создайте директорию для сертификатов sudo mkdir /etc/salt/ssl # Сгенерируйте сертификат, при генерации укажите "Common Name" saltstack sudo openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout /etc/salt/ssl/salt-api.key -out /etc/salt/ssl/salt-api.crt # Измените владельца сертификата и приватного ключа sudo chown salt:salt /etc/salt/ssl/salt-api.key /etc/salt/ssl/salt-api.crt
Добавьте расположение сертификатов в
/etc/salt/master.d/api.conf
:"rest_cherrypy": { ... "ssl_crt": "/etc/salt/ssl/salt-api.crt", "ssl_key": "/etc/salt/ssl/salt-api.key", ... }
Запуск¶
Перезапустите службы salt-master и salt-api:
sudo systemctl restart salt-master sudo systemctl restart salt-api
Запустите vnc-repeater:
sudo systemctl enable tkcontrol-vnc-repeater sudo systemctl start tkcontrol-vnc-repeater
TKControl Server¶
Следующая инструкция выполняется на втором хосте. Инструкция включает в себя установку и настройку mongodb, rabbitmq, websockify, nginx, tkcontrol-auth, tkcontrol-backend, tkcontrol-services, tkcontrol-dbadapter.
Установка¶
Перед началом установки обновите список пакетов и установите необходимые библиотеки:
sudo apt update -y sudo apt install -y git gnupg2 make gcc python3-pip libsasl2-dev python-dev libldap2-dev libssl-dev
Mongo DB¶
Импортируйте публичный gpg ключ mongodb:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
Добавьте mongodb в список репозиториев:
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
Обновите список пакетов и установите mongodb:
sudo apt update -y sudo apt install -y mongodb-org
Добавьте mongodb в автозапуск и включите службу:
sudo systemctl enable mongod sudo systemctl start mongod
Rabbit MQ¶
Установите Rabbit MQ Server:
sudo apt install -y rabbitmq-server
Добавьте rabbitmq в автозапуск и включите службу:
sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server
Websockify¶
Установите websockify:
sudo apt install -y websockify
Nginx JWT Module¶
Установка из исходных файлов¶
Установите версии модулей в переменные окружения:
export NGINX_VERSION=1.14.2 && \ export JANSSON_VERSION=2.10 && \ export LIBJWT_VERSION=1.9.0
Установите необходимые библиотеки для сборки исходных файлов:
sudo apt install -y build-essential sudo apt install -y wget unzip git cmake check autoconf libtool openssl libssl-dev libpcre3 libpcre3-dev zlib1g zlib1g-dev libxml2 libxml2-dev libxslt-dev libgd-dev google-perftools libgoogle-perftools-dev libperl-dev
Установите nginx:
sudo apt install -y nginx=$NGINX_VERSION-2+deb10u4
Остановите и отключите nginx:
sudo systemctl stop nginx sudo systemctl disable nginx
Установите библиоткеу для работы с JSON:
wget https://github.com/akheron/jansson/archive/v$JANSSON_VERSION.zip && \ unzip v$JANSSON_VERSION.zip && \ rm v$JANSSON_VERSION.zip && \ cd jansson-$JANSSON_VERSION && \ cmake . -DJANSSON_BUILD_SHARED_LIBS=1 -DJANSSON_BUILD_DOCS=OFF && \ make && \ make check && \ sudo make install && \ cd ..
Установите библиотеку для работы с JWT токенами:
wget https://github.com/benmcollins/libjwt/archive/v$LIBJWT_VERSION.zip && \ unzip v$LIBJWT_VERSION.zip && \ rm v$LIBJWT_VERSION.zip && \ cd libjwt-$LIBJWT_VERSION && \ autoreconf -i && \ ./configure && \ make all && \ sudo make install && \ cd ..
Загрузите nginx модуль для работы с JWT токенами:
git clone https://github.com/TeslaGov/ngx-http-auth-jwt-module
Соберите nginx с необходимыми модулями:
wget http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz && \ tar -xzf nginx-$NGINX_VERSION.tar.gz && \ rm nginx-$NGINX_VERSION.tar.gz && \ cd nginx-$NGINX_VERSION # Конфигурируем nginx модули ./configure --add-dynamic-module=../ngx-http-auth-jwt-module \ --prefix=/usr/share/nginx \ --sbin-path=/usr/sbin/nginx \ --modules-path=/usr/lib/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=www-data \ --group=www-data \ --build=Ubuntu \ --http-client-body-temp-path=/var/lib/nginx/body \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --http-scgi-temp-path=/var/lib/nginx/scgi \ --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ --with-pcre \ --with-pcre-jit \ --with-compat \ --with-file-aio \ --with-threads \ --with-http_addition_module \ --with-http_auth_request_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_image_filter_module=dynamic \ --with-http_mp4_module \ --with-http_random_index_module \ --with-http_realip_module \ --with-http_slice_module \ --with-http_ssl_module \ --with-http_sub_module \ --with-http_stub_status_module \ --with-http_xslt_module=dynamic \ --with-http_v2_module \ --with-http_secure_link_module \ --with-mail=dynamic \ --with-mail_ssl_module \ --with-stream=dynamic \ --with-stream_realip_module \ --with-stream_ssl_module \ --with-stream_ssl_preread_module \ --with-debug \ --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-mcUg8N/nginx-$NGINX_VERSION=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2'\ --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' # Билдим nginx make && \ sudo make install && \ cd .. # Выполняем unlink конфигурации старых модулей sudo unlink /etc/nginx/modules-enabled/50-mod-http-auth-pam.conf && \ sudo unlink /etc/nginx/modules-enabled/50-mod-http-dav-ext.conf && \ sudo unlink /etc/nginx/modules-enabled/50-mod-http-echo.conf && \ sudo unlink /etc/nginx/modules-enabled/50-mod-http-geoip.conf && \ sudo unlink /etc/nginx/modules-enabled/50-mod-http-subs-filter.conf && \ sudo unlink /etc/nginx/modules-enabled/50-mod-http-upstream-fair.conf # Добавляем конфигурацию для jwt модуля echo "load_module modules/ngx_http_auth_jwt_module.so;" | sudo tee /etc/nginx/modules-enabled/http-auth-jwt.conf
Обновите динамические библиотеки:
sudo /sbin/ldconfig
TKControl¶
Установите пакеты TKControl:
sudo pip3 install --prefix /usr/local \ --index-url http://pypi-dev.tnxos.loc/ \ --trusted-host pypi-dev.tnxos.loc \ tkcontrol-auth \ tkcontrol-backend \ tkcontrol-dbadapter \ tkcontrol-modules \ tkcontrol-configure \ tkcontrol-services
Добавьте ссылку на gunicorn:
sudo ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
Настройка¶
Добавьте hostnames в
/etc/hosts
:127.0.0.1 localhost db dbadapter backend auth mq novnc-proxy address_of_saltmaster saltstack vnc-repeater
Запустите команды для конфигурации сервисов:
sudo tkcontrol-auth configure --with-systemd && \ sudo tkcontrol-backend configure --with-systemd && \ sudo tkcontrol-dbadapter configure --with-systemd && \ sudo tkcontrol-services configure --with-systemd && \ sudo tkcontrol-configure websockify --with-systemd && \ sudo tkcontrol-configure proxy
Настройте конфигурацию tkcontrol-services
/etc/tkcontrol/tkcontrol-services/config.py
:# Измените протокол http на https sudo sed "s|'http://' + SALT_API_ADDRESS|'https://' + SALT_API_ADDRESS|" -i /etc/tkcontrol/tkcontrol-services/config.py # Установите пароль для salt пользователя, где generated_password - пароль, сгенерированный для salt-api sudo sed "s|saltpass|generated_password|" -i /etc/tkcontrol/tkcontrol-services/config.py # Скопируйте сертификат salt-api sudo scp user@saltstack:/etc/salt/ssl/salt-api.crt /etc/tkcontrol/tkcontrol-services/ca.pem
Добавьте сертификат для nginx. Если его нет, то сгенерируйте самоподписанный сертификат:
# Сгенерируйте сертификат, если его нет sudo openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout /etc/ssl/tkcontrol.key -out /etc/ssl/tkcontrol.crt
Добавьте сертификат для nginx и измените прослушиваемый порт
sudo vim /etc/nginx/sites-available/tkcontrol.conf
:# Закомментируйте следующие строчки в первом блоке server #server_name 0.0.0.0; #listen 80 default_server; #listen [::]:80 default_server; # Добавьте прослушивание 443 порта и расположение сертификата listen 443 ssl; ssl_certificate /etc/ssl/tkcontrol.crt; ssl_certificate_key /etc/ssl/tkcontrol.key;
Запуск¶
Запустите novnc-proxy:
sudo systemctl enable tkcontrol-websockify sudo systemctl start tkcontrol-websockify
Запустите tkcontrol-auth:
sudo systemctl enable tkcontrol-auth sudo systemctl start tkcontrol-auth
Запустите tkcontrol-dbadapter:
sudo systemctl enable tkcontrol-dbadapter sudo systemctl start tkcontrol-dbadapter
Запустите tkcontrol-backend:
sudo systemctl enable tkcontrol-backend sudo systemctl start tkcontrol-backend
Запустите tkcontrol-services:
sudo systemctl enable tkcontrol-services sudo systemctl start tkcontrol-services
Запустите nginx-proxy:
sudo systemctl enable nginx sudo systemctl start nginx