Skip to main content

Установка NetBox Docker на Ubuntu Server 24.04 VM в Proxmox

Цель документа: развернуть рабочий NetBox в Docker на отдельной виртуальной машине Ubuntu Server 24.04 minimal, работающей на Proxmox VE.

VM Ubuntu Server 24.04 minimal на Proxmox VE
  ├── Docker Engine 28.0.0
  ├── Docker Compose plugin
  ├── Portainer CE LTS → https://IP_VM:9443
  └── NetBox Docker   → http://IP_VM:8000

1.1 1. Принятая IP-схема

1.1.1 Этап 1 — установка, обновление, первичный запуск

IP VM:       192.168.1.70/24
Gateway:     192.168.1.1
NetBox:      http://192.168.1.70:8000
Portainer:   https://192.168.1.70:9443

1.1.2 Этап 2 — production-сеть

IP VM:       10.44.100.226/24
Gateway:     10.44.100.1
NetBox:      http://10.44.100.226:8000
Portainer:   https://10.44.100.226:9443

Reverse proxy / Nginx на первом этапе не используем.

1.2 2. Проверенный выбор версии Docker

Docker ставим из официального Docker APT-репозитория, но фиксируем конкретную версию Docker Engine 28.0.0.

По фактическим тестам на данной VM:

Docker 27.5.1 — работает
Docker 28.0.0 — работает
Docker 28.1.1 и выше — в нашей сети зависали на docker pull

Симптом проблемных версий:

unable to decode token response: context deadline exceeded
Client.Timeout or context cancellation while reading body

Итоговое решение: использовать официальную версию 5:28.0.0-1~ubuntu.24.04~noble и поставить docker-ce/docker-ce-cli на hold, чтобы apt upgrade не обновил Docker до проблемной версии.

1.3 3. Параметры VM в Proxmox

Параметр Значение
OS Ubuntu Server 24.04 minimal
CPU 2 vCPU минимум, лучше 4 vCPU
RAM 4 GB минимум, лучше 8 GB
Disk 60–100 GB
Disk controller VirtIO SCSI
Network VirtIO
QEMU Guest Agent Enabled
VM backup включить в регламент Proxmox backup

NetBox ставим только в отдельную VM. На сам Proxmox-хост NetBox не устанавливаем.

1.4 4. Первый вход и определение сетевого интерфейса

После установки Ubuntu войти в консоль VM через Proxmox.

Проверить имя сетевого интерфейса:

Обычно в Proxmox VM интерфейс называется:

ens18

Дальше в инструкции используется ens18. Если имя другое — заменить ens18 на фактическое имя интерфейса.

1.5 5. Настройка временного IP без nano

На минимальной Ubuntu nano может быть еще не установлен, поэтому первичную сетевую конфигурацию создаем через tee.

Создать резервную копию текущих netplan-файлов:

