Установка 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.
Проверить имя сетевого интерфейса:
ip -br link
Обычно в 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