Данное руководство описывает процесс ручной установки системы управления устройствами Ринго UEM, с доступом в интернет на сервере.
Важно! Все команды в данном руководстве должны выполняться от имени пользователя root.
Войдите на сервер под учётной записью root и обновите пакеты системы до последних версий.
apt update && apt upgrade -y
dnf update -y
apt-get update && apt-get upgrade -y
Ринго распространяется в виде Docker-контейнеров. Для запуска системы требуется установленный Docker Engine и Docker Compose. Воспользуйтесь официальным руководством от Docker для установки Docker Engine, а также инструкцией по установке Docker Compose. Ниже представленны примеры для разных OC:
apt install -y ca-certificates curl gnupg openssl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo "$ID")/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(. /etc/os-release && echo "$ID") $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
apt update
apt install -y docker.io openssl curl
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
apt-get update
apt-get install -y docker-engine openssl docker-compose
systemctl enable --now docker
dnf install -y docker-ce docker-ce-cli docker-compose openssl
systemctl enable docker --now
dnf install -y docker-ce docker-cli docker-compose openssl
systemctl enable docker --now
Создание рабочей директории. Создайте каталог для размещения конфигурационных файлов и перейдите в него:
mkdir -p /etc/ringo
cd /etc/ringo
Копирование ключа реестра. Скопируйте файл key.json в директорию /etc/ringo/. Для переноса можно использовать команды scp или sftp, либо вручную создать файл в указанной директории, вставив в него содержимое key.json.
Подключение к Docker-реестру. Выполните аутентификацию в реестре контейнеров, используя предоставленный ключ:
cat /etc/ringo/key.json | docker login --username json_key --password-stdin cr.yandex
Проверка DNS-разрешения. Убедитесь, что выбранное доменное имя правильно отображается в IP-адрес вашего сервера:
nslookup yourdomain.com
Создание docker-compose. Выбирите вариант в зависимости от вашего сценария установки:
Создайте файл /etc/ringo/docker-compose.yml с конфигурацией всех необходимых контейнеров:
nano /etc/ringo/docker-compose.yml
services:
nginx-proxy:
image: jwilder/nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /apps/docker-articles/nginx/vhost.d:/etc/nginx/vhost.d
- /apps/docker-articles/nginx/certs:/etc/nginx/certs:ro
- /apps/docker-articles/nginx/html:/usr/share/nginx/html
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion:latest
restart: always
depends_on:
- nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /apps/docker-articles/nginx/vhost.d:/etc/nginx/vhost.d
- /apps/docker-articles/nginx/certs:/etc/nginx/certs:rw
- /apps/docker-articles/nginx/html:/usr/share/nginx/html
backend:
image: cr.yandex/crpsam2fr3938ne18jd0/ringo:[тег_версии]
container_name: roll-deploy-backend
restart: always
depends_on:
- deploydb
environment:
VIRTUAL_HOST: ${HOST_DOMAIN}
VIRTUAL_PORT: 5000
LETSENCRYPT_HOST: ${HOST_DOMAIN}
LETSENCRYPT_EMAIL: ${EMAIL}
PORT: 5000
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
JWT_EXPIRATION_TIME: ${JWT_EXPIRATION_TIME}
DB_HOST: deploydb
DB_PORT: 5432
DB_USERNAME: roll
DB_PASSWORD: ${DB_PASSWORD}
DB_DATABASE: roll_deploy
DB_SCHEMA: ${DB_SCHEMA}
DB_SEARCH_PATH: ${DB_SEARCH_PATH}
DOCUMENTATION_ENABLED: ${DOCUMENTATION_ENABLED}
DOCUMENTATION_LOGIN: ${DOCUMENTATION_LOGIN}
DOCUMENTATION_PASSWORD: ${DOCUMENTATION_PASSWORD}
PUBLIC_URL: ${PUBLIC_URL}
AGENT_SECRET: ${AGENT_SECRET}
ADMIN_LOGIN: ${ADMIN_LOGIN}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
FEATURE_TERMINAL: ${FEATURE_TERMINAL}
ports:
- "127.0.0.1:5000:5000"
volumes:
- vol-deploy-backend:/files
deploydb:
image: postgres:14-alpine
container_name: roll-deploy-db
restart: always
environment:
POSTGRES_DB: roll_deploy
POSTGRES_USER: roll
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- '127.0.0.1:5432:5432'
volumes:
- vol-deploy-postgres:/var/lib/postgresql/data
volumes:
vol-deploy-backend:
vol-deploy-postgres:
Создайте файл /etc/ringo/docker-compose.yml с конфигурацией всех необходимых контейнеров:
nano /etc/ringo/docker-compose.yml
services:
backend:
image: cr.yandex/crpsam2fr3938ne18jd0/ringo:[тег_версии]
container_name: roll-deploy-backend
restart: always
depends_on:
- deploydb
environment:
VIRTUAL_HOST: ${HOST_DOMAIN}
VIRTUAL_PORT: 5000
LETSENCRYPT_HOST: ${HOST_DOMAIN}
LETSENCRYPT_EMAIL: ${EMAIL}
PORT: 5000
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
JWT_EXPIRATION_TIME: ${JWT_EXPIRATION_TIME}
DB_HOST: deploydb
DB_PORT: 5432
DB_USERNAME: roll
DB_PASSWORD: ${DB_PASSWORD}
DB_DATABASE: roll_deploy
DB_SCHEMA: ${DB_SCHEMA}
DB_SEARCH_PATH: ${DB_SEARCH_PATH}
DOCUMENTATION_ENABLED: ${DOCUMENTATION_ENABLED}
DOCUMENTATION_LOGIN: ${DOCUMENTATION_LOGIN}
DOCUMENTATION_PASSWORD: ${DOCUMENTATION_PASSWORD}
PUBLIC_URL: ${PUBLIC_URL}
AGENT_SECRET: ${AGENT_SECRET}
ADMIN_LOGIN: ${ADMIN_LOGIN}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
FEATURE_TERMINAL: ${FEATURE_TERMINAL}
ports:
- "127.0.0.1:5000:5000"
volumes:
- vol-deploy-backend:/files
deploydb:
image: postgres:14-alpine
container_name: roll-deploy-db
restart: always
environment:
POSTGRES_DB: roll_deploy
POSTGRES_USER: roll
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- '127.0.0.1:5432:5432'
volumes:
- vol-deploy-postgres:/var/lib/postgresql/data
volumes:
vol-deploy-backend:
vol-deploy-postgres:
Создание файла переменных окружения. Создайте файл /etc/ringo/.env с необходимыми параметрами. Для автоматической генерации используйте следующий скрипт, в интерактивный ввод введите ваш FQDN для Ринго:
nano generate_env.sh
#!/bin/bash
genpass() {
openssl rand -base64 10 | cut -d '=' -f 1
}
read -rp "Enter domain (e.g. example.com): " FQDN
if [[ -z "$FQDN" ]]; then
echo "Error: domain cannot be empty"
exit 1
fi
cat << EOF > /etc/ringo/.env
JWT_SECRET_KEY=$(genpass)
JWT_EXPIRATION_TIME=24h
DB_PASSWORD=$(genpass)
DOCUMENTATION_ENABLED=true
DOCUMENTATION_LOGIN=support
DOCUMENTATION_PASSWORD=$(genpass)
PUBLIC_URL=https://$FQDN
AGENT_SECRET=$(genpass)
HOST_DOMAIN=$FQDN
EMAIL=support@ringomdm.ru
ADMIN_LOGIN=support
ADMIN_PASSWORD=$(genpass)
FEATURE_TERMINAL=true
EOF
echo "/etc/ringo/.env file has been successfully created with domain: $FQDN"
Дайте права на исполнение:
chmod +x generate_env.sh
Выполните скрипт:
./generate_env.sh
Добавьте в файл /etc/ringo/.env значения переменных:
DB_SCHEMA=public
DB_SEARCH_PATH=public,ext
По умолчанию используется схема public. Если в вашей базе данных используется другая схема, укажите ее название вместо public.
Cбор информации о системе. Создайте скрипт сбора информации о системе в рабочей директории Ринго:
cd /etc/ringo
nano collect_host_info.sh
Вставьте следующий код:
#!/bin/bash
set -e
HOST_INFO_DIR="/etc/ringo"
HOST_INFO_FILE="$HOST_INFO_DIR/hostInfo.json"
collect_host_info() {
echo "Collecting system information..."
mkdir -p "$HOST_INFO_DIR"
local date=$(date '+%Y-%m-%d %H:%M:%S')
local os_info=$(grep "PRETTY_NAME" /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"')
local docker_info=$(docker version --format 'json' 2>/dev/null || echo '{"error": "Docker not available"}')
local cpu_info=$(lscpu --json 2>/dev/null || echo '{"error": "lscpu not available"}')
local memory_gb=$(free --giga 2>/dev/null | awk '/^Mem:/ {print $2}' || echo "0")
local memory_bytes=$((memory_gb * 1024 * 1024 * 1024))
local disk_info=$(lsblk --json 2>/dev/null || echo '{"error": "lsblk not available"}')
cat << EOF > "$HOST_INFO_FILE"
{
"general": {
"OperatingSystemPrettyName": "$os_info"
},
"docker": $docker_info,
"cpu": $cpu_info,
"memory": [{"description":"System memory","units":"bytes","size":$memory_bytes}],
"disk": $disk_info,
"metadata": {
"date": "$date",
"generalCommand": "custom function",
"dockerCommand": "docker version --format 'json'",
"cpuCommand": "lscpu --json",
"memoryCommand": "free --giga",
"diskCommand": "lsblk --json"
}
}
EOF
chmod 644 "$HOST_INFO_FILE"
echo "Saved to $HOST_INFO_FILE"
}
collect_host_info
Сделайте файл скрипта исполняемым и запустите его:
chmod +x collect_host_info.sh
./collect_host_info.sh
Запуск контейнеров. Перейдите в рабочую директорию и запустите все сервисы в фоновом режиме:
cd /etc/ringo
docker compose up -d
cd /etc/ringo
docker-compose up -d
Этот часть инструкции обязательна для работы Ринго, если вы выбрали вариант создания docker-compose без использования Let’s Encrypt.
Следующая инструкция описывает настройку Nginx на сервере с Ринго с использованием собственных SSL-сертификатов.
Установка Nginx. В зависимости от дистрибутива Linux выполните соответствующую команду:
apt-get install -y nginx
dnf install -y nginx
Загрузка SSL-сертификатов. Создайте директорию для SSL-сертификатов и скопируйте в неё файлы сертификата и ключа (замените yourdomain.com на ваш домен):
mkdir -p /etc/ssl/yourdomain.com
cp yourdomain.com.crt /etc/ssl/yourdomain.com/cert.crt
cp yourdomain.com.key /etc/ssl/yourdomain.com/privkey.key
Создание конфигурации Nginx. С помощью текстового редактора создайте конфигурационный файл для проксирования запросов к контейнерам Ринго:
nano /etc/nginx/sites-available/ringo.conf
nano /etc/nginx/conf.d/ringo.conf
yourdomain.com на ваш домен):server {
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:5000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Nginx-Proxy true;
proxy_buffering off;
client_max_body_size 5m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
listen 443 ssl;
ssl_certificate /etc/ssl/yourdomain.com/cert.crt;
ssl_certificate_key /etc/ssl/yourdomain.com/privkey.key;
include /etc/ssl/options-ssl-nginx.conf;
ssl_dhparam /etc/ssl/ssl-dhparams.pem;
}
server {
if ($host = yourdomain.com) {
return 301 https://$host$request_uri;
}
listen 80;
server_name yourdomain.com;
return 404;
}
Создание параметров SSL. Создайте файл с безопасными настройками SSL:
nano /etc/ssl/options-ssl-nginx.conf
ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
Генерация параметров Диффи-Хеллмана. Создайте файл для дополнительной безопасности SSL-соединений:
openssl dhparam -out /etc/ssl/ssl-dhparams.pem 2048
Активация конфигурации.
ln -s /etc/nginx/sites-available/ringo.conf /etc/nginx/sites-enabled/ringo.conf
rm /etc/nginx/sites-enabled/default
rm -f /etc/nginx/conf.d/default.conf
Настройка SELinux (только для RedOS/ROSA). Если используется SELinux, выполните дополнительную настройку:
/usr/sbin/selinuxenabled && echo "SELinux enabled" || echo "SELinux disabled"
yourdomain.com на ваш домен):chcon -t httpd_config_t /etc/nginx/conf.d/ringo.conf
chcon -t cert_t /etc/ssl/yourdomain.com/cert.crt
chcon -t cert_t /etc/ssl/yourdomain.com/privkey.key
setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_network_relay on
semanage port -a -t http_port_t -p tcp 5000
restorecon -Rv /etc/nginx
restorecon -Rv /etc/ssl
Перезапуск и включение Nginx. Примените новую конфигурацию:
systemctl restart nginx
systemctl enable nginx
После запуска контейнеров приложение Ринго будет доступно на порту 5000. Вам необходимо настроить внешний прокси-сервер для SSL-терминации и проксирования запросов к приложению.
После выполнения всех шагов Ринго будет доступен по адресу:
https://yourdomain.com
Для входа в систему используйте учётные данные:
ADMIN_PASSWORD из файла /etc/ringo/.envЧтобы посмотреть все сгенерированные пароли, выполните:
cat /etc/ringo/.env
Подробное описание переменных окружения приведено в соответствующем разделе документации: