Docker Netbox - Hướng dẫn các bước cài đặt chi tiết nhất

Hướng dẫn cài đặt Docker Netbox chi tiết, từ cấu hình ban đầu đến triển khai hoàn thiện, giúp quá trình quản lý mạng của bạn trở nên hiệu quả và dễ dàng.

Netbox là một công cụ mã nguồn mở được thiết kế để quản lý hạ tầng mạng, bao gồm thông tin về thiết bị, IP và các kết nối mạng. Việc triển khai Netbox với Docker mang lại sự linh hoạt và đơn giản trong quá trình cài đặt, quản lý. Bài viết này sẽ hướng dẫn chi tiết từng bước cài đặt Docker Netbox, giúp bạn dễ dàng thiết lập môi trường quản lý mạng chuyên nghiệp và hiệu quả.

Cài đặt Docker Netbox

1. Yêu cầu trước khi cài đặt Docker Netbox

Để tiếp cận và cài đặt được Netbox bằng docker thì cần phải có:

  • Docker CE (Trong đây đã bao gồm đầy đủ các thành phần cơ bản của docker như docker compose, ...)
  • Để cài đặt Netbox sẽ cần đủ 4 image:
    • docker.io/netboxcommunity/netbox:${VERSION-v4.0-2.9.1} : Dùng cho 3 service netbox, netbox-worker, netbox-housekeeping.
    • docker.io/postgres:16-alpine: Dùng cho service postgres (sql).
    • docker.io/redis:7-alpine: Dùng cho 2 service redis và redis-cache.
  • Tương tự ta cũng cần 6 volume để lưu trữ thông tin cho đầy đủ các container này:
    • netbox-docker_netbox-media-files: quản lý, như hình ảnh, tài liệu, hoặc bất kỳ tệp đính kèm nào khác được người dùng tải lên trong giao diện NetBox.
    • netbox-docker_netbox-postgres-data : Lưu trữ dữ liệu cơ sở dữ liệu PostgreSQL của NetBox.
    • netbox-docker_netbox-redis-cache-data: Lưu trữ dữ liệu cache của Redis (được dùng như cache cho NetBox).
    • netbox-docker_netbox-redis-data :Lưu trữ dữ liệu Redis liên quan đến hàng đợi công việc (queues) và các thông tin khác.
    • netbox-docker_netbox-reports-files: Lưu trữ các báo cáo hoặc scripts do người dùng tạo ra trong NetBox.
    • netbox-docker_netbox-scripts-files: Lưu trữ các script tùy chỉnh được sử dụng trong NetBox.
  • Network: Docker tự tạo ra 1 network bridge của mình để chứa 6 container
Thông tin chi tiết network của các container

2. Thực hiện cài đặt Docker Netbox

Tất cả những file cấu hình hay các biến môi trường hay thông tin các image cần thiết sẽ được tìm thấy ở đường link

di chuyển đến thư mục /opt

cd /opt

Tải xuống các thông tin hỗ trợ cài đặt docker netbox

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

Tạo file compose để cài đặt netbox

cd /opt/netbox-docker/

vi docker-compose.override.yml

services:

netbox:

    ports:

    - 8000:8080

Chạy docker compose

docker compose up

Quá trình triển khai docker netbox

Khi chạy có thể gặp lỗi này nhưng ta chỉ cần chạy lại docker compose up là được (đợi 1 lúc). Lỗi này là do thời gian chờ đợi heathcheck trong file yaml thấp hơn so với thời gian thực tế

Gracefully stopping... (press Ctrl+C again to force)

dependency failed to start: container netbox-docker-netbox-1 is unhealthy

Lỗi gặp phải trong quá trình triển khai 

Tiếp theo ta cần tạo superuser

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

Quá trình tạo super user 

Kiểm tra bằng cách sử dụng trình duyệt web http://<ip_address:8000

Kết quả triển khai netbox thành công

3. Giải thích chi tiết

Hình ảnh các file có khi ta git clone netbox

