Как установить Arcane на VPS и управлять Docker через веб Печать

  • 0

Если вам нужен удобный веб-интерфейс для Docker без лишней “магии”, Arcane закрывает задачу быстро: ставим его на VPS, подключаемся по браузеру, управляем контейнерами, образами, сетями, томами и Compose-проектами в одном месте. Ниже вы развернёте Arcane на Debian 12, Ubuntu 24.04 или AlmaLinux 9, сделаете безопасное подключение к Docker через socket-proxy, настроите каталог проектов и научитесь запускать сервисы через Compose. По трудозатратам это обычно 15–30 минут на чистом сервере, основные риски связаны с доступом к Docker сокету и путями к вашим проектам.

Что такое Arcane и зачем он нужен на сервере

Arcane это современная панель управления Docker, по смыслу близкая к Portainer, но с упором на понятный интерфейс и работу с проектами. Он полезен, когда на сервере уже несколько контейнеров и вы устали помнить команды, где какой compose лежит, и в каком каталоге тома. Arcane даёт единое место, где видно состояние контейнеров, ресурсы, логи, события, сети, volumes и ваши Compose-проекты. 

Если вы делаете прокси, веб-сервисы, ботов, очереди, мониторинг, CI, базы, Arcane удобно ставить на отдельный маленький VPS, либо на тот же сервер, где крутятся контейнеры. Для коммерческих задач обычно выбирают VPS с честными vCPU и NVMe, а если нужен стабильный пинг по Европе и быстрые апгрейды, имеет смысл сразу смотреть локации NL/DE/UK. В HSTQ это как раз стандартная история, плюс можно заказать VPS с преднастройкой Docker и базовой безопасностью, чтобы не тратить вечер на рутину.

До установки: что подготовить на VPS

Arcane работает в контейнере и слушает порт 3552. Если вы планируете управлять несколькими Docker-хостами, у агента будет порт 3553. 

Минимально для старта хватит 1 vCPU и 1 ГБ RAM, но комфортнее 2 vCPU и 2–4 ГБ, особенно если панель будет на том же узле, что и сервисы.

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

  • /opt/arcane это сама панель

  • /opt/docker это каталог ваших Compose-проектов (каждый проект в отдельной папке)

Эта схема важна, потому что Arcane корректно “поднимает” проекты только когда пути внутри контейнера совпадают с путями на хосте, иначе относительные volume-монты в compose начнут разваливаться. 

Установка Docker на Debian 12 и Ubuntu 24.04

Выполняйте от root. Команды ниже рабочие и не требуют ручной правки.

apt update
apt install -y docker.io docker-compose-plugin curl openssl ca-certificates
systemctl enable --now docker
docker version
docker compose version

Если docker compose version не выводит версию, значит плагин compose не установился, повторите apt install -y docker-compose-plugin.

AlmaLinux 9: вариант с Podman (самый простой на RHEL-семействе)

На AlmaLinux часто удобнее использовать Podman, он штатный и поддерживает Docker-совместимый сокет. Arcane умеет работать через сокет Podman, подменяя его как Docker socket. 

dnf -y update
dnf -y install podman podman-docker curl openssl
systemctl enable --now podman.socket
ls -l /run/podman/podman.sock

Дальше в compose Arcane мы будем монтировать /run/podman/podman.sock в контейнер как /var/run/docker.sock.

Установка Arcane на Linux через Docker Compose (рекомендуемый безопасный вариант)

Почему безопасный. По умолчанию панели Docker получают полный доступ к Docker daemon через /var/run/docker.sock. В Arcane можно поставить прослойку socket-proxy, которая отдаёт только нужные API-методы, это резко снижает “радиус поражения”, если панель будет скомпрометирована. 

Шаг 1. Создаём каталоги и генерируем секреты

mkdir -p /opt/arcane /opt/docker
cd /opt/arcane