sudo mkdir -p /root/netplan-backup
sudo cp /etc/netplan/*.yaml /root/netplan-backup/ 2>/dev/null || true
sudo ls -l /root/netplan-backup/

Удалить текущие netplan-файлы, чтобы не было конфликта конфигураций:

sudo rm -f /etc/netplan/*.yaml

Создать новый netplan-файл:

sudo tee /etc/netplan/01-netbox-static.yaml > /dev/null <<'EOF'
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: []
      optional: true
      addresses:
        - 192.168.1.70/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 192.168.1.1
          - 8.8.8.8
EOF

Ограничить права:

sudo chmod 600 /etc/netplan/01-netbox-static.yaml

Проверить файл:

sudo cat /etc/netplan/01-netbox-static.yaml

Проверить синтаксис:

sudo netplan generate

Безопасно применить:

sudo netplan try

Если работаешь через консоль Proxmox, можно применить сразу:

sudo netplan apply

Проверить сеть:

ip -br addr
ip route
resolvectl status
ping -c 4 192.168.1.1
ping -c 4 8.8.8.8

Проверить IPv6:

ip -6 addr

На ens18 не должно быть inet6 fe80::.... Наличие ::1/128 на lo допустимо.

1.6 6. Установка nano и базовых пакетов

Теперь, когда сеть есть:

sudo apt update
sudo apt upgrade -y

sudo apt install -y \
  ca-certificates \
  curl \
  gnupg \
  git \
  nano \
  openssl \
  iputils-ping \
  tcpdump \
  arping \
  bash-completion \
  lsof \
  qemu-guest-agent \
  systemd-timesyncd \
  ufw

Назначение основных пакетов:

ca-certificates     — корневые сертификаты для HTTPS
curl                — загрузка файлов и HTTP-проверки
gnupg               — работа с GPG-ключами репозиториев
git                 — клонирование netbox-docker
nano                — текстовый редактор
openssl             — генерация паролей/ключей
iputils-ping        — ping
tcpdump             — проверка сетевого трафика
arping              — L2-проверка доступности устройств
bash-completion     — автодополнение команд по Tab
lsof                — просмотр открытых файлов/портов
qemu-guest-agent    — интеграция VM с Proxmox
systemd-timesyncd   — синхронизация времени
ufw                 — простой firewall

1.7 7. Hostname

sudo hostnamectl set-hostname netbox
hostnamectl

1.8 8. QEMU Guest Agent

sudo systemctl enable --now qemu-guest-agent
systemctl status qemu-guest-agent --no-pager

Нормальное состояние:

Active: active (running)

Если Proxmox не показывает IP-адрес VM, проверить:

VM → Options → QEMU Guest Agent → Enabled

После включения параметра VM лучше полностью выключить и запустить заново.

1.9 9. Bash completion

Открыть .bashrc:

nano ~/.bashrc

В конец файла добавить:

# Подключаем bash-completion, если он установлен
[[ $PS1 && ! ${BASH_COMPLETION_VERSINFO:-} && -f /usr/share/bash-completion/bash_completion ]] && \
    . /usr/share/bash-completion/bash_completion

Применить:

source ~/.bashrc

1.10 10. Время, NTP и RTC

Проверить текущее состояние:

timedatectl status
date

Задать часовой пояс:

sudo timedatectl set-timezone Europe/Samara
timedatectl status
date

Для Linux-серверов аппаратные часы лучше хранить в UTC:

sudo timedatectl set-local-rtc 0
timedatectl status

Ожидаемо:

RTC in local TZ: no

Настроить NTP:

sudo nano /etc/systemd/timesyncd.conf

Для временной сети:

[Time]
NTP=192.168.1.1 0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=2.pool.ntp.org 3.pool.ntp.org

Применить:

sudo systemctl restart systemd-timesyncd
sudo timedatectl set-ntp true

timedatectl status
systemctl status systemd-timesyncd --no-pager

После перехода в production можно заменить NTP на внутренний источник времени:

[Time]
NTP=10.44.100.1
FallbackNTP=

Только если 10.44.100.1 действительно является NTP-сервером.

1.11 11. Дополнительное системное отключение IPv6

Netplan уже отключает IPv6 на рабочем интерфейсе. Если нужно отключить IPv6 жестко на уровне ядра:

sudo tee /etc/sysctl.d/99-disable-ipv6.conf > /dev/null <<'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF

sudo sysctl --system

Проверить:

sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
sysctl net.ipv6.conf.lo.disable_ipv6
ip -6 addr

1.12 12. Установка Docker Engine 28.0.0

Docker ставим из официального Docker APT-репозитория, но не последнюю версию, а зафиксированную рабочую версию 28.0.0.

1.12.1 12.1. Удалить возможные конфликтующие пакеты

sudo apt remove -y \
  docker.io \
  docker-compose \
  docker-compose-v2 \
  docker-doc \
  podman-docker \
  containerd \
  runc || true

1.12.2 12.2. Добавить официальный Docker APT repository

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Проверить наличие версии 28.0.0:

apt-cache madison docker-ce | grep '5:28\.0\.0'
apt-cache madison docker-ce-cli | grep '5:28\.0\.0'

Ожидаемо должны быть строки вида:

5:28.0.0-1~ubuntu.24.04~noble

1.12.3 12.3. Установить Docker 28.0.0

DOCKER_VERSION="5:28.0.0-1~ubuntu.24.04~noble"

sudo apt install -y --allow-downgrades \
  docker-ce="$DOCKER_VERSION" \
  docker-ce-cli="$DOCKER_VERSION" \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

1.12.4 12.4. Настроить Docker daemon

Создать минимальный рабочий конфиг:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "ipv6": false,
  "dns": ["192.168.1.1", "8.8.8.8"],
  "storage-driver": "overlay2"
}
EOF

Проверить:

cat /etc/docker/daemon.json

1.12.5 12.5. Запустить Docker

sudo systemctl enable --now containerd
sudo systemctl enable --now docker.socket
sudo systemctl enable --now docker

Проверить:

docker --version
docker compose version
docker info | grep -E "Server Version|Storage Driver"
systemctl show docker --property=Environment

Ожидаемо:

Docker version 28.0.0
Server Version: 28.0.0
Storage Driver: overlay2
Environment=

1.12.6 12.6. Проверить скачивание и запуск образов

docker pull hello-world:latest
docker run --rm hello-world:latest

Ожидаемо:

Hello from Docker!

Проверить Alpine:

docker pull alpine:latest
docker run --rm alpine:latest cat /etc/os-release

Проверить BusyBox:

docker pull busybox:latest
docker run --rm busybox:latest echo "busybox works"

1.12.7 12.7. Зафиксировать Docker 28.0.0

Чтобы apt upgrade не обновил Docker до проблемной версии:

sudo apt-mark hold docker-ce docker-ce-cli

Проверить:

apt-mark showhold

Ожидаемо:

docker-ce
docker-ce-cli

docker-compose-plugin пока не фиксируем, потому что он работает нормально.

1.13 13. Установка Portainer CE LTS

Portainer Server устанавливается как Docker-контейнер. UI-порт Portainer — 9443; Edge tunnel port 8000 нужен только для Edge Agent-сценариев, поэтому мы его не публикуем.

Создать каталог:

sudo mkdir -p /opt/portainer
sudo chown -R $USER:$USER /opt/portainer
cd /opt/portainer

Создать .env:

cat > .env <<'EOF'
PORTAINER_BIND_IP=192.168.1.70
PORTAINER_HTTPS_PORT=9443
PORTAINER_IMAGE=portainer/portainer-ce:lts
EOF

Создать docker-compose.yml:

nano docker-compose.yml

Вставить:

services:
  portainer:
    container_name: portainer
    image: ${PORTAINER_IMAGE}
    restart: always
    ports:
      - "${PORTAINER_BIND_IP}:${PORTAINER_HTTPS_PORT}:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:
    name: portainer_data

networks:
  default:
    name: portainer_network

Запустить:

docker compose up -d
docker ps

Проверить:

curl -k -I https://192.168.1.70:9443

Открыть в браузере:

https://192.168.1.70:9443

При первом входе создать администратора Portainer.

Важно: Portainer имеет доступ к Docker socket:

/var/run/docker.sock

Это фактически высокий уровень доступа к Docker-хосту.

1.14 14. Установка NetBox Docker

NetBox Docker — community-maintained Docker-сборка NetBox, содержащая компоненты для запуска NetBox в контейнерах.

Клонировать release-ветку:

cd /opt

sudo git clone -b release https://github.com/netbox-community/netbox-docker.git

sudo chown -R $USER:$USER /opt/netbox-docker

cd /opt/netbox-docker

Создать .env для Docker Compose:

cat > .env <<'EOF'
NETBOX_BIND_IP=192.168.1.70
NETBOX_EXTERNAL_PORT=8000
EOF

Создать docker-compose.override.yml:

cat > docker-compose.override.yml <<'EOF'
services:
  netbox:
    ports:
      - "${NETBOX_BIND_IP}:${NETBOX_EXTERNAL_PORT}:8080"
EOF

Проверить:

cat .env
cat docker-compose.override.yml

Расшифровка:

192.168.1.70:8000 → порт VM
8080               → внутренний порт контейнера NetBox

1.15 15. Ручная настройка секретов NetBox

До первого запуска NetBox нужно задать пароли и SECRET_KEY.

Рекомендуется использовать длинные строки без специальных символов:

A-Z a-z 0-9

Примеры ниже условные. Замени их на свои реальные значения.

1.15.1 15.1. PostgreSQL

cd /opt/netbox-docker
nano env/postgres.env

Найти или добавить:

POSTGRES_PASSWORD=MyVeryStrongPostgresPassword1234567890

Открыть основной env-файл NetBox:

nano env/netbox.env

Найти или добавить:

DB_PASSWORD=MyVeryStrongPostgresPassword1234567890

Важно: POSTGRES_PASSWORD и DB_PASSWORD должны совпадать.

1.15.2 15.2. Redis

nano env/redis.env

Найти или добавить:

REDIS_PASSWORD=MyVeryStrongRedisPassword1234567890

В env/netbox.env задать такой же пароль:

REDIS_PASSWORD=MyVeryStrongRedisPassword1234567890

1.15.3 15.3. Redis cache

nano env/redis-cache.env

Найти или добавить:

REDIS_PASSWORD=MyVeryStrongRedisCachePassword1234567890

В env/netbox.env задать такой же пароль cache Redis:

REDIS_CACHE_PASSWORD=MyVeryStrongRedisCachePassword1234567890

1.15.4 15.4. SECRET_KEY и базовые параметры NetBox

В env/netbox.env найти или добавить:

SECRET_KEY=MyVeryLongNetBoxSecretKey1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
ALLOWED_HOSTS=192.168.1.70 localhost 127.0.0.1
CSRF_TRUSTED_ORIGINS=http://192.168.1.70:8000
TIME_ZONE=Europe/Samara
PREFER_IPV4=True

Проверить:

grep -E "DB_PASSWORD|REDIS_PASSWORD|REDIS_CACHE_PASSWORD|SECRET_KEY|ALLOWED_HOSTS|CSRF_TRUSTED_ORIGINS|TIME_ZONE|PREFER_IPV4" env/netbox.env

grep -E "POSTGRES_PASSWORD" env/postgres.env

grep -E "REDIS_PASSWORD" env/redis.env

grep -E "REDIS_PASSWORD" env/redis-cache.env

Сохранить копию секретов:

sudo mkdir -p /root/netbox-secrets
sudo chmod 700 /root/netbox-secrets

sudo nano /root/netbox-secrets/netbox-secrets.txt

Внести реальные значения:

POSTGRES_PASSWORD=...
REDIS_PASSWORD=...
REDIS_CACHE_PASSWORD=...
SECRET_KEY=...

Ограничить права:

sudo chmod 600 /root/netbox-secrets/netbox-secrets.txt

1.16 16. Запуск NetBox

cd /opt/netbox-docker

docker compose pull

docker compose up -d

docker compose ps

Первый запуск может занять несколько минут.

Проверить логи:

docker compose logs --tail=100 netbox
docker compose logs --tail=100 netbox-worker
docker compose logs --tail=100 postgres
docker compose logs --tail=100 redis
docker compose logs --tail=100 redis-cache

Проверить доступ:

curl -I http://192.168.1.70:8000

Открыть в браузере:

http://192.168.1.70:8000

1.17 17. Создание администратора NetBox

cd /opt/netbox-docker

docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser

Ввести:

Username: admin
Email address: admin@example.local
Password: надежный пароль
Password again: повтор пароля

Проверить версию NetBox:

docker compose exec netbox /opt/netbox/netbox/manage.py version

1.18 18. Доступ к сервисам на этапе установки

Сервис Адрес
NetBox http://192.168.1.70:8000
Portainer CE https://192.168.1.70:9443

Portainer использует самоподписанный сертификат, поэтому браузер может показать предупреждение.

1.19 19. Проверка портов

ss -tulpn | grep -E ':8000|:9443'

Ожидаемо:

192.168.1.70:8000  → NetBox
192.168.1.70:9443  → Portainer

Проверить Docker:

docker ps

Проверить сервисы:

curl -I http://192.168.1.70:8000

curl -k -I https://192.168.1.70:9443

1.20 20. Firewall на этапе установки

Docker-публикация портов может обходить обычные правила ufw, поэтому основная защита — изолированная сеть, ACL/маршрутизация и привязка портов к конкретному IP. ufw оставляем как дополнительный уровень.

sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 8000 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 9443 proto tcp

sudo ufw enable

sudo ufw status verbose

1.21 21. Резервное копирование NetBox

Нужно бэкапить:

1. PostgreSQL-базу NetBox
2. media/reports/scripts
3. /opt/netbox-docker
4. /root/netbox-secrets

Создать каталог:

sudo mkdir -p /var/backups/netbox
sudo chmod 700 /var/backups/netbox

Создать backup-скрипт:

sudo tee /usr/local/sbin/netbox-backup.sh > /dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/netbox"
NETBOX_DIR="/opt/netbox-docker"
DATE="$(date +%F_%H-%M-%S)"
KEEP_DAYS=30

mkdir -p "$BACKUP_DIR"
chmod 700 "$BACKUP_DIR"

cd "$NETBOX_DIR"

echo "[$(date)] Starting NetBox backup..."

# Backup PostgreSQL database
docker compose exec -T postgres pg_dump -U netbox -d netbox | gzip > "${BACKUP_DIR}/netbox_db_${DATE}.sql.gz"

# Backup NetBox media/reports/scripts
docker compose exec -T netbox tar -czf - -C /opt/netbox/netbox media reports scripts > "${BACKUP_DIR}/netbox_files_${DATE}.tar.gz"

# Backup configuration and secrets
tar -czf "${BACKUP_DIR}/netbox_config_${DATE}.tar.gz" \
  /opt/netbox-docker \
  /root/netbox-secrets 2>/dev/null || true

# Delete old backups
find "$BACKUP_DIR" -type f -name "netbox_*" -mtime +"$KEEP_DAYS" -delete

echo "[$(date)] NetBox backup completed."
EOF

sudo chmod +x /usr/local/sbin/netbox-backup.sh

Тестовый запуск:

sudo /usr/local/sbin/netbox-backup.sh

sudo ls -lh /var/backups/netbox

Создать systemd service:

sudo tee /etc/systemd/system/netbox-backup.service > /dev/null <<'EOF'
[Unit]
Description=NetBox Docker Backup
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/netbox-backup.sh
EOF

Создать systemd timer:

sudo tee /etc/systemd/system/netbox-backup.timer > /dev/null <<'EOF'
[Unit]
Description=Run NetBox backup daily

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target
EOF

Включить timer:

sudo systemctl daemon-reload
sudo systemctl enable --now netbox-backup.timer

systemctl list-timers | grep netbox

1.22 22. Проверка после перезагрузки VM

sudo reboot

После перезагрузки:

systemctl status docker --no-pager

docker ps

curl -I http://192.168.1.70:8000

curl -k -I https://192.168.1.70:9443

systemctl list-timers | grep netbox

timedatectl status

ip -6 addr

apt-mark showhold

1.23 23. Перевод VM в production-сеть 10.44.100.226/24

Выполнять после проверки NetBox и Portainer на временном IP.

Лучше делать через консоль Proxmox, потому что SSH-сессия может оборваться.

1.23.1 23.1. Backup перед переводом

sudo /usr/local/sbin/netbox-backup.sh

sudo ls -lh /var/backups/netbox

1.23.2 23.2. Остановка сервисов перед сменой IP

cd /opt/netbox-docker
docker compose stop

cd /opt/portainer
docker compose stop

1.23.3 23.3. Меняем IP в netplan

sudo tee /etc/netplan/01-netbox-static.yaml > /dev/null <<'EOF'
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: false
      dhcp6: false
      accept-ra: false
      link-local: []
      optional: true
      addresses:
        - 10.44.100.226/24
      routes:
        - to: default
          via: 10.44.100.1
      nameservers:
        addresses:
          - 10.44.100.1
EOF

Если DNS в production-сети другой — заменить 10.44.100.1 на реальные DNS.

sudo chmod 600 /etc/netplan/01-netbox-static.yaml
sudo netplan generate
sudo netplan try

Или из консоли Proxmox:

sudo netplan apply

Проверить:

ip -br addr
ip route
resolvectl status
ping -c 4 10.44.100.1

1.23.4 23.4. Обновляем NTP под production-сеть

sudo nano /etc/systemd/timesyncd.conf

Если 10.44.100.1 является NTP-сервером:

[Time]
NTP=10.44.100.1
FallbackNTP=

Применить:

sudo systemctl restart systemd-timesyncd
sudo timedatectl set-ntp true

timedatectl status
systemctl status systemd-timesyncd --no-pager

1.23.5 23.5. Меняем IP в NetBox Compose .env

cd /opt/netbox-docker

sed -i 's/^NETBOX_BIND_IP=.*/NETBOX_BIND_IP=10.44.100.226/' .env