Trên đây là hình ảnh các file có trong netbox docker. Chúng ta sẽ cần để ý đến 3 file cần thiết trước

  • docker-compose.yml: Đây là file docker compose chính dùng để khai báo các image, service, volume, network để build các container
  • docker-compose.override.yml: Đây là file bổ xung cho file docker-compose.yml, thông thường dùng để khai báo port giữa container netbox và host
  • Thư mục ENV: Chứa các biến môi trường cho quá trình build lên container như user, password, mail, ...

Giải thích chi tiết file docker-compose.yml

# Định nghĩa các dịch vụ cần thiết cho hệ thống NetBox

services:

  # Dịch vụ chính của NetBox

  netbox: &netbox  # Anchor 'netbox' để tái sử dụng trong các dịch vụ khác

    image: docker.io/netboxcommunity/netbox:${VERSION-v4.0-2.9.1}  # Sử dụng image NetBox từ Docker Hub, với phiên bản được chỉ định từ biến môi trường VERSION

    depends_on:  # Các dịch vụ mà NetBox phụ thuộc

    - postgres  # Phụ thuộc vào dịch vụ Postgres (Cơ sở dữ liệu)

    - redis  # Phụ thuộc vào dịch vụ Redis (Caching)

    - redis-cache  # Phụ thuộc vào dịch vụ Redis Cache

    env_file: env/netbox.env  # Tệp môi trường chứa các biến cấu hình cho NetBox

    user: 'unit:root'  # Chạy container với user 'unit' và group 'root'

    healthcheck:  # Kiểm tra sức khỏe của dịch vụ NetBox

      start_period: 60s  # Thời gian chờ trước khi bắt đầu kiểm tra sức khỏe

      timeout: 3s  # Thời gian tối đa cho mỗi lần kiểm tra

      interval: 15s  # Khoảng thời gian giữa các lần kiểm tra

      test: "curl -f http://localhost:8080/login/ || exit 1"  # Kiểm tra bằng cách gửi yêu cầu HTTP tới endpoint /login/

    volumes:  # Gắn kết các thư mục và volume vào container

    - ./configuration:/etc/netbox/config:z,ro  # mount blind Thư mục cấu hình chỉ đọc từ máy chủ host

    - netbox-media-files:/opt/netbox/netbox/media:rw  # Volume lưu trữ các tệp media

    - netbox-reports-files:/opt/netbox/netbox/reports:rw  # Volume lưu trữ các báo cáo

    - netbox-scripts-files:/opt/netbox/netbox/scripts:rw  # Volume lưu trữ các scripts

  # Dịch vụ NetBox worker

  netbox-worker:

    <<: *netbox  # Kế thừa toàn bộ cấu hình từ anchor 'netbox'

    depends_on:

      netbox:

        condition: service_healthy  # Chỉ khởi động khi dịch vụ NetBox khỏe mạnh

    command:

    - /opt/netbox/venv/bin/python  # Chạy lệnh Python trong môi trường ảo

    - /opt/netbox/netbox/manage.py  # Sử dụng manage.py của NetBox

    - rqworker  # Chạy worker để xử lý các công việc nền

    healthcheck:  # Kiểm tra sức khỏe của worker

      start_period: 20s  # Thời gian chờ trước khi bắt đầu kiểm tra sức khỏe

      timeout: 3s  # Thời gian tối đa cho mỗi lần kiểm tra

      interval: 15s  # Khoảng thời gian giữa các lần kiểm tra

      test: "ps -aux | grep -v grep | grep -q rqworker || exit 1"  # Kiểm tra tiến trình rqworker có đang chạy không

  # Dịch vụ NetBox housekeeping

  netbox-housekeeping:

    <<: *netbox  # Kế thừa toàn bộ cấu hình từ anchor 'netbox'

    depends_on:

      netbox:

        condition: service_healthy  # Chỉ khởi động khi dịch vụ NetBox khỏe mạnh

    command:

    - /opt/netbox/housekeeping.sh  # Chạy script housekeeping để bảo trì hệ thống

    healthcheck:  # Kiểm tra sức khỏe của housekeeping

      start_period: 20s  # Thời gian chờ trước khi bắt đầu kiểm tra sức khỏe

      timeout: 3s  # Thời gian tối đa cho mỗi lần kiểm tra

      interval: 15s  # Khoảng thời gian giữa các lần kiểm tra

      test: "ps -aux | grep -v grep | grep -q housekeeping || exit 1"  # Kiểm tra tiến trình housekeeping có đang chạy không

  # Dịch vụ cơ sở dữ liệu PostgreSQL

  postgres:

    image: docker.io/postgres:16-alpine  # Sử dụng image PostgreSQL từ Docker Hub

    env_file: env/postgres.env  # Tệp môi trường chứa các biến cấu hình cho PostgreSQL

    volumes:

    - netbox-postgres-data:/var/lib/postgresql/data  # Volume lưu trữ dữ liệu của PostgreSQL

  # Dịch vụ Redis cho caching

  redis:

    image: docker.io/redis:7-alpine  # Sử dụng image Redis từ Docker Hub

    command:

    - sh

    - -c  # Chạy lệnh Redis Server với cấu hình từ biến môi trường

    - redis-server --appendonly yes --requirepass $$REDIS_PASSWORD  # Kích hoạt append-only mode và yêu cầu mật khẩu

    env_file: env/redis.env  # Tệp môi trường chứa các biến cấu hình cho Redis

    volumes:

    - netbox-redis-data:/data  # Volume lưu trữ dữ liệu của Redis

  # Dịch vụ Redis cache cho NetBox

  redis-cache:

    image: docker.io/redis:7-alpine  # Sử dụng image Redis từ Docker Hub

    command:

    - sh

    - -c  # Chạy lệnh Redis Server với cấu hình từ biến môi trường

    - redis-server --requirepass $$REDIS_PASSWORD  # Yêu cầu mật khẩu khi truy cập Redis

    env_file: env/redis-cache.env  # Tệp môi trường chứa các biến cấu hình cho Redis Cache

    volumes:

    - netbox-redis-cache-data:/data  # Volume lưu trữ dữ liệu cache của Redis

