Sign inSign up

ralexan33/netbox

By ralexan33

•Updated 4 months ago

Custom builds netbox for work with Yandex Cloud

Image
Networking
Databases & storage
Monitoring & observability
0

129

ralexan33/netbox repository overview

⁠NetBox (кастомная сборка для интеграции с Yandex Claud)

Образ NetBox⁠ (5.0.1) на базе официального netboxcommunity/netbox. Поднимается через Docker Compose вместе с PostgreSQL и Valkey (Redis-совместимое хранилище для очереди задач и кэша). Все секреты генерируются автоматически — никакой ручной настройки для запуска не требуется.

Образ: ralexan33/netbox:latest-5.0.1

⁠Состав стека

СервисНазначение
netboxвеб-приложение netbox
netbox-workerфоновый обработчик задач (rqworker)
postgresбаза данных PostgreSQL 18
redisValkey — очередь задач (BD 0)
redis-cacheValkey — кэш (BD 1)

Все сервисы изолированы в отдельной сети netbox-net. Наружу открыт только веб-интерфейс NetBox (порт 8000); база и Valkey доступны лишь внутри сети. Данные хранятся в именованных томах и переживают перезапуск контейнеров.

⁠Требования

  • The Docker version must be at least 20.10.10.
  • The containerd version must be at least 1.5.6.
  • The docker-compose version must be at least 1.28.0 To check the version installed on your system run docker --version and docker compose version

⁠Запуск

⁠0. На чистую виртуальную машину c Ubuntu установите docker
sudo apt update
sudo apt upgrade
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
⁠1. Создайте папку проекта и перейдите в неё
sudo mkdir /opt/docker
sudo mkdir /opt/docker/netbox && cd /opt/docker/netbox
⁠2. Создайте файл docker-compose.yml
sudo nano docker-compose.yml

Скопируйте в него содержимое целиком:

networks:
  netbox-net:
    name: netbox-net
    driver: bridge

volumes:
  netbox-postgres-data:
  netbox-redis-data:
  netbox-redis-cache-data:
  netbox-media:
  netbox-scripts:
  netbox-reports:

services:
  postgres:
    image: docker.io/postgres:18-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - netbox-postgres-data:/var/lib/postgresql
    networks:
      - netbox-net
    healthcheck:
      test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER
      start_period: 20s
      timeout: 30s
      interval: 10s
      retries: 5
    restart: unless-stopped

  redis:
    image: docker.io/valkey/valkey:9.0-alpine
    command:
      - sh
      - -c
      - valkey-server --appendonly yes --requirepass $$REDIS_PASSWORD
    environment:
      REDIS_PASSWORD: ${REDIS_PASSWORD}
    volumes:
      - netbox-redis-data:/data
    networks:
      - netbox-net
    healthcheck: &redis-healthcheck
      test: '[ $$(valkey-cli --pass "$${REDIS_PASSWORD}" ping) = ''PONG'' ]'
      start_period: 5s
      timeout: 3s
      interval: 1s
      retries: 5
    restart: unless-stopped

  redis-cache:
    image: docker.io/valkey/valkey:9.0-alpine
    command:
      - sh
      - -c
      - valkey-server --requirepass $$REDIS_PASSWORD
    environment:
      REDIS_PASSWORD: ${REDIS_PASSWORD}
    volumes:
      - netbox-redis-cache-data:/data
    networks:
      - netbox-net
    healthcheck: *redis-healthcheck
    restart: unless-stopped

  netbox: &netbox
    image: ralexan33/netbox:latest-5.0.1
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      redis-cache:
        condition: service_healthy
    environment:
      DB_HOST: postgres
      DB_NAME: ${POSTGRES_DB}
      DB_USER: ${POSTGRES_USER}
      DB_PASSWORD: ${POSTGRES_PASSWORD}
      REDIS_HOST: redis
      REDIS_PORT: "6379"
      REDIS_DATABASE: "0"
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      REDIS_CACHE_HOST: redis-cache
      REDIS_CACHE_PORT: "6379"
      REDIS_CACHE_DATABASE: "1"
      REDIS_CACHE_PASSWORD: ${REDIS_PASSWORD}
      SECRET_KEY: ${SECRET_KEY}
      ALLOWED_HOSTS: "*"
      SKIP_SUPERUSER: "false"
      SUPERUSER_NAME: admin
      SUPERUSER_EMAIL: [email protected]
      SUPERUSER_PASSWORD: ${SUPERUSER_PASSWORD_NETBOX}
    volumes:
      - netbox-media:/opt/netbox/netbox/media:rw
      - netbox-scripts:/opt/netbox/netbox/scripts:rw
      - netbox-reports:/opt/netbox/netbox/reports:rw
    ports:
      - "8000:8080"
    networks:
      - netbox-net
    healthcheck:
      test: ["CMD", "/opt/netbox/venv/bin/python", "-c", "import sys,urllib.request; sys.exit(0 if urllib.request.urlopen('http://localhost:8080/login/', timeout=5).status==200 else 1)"]
      start_period: 300s
      interval: 15s
      timeout: 10s
      retries: 5
    restart: unless-stopped

  netbox-worker:
    <<: *netbox
    depends_on:
      netbox:
        condition: service_healthy
    command:
      - /opt/netbox/venv/bin/python
      - /opt/netbox/netbox/manage.py
      - rqworker
    ports: []
    healthcheck:
      disable: true