cat .env

Ожидаемо:

NETBOX_BIND_IP=10.44.100.226
NETBOX_EXTERNAL_PORT=8000

1.23.6 23.6. Меняем IP в NetBox env

cd /opt/netbox-docker

nano env/netbox.env

Заменить строки:

ALLOWED_HOSTS=10.44.100.226 localhost 127.0.0.1
CSRF_TRUSTED_ORIGINS=http://10.44.100.226:8000

Проверить:

grep -E "ALLOWED_HOSTS|CSRF_TRUSTED_ORIGINS" env/netbox.env

1.23.7 23.7. Меняем IP в Portainer Compose .env

cd /opt/portainer

sed -i 's/^PORTAINER_BIND_IP=.*/PORTAINER_BIND_IP=10.44.100.226/' .env

cat .env

Ожидаемо:

PORTAINER_BIND_IP=10.44.100.226
PORTAINER_HTTPS_PORT=9443
PORTAINER_IMAGE=portainer/portainer-ce:lts

1.23.8 23.8. Обновляем firewall под production-сеть

sudo ufw allow from 10.44.100.0/24 to any port 22 proto tcp
sudo ufw allow from 10.44.100.0/24 to any port 8000 proto tcp
sudo ufw allow from 10.44.100.0/24 to any port 9443 proto tcp