ENCRYPTION_KEY="$(docker run --rm ghcr.io/getarcaneapp/arcane:latest /app/arcane generate secret | tr -d '\r\n')"
JWT_SECRET="$(docker run --rm ghcr.io/getarcaneapp/arcane:latest /app/arcane generate secret | tr -d '\r\n')"
SERVER_IP="$(ip route get 1.1.1.1 | awk '{print $7; exit}')"

echo "ENCRYPTION_KEY=$ENCRYPTION_KEY"
echo "JWT_SECRET=$JWT_SECRET"
echo "SERVER_IP=$SERVER_IP"

Arcane ожидает ENCRYPTION_KEY длиной 32 байта в поддерживаемом формате, генератор в контейнере как раз выдаёт корректное значение. 

Шаг 2. Пишем compose.yaml без плейсхолдеров

Для Debian/Ubuntu (Docker) используйте этот compose. Он уже включает socket-proxy и монтирует каталог проектов так, чтобы пути совпадали.

cat > /opt/arcane/compose.yaml <<EOF
services:
  docker-socket-proxy:
    image: tecnativa/docker-socket-proxy:latest
    container_name: arcane-docker-proxy
    environment:
      - EVENTS=1
      - PING=1
      - VERSION=1
      - POST=1
      - CONTAINERS=1
      - EXEC=1
      - IMAGES=1
      - INFO=1
      - NETWORKS=1
      - VOLUMES=1
      - AUTH=0
      - SECRETS=0
      - BUILD=0
      - COMMIT=0
      - CONFIGS=0
      - DISTRIBUTION=0
      - NODES=0
      - PLUGINS=0
      - SERVICES=0
      - SESSION=0
      - SWARM=0
      - SYSTEM=0
      - TASKS=0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - arcane-internal
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped

  arcane:
    image: ghcr.io/getarcaneapp/arcane:latest
    container_name: arcane
    ports:
      - "3552:3552"
    volumes:
      - arcane-data:/app/data
      - /opt/docker:/opt/docker
    environment:
      - APP_URL=http://${SERVER_IP}:3552
      - PUID=0
      - PGID=0
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - JWT_SECRET=${JWT_SECRET}
      - DOCKER_HOST=tcp://docker-socket-proxy:2375
    networks:
      - arcane-internal
    depends_on:
      - docker-socket-proxy
    restart: unless-stopped

networks:
  arcane-internal:
    name: arcane-internal
    driver: bridge

volumes:
  arcane-data:
    name: arcane-data
EOF

Набор переменных socket-proxy и идея ограничивать Docker API описаны в официальной схеме. 

Для AlmaLinux 9 (Podman) вместо proxy можно начать проще, подключив сокет Podman напрямую:

cat > /opt/arcane/compose.yaml <<EOF
services:
  arcane:
    image: ghcr.io/getarcaneapp/arcane:latest
    container_name: arcane
    ports:
      - "3552:3552"
    volumes:
      - /run/podman/podman.sock:/var/run/docker.sock
      - arcane-data:/app/data
      - /opt/docker:/opt/docker
    environment:
      - APP_URL=http://${SERVER_IP}:3552
      - PUID=0
      - PGID=0
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - JWT_SECRET=${JWT_SECRET}
    restart: unless-stopped

volumes:
  arcane-data:
    name: arcane-data
EOF

Arcane официально поддерживает работу через Podman socket как Docker-совместимый API, с оговоркой, что специфичные функции Podman могут не отображаться. 

Шаг 3. Запускаем и проверяем, что всё живое

cd /opt/arcane
docker compose up -d
docker compose ps
curl -fsS http://127.0.0.1:3552/api/health && echo "OK"

Если curl вернул OK, открывайте в браузере http://SERVER_IP:3552.

Первый вход в Arcane и настройка проектов

После старта Arcane попросит пройти первичную настройку. Стандартные креды для первого входа:

  • логин: arcane

  • пароль: arcane-admin 

