Данное руководство описывает процесс ручной установки системы управления устройствами Ринго MDM с использованием собственных SSL-сертификатов. После выполнения всех шагов вы получите полностью настроенную систему с веб-интерфейсом для управления устройствами Apple.
Перед началом установки убедитесь, что ваша система соответствует следующим требованиям:
key.json
— файл для доступа к Docker-реестру (предоставляется компанией Ринго).crt
и .key
Этот вариант подходит для серверов с внешним («белым») IP-адресом, где у вас уже есть готовые SSL-сертификаты для домена.
Обновление системы. Войдите на сервер под учётной записью root
и обновите пакеты системы до последних версий:
Для Ubuntu/Debian/Astra:
apt update && apt upgrade -y
Для RedOS/ROSA:
dnf update -y
Для ALT Linux:
apt-get update && apt-get upgrade -y
Важно! Все команды в данном руководстве должны выполняться от имени пользователя root.
Установка Docker. Ринго распространяется в виде Docker-контейнеров. Для запуска системы требуется установленный Docker Engine и Docker Compose. Воспользуйтесь официальным руководством от Docker для установки Docker Engine, а также инструкцией по установке Docker Compose. Ниже представленны примеры для разных OC:
Для Ubuntu/Debian:
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
Для Astra Linux:
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
Для ALT Linux:
apt-get update
apt-get install -y docker-engine openssl docker-compose
systemctl enable --now docker
Для RedOS:
dnf install -y docker-ce docker-ce-cli docker-compose openssl
systemctl enable docker --now
Для ROSA Linux:
dnf install -y docker-ce docker-cli docker-compose openssl
systemctl enable docker --now
Создание рабочей директории. Создайте каталог для размещения конфигурационных файлов и перейдите в него:
mkdir -p /etc/ringo
cd /etc/ringo
Подготовка файлов. Поместите в директорию /etc/ringo/
следующие файлы:
key.json
— ключ доступа к Docker-реестру*.crt
— SSL-сертификат для вашего домена*.key
— приватный ключ SSL-сертификатаВажно: В директории должен быть ровно один файл с расширением .crt
и один файл с расширением .key
.
Проверка DNS-разрешения. Убедитесь, что выбранное доменное имя правильно разрешается в IP-адрес вашего сервера:
nslookup yourdomain.com
Создание файла конфигурации Docker Compose. Создайте файл /etc/ringo/docker-compose.yml
с конфигурацией всех необходимых контейнеров:
nano /etc/ringo/docker-compose.yml
version: '3.9'
services:
backend:
image: cr.yandex/crpsam2fr3938ne18jd0/ringo:latest
container_name: roll-deploy-backend
command: npm run start:prod
depends_on:
- micromdm
- 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
MICROMDM_HOST: http://micromdm:8080
MICROMDM_SECRET: ${MICROMDM_SECRET}
DOCUMENTATION_ENABLED: ${DOCUMENTATION_ENABLED}
DOCUMENTATION_LOGIN: ${DOCUMENTATION_LOGIN}
DOCUMENTATION_PASSWORD: ${DOCUMENTATION_PASSWORD}
STATIC_LOGIN: ${STATIC_LOGIN}
STATIC_PASSWORD: ${STATIC_PASSWORD}
PUBLIC_URL: ${PUBLIC_URL}
AGENT_SECRET: ${AGENT_SECRET}
ADMIN_LOGIN: ${ADMIN_LOGIN}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
ports:
- "127.0.0.1:5000:5000"
volumes:
- vol-deploy-backend:/files
micromdm:
image: ghcr.io/micromdm/micromdm:v1.11.0
container_name: roll-deploy-micromdm
environment:
MICROMDM_SERVER_URL: ${PUBLIC_URL}
MICROMDM_API_KEY: ${MICROMDM_SECRET}
MICROMDM_WEBHOOK_URL: http://backend:5000/mdm/webhook
MICROMDM_TLS: false
volumes:
- vol-deploy-micromdm:/var/db/micromdm
deploydb:
image: postgres:14-alpine
container_name: roll-deploy-db
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-micromdm:
vol-deploy-backend:
vol-deploy-postgres:
Создание файла переменных окружения. Создайте файл /etc/ringo/.env
с необходимыми параметрами. Для автоматической генерации паролей используйте следующий скрипт, заменив yourdomain.com
на ваш домен:
nano generate_env.sh
#!/bin/bash
# Function for generating random passwords
genpass() {
openssl rand -base64 10 | cut -d '=' -f 1
}
# Creating .env file with environment variables
cat << EOF > /etc/ringo/.env
JWT_SECRET_KEY=$(genpass)
JWT_EXPIRATION_TIME=24h
DB_PASSWORD=$(genpass)
MICROMDM_SECRET=$(genpass)
DOCUMENTATION_ENABLED=true
DOCUMENTATION_LOGIN=support
DOCUMENTATION_PASSWORD=$(genpass)
STATIC_LOGIN=support
STATIC_PASSWORD=$(genpass)
PUBLIC_URL=https://yourdomain.com
AGENT_SECRET=$(genpass)
HOST_DOMAIN=yourdomain.com
EMAIL=support@ringomdm.ru
ADMIN_LOGIN=support
ADMIN_PASSWORD=$(genpass)
EOF
chmod +x generate_env.sh
./generate_env.sh
Установка 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
Подключение к Docker-реестру. Выполните аутентификацию в реестре контейнеров, используя предоставленный ключ:
cat /etc/ringo/key.json | docker login --username json_key --password-stdin cr.yandex
Запуск Docker. Убедитесь, что Docker запущен:
systemctl start docker
Запуск контейнеров. Перейдите в рабочую директорию и запустите все сервисы в фоновом режиме:
Для большинства систем:
cd /etc/ringo
docker compose up -d
Для Astra Linux (используется старая версия Docker Compose):
cd /etc/ringo
docker-compose up -d
Проверка статуса контейнеров. Убедитесь, что все контейнеры успешно запущены:
docker compose ps
Установка Nginx. В зависимости от дистрибутива Linux выполните соответствующую команду:
Для Ubuntu/Debian/Astra Linux/ALT Linux:
apt-get install -y nginx
Для RedOS/ROSA:
dnf install -y nginx
Создание конфигурации Nginx. С помощью текстового редактора создайте конфигурационный файл для проксирования запросов к контейнерам Ринго:
Для Ubuntu/Debian/Astra Linux/ALT Linux:
nano /etc/nginx/sites-available/ringo.conf
Для RedOS/ROSA:
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
Активация конфигурации.
Для систем на базе Debian (Ubuntu/Debian/Astra Linux/ALT Linux):
ln -s /etc/nginx/sites-available/ringo.conf /etc/nginx/sites-enabled/ringo.conf
rm /etc/nginx/sites-enabled/default
Для RedOS/ROSA:
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
Для корректного отображения информации о сервере в интерфейсе Ринго выполните сбор системной информации с помощью следующего скрипта:
nano collect_host_info.sh
#!/bin/bash
collect_host_info() {
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 > /etc/ringo/hostInfo.json
{
"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
echo "System information has been collected and saved to /etc/ringo/hostInfo.json"
}
copy_files_to_containers() {
echo "Copying files to containers..."
docker cp /etc/ringo/hostInfo.json roll-deploy-backend:/hostInfo.json
docker cp /etc/ringo/docker-compose.yml roll-deploy-backend:/docker-compose.yml
docker container restart roll-deploy-backend
rm /etc/ringo/hostInfo.json
echo "Files copied and containers restarted."
}
collect_host_info
copy_files_to_containers
chmod +x collect_host_info.sh
./collect_host_info.sh
После выполнения всех шагов система Ринго MDM будет доступна по адресу https://yourdomain.com
.
Для входа в систему используйте учётные данные:
ADMIN_PASSWORD
из файла /etc/ringo/.env
Чтобы посмотреть все сгенерированные пароли, выполните:
cat /etc/ringo/.env
Важные замечания:
.env
для последующего использования