0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetBoxを使ってみよう 2回: 構築をしてみる

Last updated at Posted at 2024-09-24

概要

NetBoxを使ってみようの第2回で、今回は構築を行っていきます。
ドキュメントにてインストール手順はしっかり記載されているため、基本はそちらをもとにした内容となります。

全記事

構築方法

NetBoxの構築方法として、マシンに必要なソフトウェアを展開していくパターンと、コンテナを用いるパターンの2種類があります。
今回はマシンにソフトウェアを展開していく方向で進めます。

コンテナ版に関しては、コミュニティのgithubで展開方法が案内されているため、こちらをご参照ください。
https://github.com/netbox-community/netbox-docker

展開するもの

NetBoxはHTTP ServerとApplication Server、DB、Cashサーバーを用意する必要があります。
今回はドキュメント上にも案内がある以下図の構成になるように構築を進めていきます。

image.png

実際に用意するものは以下となり、それぞれ上から順番に進めていきます。

項目 備考
Ubuntu Server v24.04, 2CPU, Mem 8GB, Disc 200GB
※リソース要件は特段明記無し
PosrgreSQL v12.0以上が必要
Redis v4.0以上が必要
Python v3.10以上が必要
NetBoxコンポーネント -
Gunicorn インストールはNetBoxと一緒にされる
Nginx 証明書が必要 (今回は自己証明書で進める)

構築

Ubuntu Serverの準備

仮想マシンとして以下リソースでUbuntu Server 24.04を今回は展開しています。
なお、私が見渡した限りですが、リソース要件等は厳密には書かれていなかったため、想定で構成しています。

image.png

Ubuntu自体はセットアップを進めておき、このあとの操作用にSSHで操作できるようにしておきます。
また、IPアドレス設定後はDNS Serverへ登録を行っておきます。
私の構成では以下紐づけとしてこのあとは進めていきます。

  • IPアドレス: 192.168.0.113
  • DNS: ubuntu-netbox.stjam.home

PostgreSQLのセットアップ

NetBoxのデータ格納用にPostgreSQLのセットアップを行います。

以下コマンドでインストールします。

sudo apt install -y postgresql

インストール後は以下コマンドでバージョンが12.0以上であることを確認しておきます。

psql -V
    
## 出力
psql (PostgreSQL) 16.4 (Ubuntu 16.4-0ubuntu0.24.04.2)

基本的にはそのままインストールすれば満たせるとは思いますが、バージョンを指定する場合は”apt-cache”でリポジトリに登録されているバージョンを確認でき、指定してインストールすることも可能です。

例)インストール可能なバージョン確認コマンド

sudo apt-cache show postgresql | grep Version
    
## 出力
Version: 16+257build1.1
Version: 16+257build1

例)バージョン指定でインストールするコマンド

sudo apt install -y postgresql=16+257build1.1

インストール完了後NetBox用にデータベースの作成と認証用ユーザーの作成や権限割り当てを行っておきます。

PostgreSQLのシェルを起動

sudo -u postgres psql

データベースとユーザー作成と所有者変更

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD '<任意のパスワード>';
ALTER DATABASE netbox OWNER TO netbox;

作成したnetboxのDBへ接続

\connect netbox;

作成権限割り当て

GRANT CREATE ON SCHEMA public TO netbox;

ここまで完了したら、”CTRL + D”でシェルを抜けておきます。
一応、作成したユーザーでログインを試す場合は以下コマンドで実施できます。

psql --username netbox --password --host localhost netbox
    
Password: 
    
## 出力
psql (16.4 (Ubuntu 16.4-0ubuntu0.24.04.2))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

Redisのセットアップ

キャッシュとキューイング用にRedisのセットアップを行います。

以下コマンドでインストールします。

sudo apt install -y redis-server

インストール後は以下コマンドでバージョンが4.0以上であることを確認しておきます。

redis-server -v

## 出力
Redis server v=7.0.15 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=d81b8ff71cfb150e

以下コマンドで”PONG”と出力され、無事に動作することを確認しておきます。

redis-cli ping
    
## 出力
PONG

Pythonのセットアップ

NetBoxはPythonで動作するアプリケーションのため、Pythonのインストールを行います。

いくつか必要な関連ソフトウェアがあるため、以下コマンドでPythonと合わせてインストールを行います。

sudo apt install -y python3 python3-pip python3-venv python3-dev \
build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev

インストール後は以下コマンドでPythonのバージョンが3.10以上であることを確認しておきます。

python3 -V
    
## 出力
Python 3.12.3

Netboxのセットアップ

NetBoxのセットアップを行っていきます。

初めにNetBoxのコンポーネントをgithubから取得を行う必要があり、方法として今回はwgetで進めます。
また、バージョンに関しては今回は記事執筆時点で最新のv4.1.1を用います。

リリース情報は以下を参考

以下コマンドでコンポーネントの取得と解凍、シンボリックリンクの紐づけを行います。
シンボリックリンクにしておくことで、新しいバージョンに移行する際にシンボリックリンクの向き先を変える形で対応できます。

sudo wget https://github.com/netbox-community/netbox/archive/refs/tags/v4.1.1.tar.gz
sudo tar -xzf v4.1.1.tar.gz -C /opt
sudo ln -s /opt/netbox-4.1.1/ /opt/netbox

NetBox用のシステムユーザーを作成し、NetBoxのコンポーネントの所有権を割り当てておきます。

sudo adduser --system --group netbox
sudo chown --recursive netbox /opt/netbox/netbox/media/
sudo chown --recursive netbox /opt/netbox/netbox/reports/
sudo chown --recursive netbox /opt/netbox/netbox/scripts/

続いて設定ファイルの準備を行います。
設定ファイルに関してはサンプルがあらかじめ準備されているため、コピーして編集していきます。
なお、今回は必要最低限の設定で進めていきます。
他のパラメータに関してはドキュメントにて詳細があるため、必要に応じて確認して触ってみてください。
https://netboxlabs.com/docs/netbox/en/stable/configuration/required-parameters/

sudo cp /opt/netbox/netbox/netbox/configuration_example.py \
/opt/netbox/netbox/netbox/configuration.py
    
sudo vi /opt/netbox/netbox/netbox/configuration.py

まずNetBoxのアプリケーションへ接続する際に、HTTPリクエストの許可するホスト名とIPアドレスを指定しておきます。
これは偽のホストパラメータを防ぐ(クロスサイトスクリプティングとかの対策)目的として用いられます。
一応アスタリスクで全許可で進めることも可能ですが、今回はすでにFQDNとIPアドレスが決まっているため入力しておきます。

configuration.py
ALLOWED_HOSTS = ['ubuntu-netbox.stjam.home', '192.168.0.113']

続いてDBの情報を入力します。
“USER”と”PASSWORD”以外はサンプルにて入力されているため、そこだけ入力しておきます。

configuration.py
DATABASE = {
    'ENGINE': 'django.db.backends.postgresql',  # Database engine
    'NAME': 'netbox',         # Database name
    'USER': 'netbox',               # PostgreSQL username
    'PASSWORD': '{設定したpostgresのパスワード}',           # PostgreSQL password
    'HOST': 'localhost',      # Database server
    'PORT': '',               # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,      # Max database connection age
}

続いて”SERCRET KEY”を入力しておきます。
このパラメータで指定したものはNetBoxでのハッシュ化や暗号化の機能で用いられます。

configuration.py
SECRET_KEY = '{ランダムに生成したキー}'

入力値に悩む場合は、ランダムな文字列の生成を行うスクリプトがNetBoxのコンポーネントにあるため、このスクリプトで生成されたものを入れておいても大丈夫です。

python3 /opt/netbox/netbox/generate_secret_key.py 

最後にTime Zoneを設定します。
デフォルトはUTCのため、必要に応じて変更を行ってください。
今回はTokyoにしておきます。

configuration.py
TIME_ZONE = 'Asia/Tokyo'

設定ファイルの準備が完了したため、インストールを行っていきます。
以下コマンドの実行で必要なモジュールのインストール (python仮想環境にpip) などの準備が行われます。

sudo /opt/netbox/upgrade.sh

インストール処理が完了したら、NetBoxに作成されたPythonの仮想環境に遷移します。

source /opt/netbox/venv/bin/activate

NetBoxにデフォルトではユーザーがいない状態のため、管理者を以下コマンドで作成していきます。
実行すると、ユーザー名やパスワードを聞かれるため入力しておきます。
※Emailは空白可能。ここで作成したユーザーでNetBoxに最初はログインする。

python3 /opt/netbox/netbox/manage.py createsuperuser