Сразу меняйте пароль, это обязательно.

Дальше ключевой момент, который чаще всего ломает “импорт” compose-проектов. В настройках проектов укажите каталог /opt/docker. А в контейнер Arcane мы уже примонтировали /opt/docker:/opt/docker, то есть пути совпадают, и относительные тома внутри ваших compose будут резолвиться одинаково и для Arcane, и для Docker на хосте. Именно эту логику про “matching paths” подчёркивает документация. 

Как пользоваться Arcane: три сценария, которые дают максимум пользы

Запуск нового сервиса через Compose проект

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

mkdir -p /opt/docker/hello-nginx
cat > /opt/docker/hello-nginx/compose.yaml <<'EOF'
services:
  web:
    image: nginx:alpine
    container_name: hello-nginx
    ports:
      - "8088:80"
    restart: unless-stopped
EOF

docker compose -f /opt/docker/hello-nginx/compose.yaml up -d
curl -I http://127.0.0.1:8088 | head -n 1

Теперь откройте Arcane, перейдите в Projects, найдите hello-nginx и убедитесь, что проект отображается, контейнер запущен, логи доступны, а порт 8088 слушается.

Управление контейнерами: логи, exec, быстрые правки

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

  • быстро открыть логи и понять, что упало

  • зайти внутрь контейнера и выполнить команду (exec)

  • перезапустить контейнер после изменения переменных окружения или конфига

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

docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
docker events --since 10m --filter type=container | tail -n 20

Обновления и чистка мусора

Arcane живёт как контейнер, обновляется как контейнер. Нормальный цикл такой: сначала бэкап данных, потом pull и up.

cd /opt/arcane
docker compose pull
docker compose up -d
docker image prune -f

Бэкап Arcane и быстрый откат

Данные Arcane лежат в volume arcane-data. Бэкап можно делать в tar.gz, это переносимо и быстро.

mkdir -p /root/backup
docker run --rm -v arcane-data:/data -v /root/backup:/backup alpine:3.20 sh -lc "apk add --no-cache tar >/dev/null && tar -czf /backup/arcane-data.tgz -C /data ."
ls -lh /root/backup/arcane-data.tgz

Восстановление, если нужно откатиться:

docker compose -f /opt/arcane/compose.yaml down
docker volume rm arcane-data
docker volume create arcane-data
docker run --rm -v arcane-data:/data -v /root/backup:/backup alpine:3.20 sh -lc "apk add --no-cache tar >/dev/null && tar -xzf /backup/arcane-data.tgz -C /data"
docker compose -f /opt/arcane/compose.yaml up -d

Частые ошибки и мгновенная починка

Порт 3552 занят, Arcane не стартует

Проверьте, кто слушает порт, и либо освобождайте, либо меняйте порт в compose.

ss -lntp | grep ':3552' || true
docker logs arcane --tail 200

Arcane не видит проекты или “ломаются” относительные пути в compose

Это почти всегда несоответствие путей внутри контейнера и на хосте. У вас должно быть смонтировано /opt/docker:/opt/docker, а в Arcane projects directory должен быть ровно /opt/docker. 

Страшно давать панели полный доступ к Docker

Используйте socket-proxy, как в compose выше, он ограничивает API и монтирует сокет read-only на уровне proxy. 

За реверс-прокси панель “тупит” и не обновляет статус в реальном времени

Arcane использует WebSocket для realtime, при проксировании нужно корректно пропускать WebSocket. Это типичная причина “пустых” обновлений за прокси. 

Если вы не хотите возиться, самый простой рабочий вариант для админки это доступ по IP и firewall только под ваш адрес, либо отдельный VPN на сервер.

Масштабирование: от одного VPS до multi-node и когда нужен выделенный сервер