⁠3. Сгенерируйте файл .env со случайными секретами

Эта команда создаёт .env рядом с docker-compose.yml и заполняет все пароли и ключ случайными значениями. Ничего вручную править не нужно:

sudo tee .env > /dev/null <<ENVEOF
# PostgreSQL
POSTGRES_DB=netbox
POSTGRES_USER=netbox
POSTGRES_PASSWORD=$(openssl rand -hex 16)
# Valkey (Redis)
REDIS_PASSWORD=$(openssl rand -hex 16)
# NetBox
SECRET_KEY=$(openssl rand -hex 32)
SUPERUSER_PASSWORD_NETBOX=$(openssl rand -hex 12)
ENVEOF
⁠4. Запустите стек
sudo docker compose up -d

Первый запуск идёт 2–3 минуты: NetBox применяет все миграции базы и строит поисковый индекс. Команда up -d будет «висеть» всё это время и завершится сама, когда netbox станет healthy. Это нормально — дайте ей доработать.

⁠5. Узнайте пароль администратора и войдите

Логин администратора — admin, пароль был сгенерирован в шаге 3. Посмотреть его:

sudo grep SUPERUSER_PASSWORD_NETBOX .env

Откройте в браузере http://<адрес-сервера>:8000 и войдите под admin с этим паролем.

Проверить статус сервисов в любой момент:

sudo docker compose ps

⁠Управление

sudo docker compose stop        # остановить (данные сохраняются)
sudo docker compose start       # запустить снова
sudo docker compose logs -f     # смотреть логи всех сервисов
sudo docker compose down        # остановить и удалить контейнеры (тома остаются)
sudo docker compose down -v      # удалить всё вместе с данными

⁠Дополнительные настройки (опционально)

Для запуска ничего из этого не нужно — NetBox использует значения по умолчанию. Но при необходимости любые переменные NetBox можно добавить в блок environment сервиса netbox. Например:

    environment:
      # ...существующие переменные...
      GRANIAN_WORKERS: "4"            # число воркеров веб-сервера
      EMAIL_SERVER: smtp.example.com  # настройки почты
      EMAIL_PORT: "587"
      EMAIL_USE_TLS: "true"

Замечание: при первом запуске в логах есть предупреждение API_TOKEN_PEPPERS is not defined — это не ошибка, оно лишь означает, что API-токены v2 отключены. Чтобы их включить и убрать предупреждение, добавьте переменную API_TOKEN_PEPPER_1 со случайным значением.

⁠Для production

Конфигурация рассчитана на быстрый старт. Для боевого окружения:

  • замените ALLOWED_HOSTS: "*" на ваш реальный домен;
  • разместите NetBox за reverse-proxy (nginx/Traefik) с HTTPS;
  • храните .env вне системы контроля версий и регулярно ротируйте секреты.

Tag summary

Content type

Image

Digest

sha256:22a809937…

Size

244.9 MB

Last updated

4 months ago

docker pull ralexan33/netbox