sudo ufw status numbered

После проверки доступа из production-сети старые правила для 192.168.1.0/24 можно удалить:

sudo ufw status numbered
sudo ufw delete <НОМЕР_ПРАВИЛА>

Удалять аккуратно: после каждого удаления номера правил пересчитываются.

1.23.9 23.9. Запускаем сервисы на новом IP

cd /opt/netbox-docker
docker compose up -d

cd /opt/portainer
docker compose up -d

Проверить:

docker ps

ss -tulpn | grep -E ':8000|:9443'

curl -I http://10.44.100.226:8000

curl -k -I https://10.44.100.226:9443

В браузере:

http://10.44.100.226:8000
https://10.44.100.226:9443

1.24 24. Управление NetBox

cd /opt/netbox-docker

Статус:

docker compose ps

Запуск:

docker compose up -d

Остановка:

docker compose stop

Перезапуск:

docker compose restart

Логи:

docker compose logs -f netbox
docker compose logs -f netbox-worker
docker compose logs -f postgres

1.25 25. Управление Portainer

cd /opt/portainer

Статус:

docker compose ps

Перезапуск:

docker compose restart

Логи:

docker compose logs -f

1.26 26. Обновление NetBox Docker

Перед обновлением обязательно сделать backup:

sudo /usr/local/sbin/netbox-backup.sh