На одном VPS Arcane идеален для старта: вы видите все контейнеры, быстро дебажите, держите порядок в проектах. Когда появляется второй и третий сервер, логично перейти к централизованному управлению через Remote Environments. Механика такая: на удалённый хост ставится агент (headless), а основной Arcane подключается к нему по API-ключу, агент слушает TCP 3553. 

Практически это означает, что Arcane превращается в единый “пульт” для нескольких Docker-хостов.

Когда рационально переходить на выделенный сервер:

  • если контейнеров много и они упираются в IOPS, особенно базы и очереди

  • если вы хотите гарантированно стабильную производительность под высокую нагрузку

  • если вам нужна подсеть IPv4 (/24 и больше) под прокси, антифрод, гео-распределение, отдельные сервисы, PTR и нормальная сетвая история

В таких кейсах обычно начинают с VPS в NL/DE/UK, затем выносят тяжёлые штуки на dedicated, а Arcane оставляют как панель управления (или переносят на отдельный маленький управляющий VPS). Если вам нужна аренда IPv4, подсети, настройка PTR/WHOIS, помощь с LIR/ASN и администрирование 24/7 под Linux или Windows, это как раз то, под что HSTQ заточен. И да, Arcane можно поставить “под ключ” вместе с Docker, чтобы вы сразу зашли в панель и начали разворачивать сервисы.

Windows: как пользоваться Arcane без плясок

Arcane удобнее ставить на Linux VPS, а с Windows просто заходить в панель браузером. Если вам нужно поднять Arcane локально на Windows 11 или Windows Server 2025 с Docker и Linux containers, то в PowerShell последовательность будет такой:

New-Item -ItemType Directory -Path C:\arcane -Force | Out-Null
Set-Location C:\arcane

$enc = (docker run --rm ghcr.io/getarcaneapp/arcane:latest /app/arcane generate secret).Trim()
$jwt = (docker run --rm ghcr.io/getarcaneapp/arcane:latest /app/arcane generate secret).Trim()

@"
services:
  arcane:
    image: ghcr.io/getarcaneapp/arcane:latest
    container_name: arcane
    ports:
      - "3552:3552"
    volumes:
      - arcane-data:/app/data
    environment:
      - APP_URL=http://localhost:3552
      - PUID=0
      - PGID=0
      - ENCRYPTION_KEY=$enc
      - JWT_SECRET=$jwt
    restart: unless-stopped

volumes:
  arcane-data:
    name: arcane-data
"@ | Set-Content -Path .\compose.yaml -Encoding UTF8

docker compose up -d

Дальше открываете http://localhost:3552, входите под arcane / arcane-admin и меняете пароль. 

Мини-FAQ

Можно ли ставить Arcane на тот же сервер, где сервисы?

Да, это нормальная схема, просто не забывайте про безопасность Docker сокета и делайте бэкап volume arcane-data.

Почему Arcane не импортирует мой compose проект корректно?

Почти всегда из-за путей: каталог проектов должен быть смонтирован с одинаковым путём внутри контейнера и на хосте. 

Как управлять несколькими серверами из одного Arcane?

Через Remote Environments: на каждом хосте агент, у менеджера доступ к агенту по TCP 3553 и API ключ. 

Что важнее для стабильности, VPS или выделенный сервер?

Если упираетесь в IOPS, сеть и предсказуемость под нагрузкой, dedicated почти всегда выигрывает по “нервам” и цене владения на объёмах.

Нужна ли отдельная подсеть IPv4 и ASN?

Если строите прокси-сеть, почтовую инфраструктуру, хотите независимую маршрутизацию и контроль репутации адресов, тогда подсеть и иногда ASN начинают окупаться.

Если хотите, чтобы это было вообще без сюрпризов, проще заказать VPS в нужной локации (NL/DE/UK/USA/RU/SG), попросить преднастройку Docker и Arcane, а дальше уже разворачивать свои проекты через панель и спокойно масштабироваться до multi-node или выделенного сервера.


Помог ли вам данный ответ?

« Назад

База знаний