# Định nghĩa các volumes cho các dịch vụ

volumes:

  netbox-media-files:

    driver: local  # Sử dụng driver local để tạo volume lưu trữ tệp media của NetBox

  netbox-postgres-data:

    driver: local  # Sử dụng driver local để tạo volume lưu trữ dữ liệu của PostgreSQL

  netbox-redis-cache-data:

    driver: local  # Sử dụng driver local để tạo volume lưu trữ dữ liệu cache của Redis

  netbox-redis-data:

    driver: local  # Sử dụng driver local để tạo volume lưu trữ dữ liệu của Redis

  netbox-reports-files:

    driver: local  # Sử dụng driver local để tạo volume lưu trữ các báo cáo của NetBox

  netbox-scripts-files:

    driver: local  # Sử dụng driver local để tạo volume lưu trữ các scripts của NetBox

Tổng kết

Bài viết đã hướng dẫn các bạn cài đặt netbox một cách nhanh chóng và đơn giản nhất. Các file compose và cấu hình đã được chính nhà phát triển netbox cấu hình sãn chúng ta chỉ cần chỉ định port sử dụng là được. Việc sử dụng các biến có sẵn như thể không cần đòi hỏi chúng ta có quá nhiều hiểu biết về Docker vẫn có thể làm được. Nhưng để có thể tối ưu và phù hợp yêu cầu của từng môi trường, từng bài toán thì ta cần phải tùy chỉnh là cấu hình và các biến môi trường trở nên phù hợp. Nếu còn những vướng mắc cần giải đáp, hãy liên hệ với chúng tôi để được hỗ trợ nhanh nhất nhé. Chúc bạn thành công!

Tác giả:
author avatar
Mình là Huy, hiện mình đang là kỹ sư hệ thống tại SunCloud. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn về mạng, hệ thống, điện toán mây và an ninh bảo mật. Mình đã triển khai và vận hành rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số chứng chỉ quốc tế như CCNP, LPI, VCP, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.

Tin tức nổi bật
Tin tức khác