最後にHousekeepingをCronのタスクとして登録します。
これには古いセッションの削除等のクリーンアップ処理が含まれています。
以下コマンドでCrontの実行対象のディレクトリにシンボリックリンクとして登録を行っておきます。

sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping

ここまででとりあえずのNetBoxの実行は確認できる状態になったため、一度以下コマンドでアプリケーションを起動してみます。

python3 /opt/netbox/netbox/manage.py runserver 0.0.0.0:8000 --insecure
    
Performing system checks...
    
System check identified no issues (0 silenced).
September 21, 2024 - 15:37:54
Django version 5.0.9, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

起動後、FQDN (or IPアドレス):8000にアクセスするとログイン画面が表示されることが確認できます。
image.png

作成した管理ユーザーにてログインを実施して、問題なくアクセスが出来ていることを見ておきます。
確認が出来たら、”CTRL + C”でアプリケーションを終了しておきます。
image.png

gunicornのセットアップ

NetBoxはWSGIアプリケーションとして動作するため、WSGIサーバーとしてgunicornのインストールを行っていきます。
インストールといいつつ、実は先ほどのNetBoxのセットアップ時に環境にインストール自体はされているため、基本は設定ファイルを用いて、起動するように設定する形になります。

まず設定ファイルをサンプルからコピーします。
今回はサンプルそのままで利用可能でしたので、そのまま使っていきます。

sudo cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py

続いて、Ubuntuのsystemdで制御できるように、serviceコンポーネントをsystemd配下にコピーして、daemonの再起動とサービスの有効化を行います。

sudo cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now netbox netbox-rq

statusを確認して、Activeになっていれば問題なしです。

systemctl status netbox.service

## 出力
● netbox.service - NetBox WSGI Service
     Loaded: loaded (/etc/systemd/system/netbox.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-09-21 17:03:52 UTC; 6s ago
       Docs: https://docs.netbox.dev/
   Main PID: 9881 (gunicorn)
      Tasks: 6 (limit: 9444)
     Memory: 524.8M (peak: 525.0M)
        CPU: 4.167s
     CGroup: /system.slice/netbox.service
             ├─9881 /opt/netbox-4.1.1/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath >
             ├─9883 /opt/netbox-4.1.1/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath >
             ├─9884 /opt/netbox-4.1.1/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath >
             ├─9885 /opt/netbox-4.1.1/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath >
             ├─9886 /opt/netbox-4.1.1/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath >
             └─9887 /opt/netbox-4.1.1/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath >

Nginxセットアップ

最後にNginxのセットアップを行っていきます。

まず以下コマンドにてインストールします。

sudo apt install -y nginx

続いて、NetBoxのコンポーネントのnginxの設定ファイルをnginx側にコピーします。

sudo cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox

コピー後、server_nameだけ編集を行っておきます。

sudo vi /etc/nginx/sites-available/netbox
    
server_name ubuntu-netbox.stjam.home;

続いて、デフォルトではHTTPSでの接続が要求されるため、以下コマンドにて自己証明書を作成して配置しておきます。
証明書を格納するべき場所は一つ前のnginxの設定ファイルに記載があります。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/netbox.key \
-out /etc/ssl/certs/netbox.crt

nginxのデフォルトで用意されているシンボリックリンクを削除して、先ほど設定ファイルをおいたディレクトリのシンボリックリンクを作成しておきます。

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/netbox /etc/nginx/sites-enabled/netbox

最後にnginxを再起動して完了になります。

sudo systemctl restart nginx

起動後HTTPSで接続してログイン画面が表示されたら完了です。
※以下キャプチャは証明書を接続元PCのストアに登録していないため、保護されていない通信
image.png

まとめ

今回はNetBoxを構築してみました。ドキュメント通りに進めれば問題なく完了できるようになっており構築自体はしやすかったです。
次回から実際にNetBoxを使っての管理等を触っていきます。

次の記事はこちら

おまけ

NetBoxのアプリケーションにアクセスした際に日本語で表示がされる場合があると思います。
デフォルトではブラウザの設定に応じて自動で言語が選択される”AUTO”になっているためです。
日本語のままでも良いのですが、若干表現や表示が変な箇所やドキュメントと照らしわわせる際のことも考慮して英語を指定する方が良いかもという感想です。
※このあとの記事では英語UIベースで触れていきます

image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?