Обновление:

cd /opt/netbox-docker

git pull

docker compose pull

docker compose up -d

docker compose ps

docker compose logs --tail=100 netbox

Docker Engine при этом не обновляем автоматически, потому что docker-ce и docker-ce-cli стоят на hold.

1.27 27. Финальная проверка

docker --version
docker compose version
docker info | grep -E "Server Version|Storage Driver"
apt-mark showhold

systemctl status docker --no-pager
docker ps

curl -I http://10.44.100.226:8000
curl -k -I https://10.44.100.226:9443

ss -tulpn | grep -E ':8000|:9443'

sudo ufw status verbose

timedatectl status

ip -6 addr

systemctl list-timers | grep netbox

Итоговые адреса:

NetBox:    http://10.44.100.226:8000
Portainer: https://10.44.100.226:9443

Финальное состояние:

Ubuntu Server 24.04 VM
  ├── Docker Engine 28.0.0
  ├── Docker Compose plugin
  ├── Portainer CE LTS
  │     └── https://10.44.100.226:9443
  │
  └── NetBox Docker
        ├── netbox
        ├── netbox-worker
        ├── postgres
        ├── redis / valkey
        └── redis-cache / valkey-cache

Конфигурация:
  /opt/netbox-docker
  /opt/portainer

Секреты:
  /root/netbox-secrets/netbox-secrets.txt

Backup:
  /var/backups/netbox

1.28 28. Что пока не делаем

На первом этапе не добавляем:

reverse proxy / Nginx
корпоративный HTTPS-сертификат для NetBox
LDAP/AD
Proxmox-интеграцию
NetBox-плагины
автоматическую синхронизацию устройств

Сначала нужно убедиться, что базовый NetBox стабильно работает, переживает перезагрузку VM, нормально бэкапится и открывается из production-сети. Затем можно переходить к первичному наполнению NetBox: Sites, Locations, Racks/шкафы, VLAN, Prefixes, Devices, Interfaces, а уже после этого — к интеграции с Proxmox.

1.29 29. Ссылки

  • Docker Engine installation for Ubuntu: https://docs.docker.com/engine/install/ubuntu/
  • Portainer CE Docker standalone installation: https://docs.portainer.io/start/install-ce/server/docker/linux
  • NetBox Docker repository: https://github.com/netbox-community/netbox-docker