NetBoxの導入

いよいよ本命のNetBoxの導入を行います。

NetBox v3.2には、Python 3.8、3.9、または3.10が必要です。

なんて、説明がありますが、Pythonは3.8を導入済みです。
導入に必要なパッケージ群を導入します。


$ sudo yum install -y gcc libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config

改めてPythonのバージョンの確認をしておきます。


$ python3 -V
Python 3.8.11

さて、いよいよnetboxの導入ですが、今回はアーカイブされたものを利用します。
GitHubから最新の安定したリリースのtarballをダウンロードして、目的のパスに抽出します。
今回は、NetBoxのルートとして/ opt/netboxを使用します。


$ wget https://github.com/netbox-community/netbox/archive/v3.2.0.tar.gz
$ sudo tar -xzf v3.2.0.tar.gz -C /opt
$ sudo ln -s /opt/netbox-3.2.0/ /opt/netbox

netboxユーザの作成

netboxという名前のシステムユーザーアカウントを作成します。
あとで、このアカウントで実行するようにWSGIおよびHTTPサービスを構成します。
また、このユーザーにメディアディレクトリの所有権を割り当てます。
これにより、NetBoxがアップロードされたファイルを確実に保存できるようになります。


$ sudo groupadd --system netbox
$ sudo adduser --system -g netbox netbox
$ sudo chown --recursive netbox /opt/netbox/netbox/media/

コンフィグレーション

先ほどインストールしたNetBoxのディレクトリに移動して、configuration_example.pyをコピーして、configuration.pyというファイルを作成します。
このファイルには、すべてのローカル構成パラメーターが含まれます。


$ cd /opt/netbox/netbox/netbox/
$ sudo cp configuration_example.py configuration.py

好みのエディターでconfiguration.pyを開き、NetBoxの設定を行います。
NetBoxには多くの構成パラメーターがありますが、新規インストールに必要なのは次の4つだけです。

  • ALLOWED_HOSTS
  • DATABASE
  • REDIS
  • SECRET_KEY

$ sudo vi configuration.py

ALLOWED_HOSTS

このサーバーに到達できる有効なホスト名とIPアドレスのリストを指定します。
少なくとも1つの名前またはIPアドレスを指定する必要があります。
NetBoxインストールはテスト的に行っていますので、ワイルドカード(アスタリスク)に設定して、すべてのホスト値を許可しました。


ALLOWED_HOSTS = ['*']

DATABASE

このパラメーターは、データベース構成の詳細を設定します。
PostgreSQLを設定したときに使用したユーザー名とパスワードを定義する必要があります。
サービスがリモートホストで実行されている場合は、それに応じてHOSTパラメーターとPORTパラメーターを設定する必要があります。


DATABASE = {
    'NAME': 'netbox',               # Database name
    'USER': 'netbox',               # PostgreSQL username
    'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
    'HOST': 'localhost',            # Database server
    'PORT': '',                     # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,            # Max database connection age (seconds)
}

REDIS

インストールしたままで変更していません。

SECRET_KEY

このパラメーターには、ハッシュおよび関連する暗号化機能のソルトとして使用されるランダムに生成されたキーを割り当てる必要があります。
(ただし、秘密データの暗号化に直接使用されることはありません。)
このキーはこのインストールに固有である必要があり、50文字以上にすることをお勧めします。
ローカルシステムの外部で共有しないでください。


SECRET_KEY = '9#25X94mBgmEY#byfMQ1aQTMIG6!4Xc@uXTVjjUtDO6qt+o$Cp'

適切なキーの生成を支援するために、generate_secret_key.pyという名前の単純なPythonスクリプトが親ディレクトリに提供されているということで利用しました。


$ python3 ../generate_secret_key.py
9#25X94mBgmEY#byfMQ1aQTMIG6!4Xc@uXTVjjUtDO6qt+o$Cp

おまけでタイムゾーン

まぁ日本で運用するので


TIME_ZONE = 'Asia/Tokyo'

アップグレードスクリプトの実行

NetBoxの設定を終えたら、実際のインストールに進む準備ができています。っておい、これから本番か?
パッケージ化されたアップグレードスクリプト(upgrade.sh)を実行します。

NetBox v3.2以降のリリースでは、Python3.8以降が必要なので、PythonのインストールパスをPYTHONという名前の環境変数として渡す必要があります。


$ which python3
/opt/rh/rh-python38/root/usr/bin/python3

ようやく、これでアップグレードの実行です。


$ sudo PYTHON=/opt/rh/rh-python38/root/usr/bin/python3 /opt/netbox/upgrade.sh

スーパーユーザーの作成

NetBoxには、事前に定義されたユーザーアカウントは付属していないようです。
NetBoxにログインできるようにするには、スーパーユーザー(管理者アカウント)を作成する必要があります。
まず、アップグレードスクリプトによって作成されたPython仮想環境に入ります。


$ sudo -s
# source /opt/netbox/venv/bin/activate

仮想環境がアクティブ化されると、コンソールプロンプトの前に文字列(venv)が追加されています。

次に、createsuperuser という Djangoの管理コマンド(manage.py経由)を使用してスーパーユーザーアカウントを作成します。
ユーザーのメールアドレスを指定する必要はありませんが、非常に強力なパスワードを使用してください。


# cd /opt/netbox/netbox
# python3 manage.py createsuperuser
Username (leave blank to use 'root'):
Email address:
Password:
Password (again):
Superuser created successfully.

動作確認

ようやく、テスト用にNetBoxの開発サーバーを実行できるようになりました。
CentOSの場合は、デフォルトでファイアウォールが有効なので、ポートを開けて確認します。


# firewall-cmd --zone=public --add-port=8000/tcp

開発インスタンスを開始することで確認します。


# python3 manage.py runserver 0.0.0.0:8000 --insecure
Performing system checks...

System check identified no issues (0 silenced).
April 07, 2022 - 15:44:45
Django version 4.0.3, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

無事にアクセスできることが出来ました。

netbox_8000

CTRL+Cで終了します。