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?

ubuntu 24.04 にnetboxを構築した際のメモ

Posted at

はじめに

proxmoxを利用してVMを立て始めて早数年。そろそろIPアドレスの管理をスプレッドシートからちょっとカッコイイなにかに変えてみたいと思い始めました。
netboxというOSSを発見したので、導入した際のメモをここに残しておきます。
公式のインストールガイドをなぞっていけば問題なくインストールできると思います。

記事を最後まで書いた後、qiitaに同様の記事がないか再確認したところ、先駆者様がいらっしゃいました。
記事のレベルもこちらのほうが高いと思います。

せっかく書いたのでこの記事はこのまま公開します。
今後は記事を書き始める前に確認します・・・。

環境

構築時の環境を下記に記します。
個人的な好みでdiskを3つ用意しています。
万が一アプリケーションやDBがディスクを使い切ったときに、OSの起動やSSHでの接続ができるようにするためです。
後述しますが、お家ラボ程度あればdisk2,3は2Gでも十分でした。

項目 内容
OS Ubuntu 24.04
ram 8G (もっと少なくても行けたと思います)
disk1 16G (bootなどに使用)
disk2 16G (/opt netboxのアプリケーション本体用)
disk3 32G (/var/lib postgresqlのデータ用
その他 proxmos上にVMを構築
qemu-gaを導入しています

アプリケーションの情報

項目 内容
netbox NetBox Community v4.1.6
python Python 3.12.3
postgresql psql (PostgreSQL) 16.4
Redis v=7.0.15
nginx nginx/1.24.0

構築手順

0. 初期設定

いつものおまじない

sudo apt update && sudo apt upgrade -y
sudo apt install qemu-guest-agent 

1. PostgreSQLのインストール

PosetgreSQL 12以降が必要になります。
MySQLやその他のDBはサポート外のようです。

インストールとDBのバージョンの表示。

sudo apt install -y postgresql && psql -V

最終行に下記のような表示が出ればOK
バージョンが12以上であることを確認すること。

psql (PostgreSQL) 16.4 (Ubuntu 16.4-0ubuntu0.24.04.2)

このままDBにnetbox用のユーザーとテーブルを作成します。
下記のコマンドでpostgresのシェルに入ります。

 sudo -u postgres psql

下記のコマンドを実行し、最後に\q で抜けます。
DB用のパスワードは各自で決定、書き換えてください。

CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'DB用のパスワードを記載';
ALTER DATABASE netbox OWNER TO netbox;
\connect netbox;
GRANT CREATE ON SCHEMA public TO netbox;
\q

最後にDBの状態を確認します。
下記のコマンドでpostgresのシェルに入ります。
パスワードを求められますので、先ほど設定したパスワードを入力してください。

psql --username netbox --password --host localhost netbox

問題がなければ下記のように表示されます。

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.

netbox=>

このままインフォメーションを表示します。

 \conninfo

You are connected to database "netbox" as user "netbox" on host "localhost" (address "127.0.0.1") at port "5432".
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)

確認ができたら\q で抜けてください。

02.Redisのインストール

Redis 4.0以降が必要になります。

インストールとバージョンの表示

sudo apt install -y redis-serve && redis-server -v

最終行にバージョンが表示されればOK

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

最後にサービスの状態を確認します。

 redis-cli ping

PONG

03. NetBoxのインストール

NetBoxのダウンロード

リリースアーカイブから取得する方法とgitでcloneする方法の2つが用意されています。
今回はgitを採用します。

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
sudo apt install -y git

pythonのバージョンが3.10以上であることを確認しておきましょう。

python3 -V

Python 3.12.3

netbox用のディレクトリを作成し、そこにcloneをダウンロードします。

sudo mkdir -p /opt/netbox/ && cd /opt/netbox/ && sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git .

NetBoxではmasterブランチのdepth=1のところに最新の安定版のリリースがあるとのこと。

ユーザーの作成

システムユーザーを作成します。ここで作成したユーザーがWSGIとHTTPのサービスを管理します。

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/

コンフィグの設定

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

作成したconfiguration.pyを編集します。
公式によると最低限、下記の4つを設定する必要があるみたいです。

  • ALLOWED_HOSTS
  • DATABASE
  • REDIS
  • SECRET_KEY

ALLOWED_HOSTS

ALLOWED_HOSTSは少なくとも1つのIPアドレス、もしくはFQDNが必要です。
これはnetboxのサーバー本体のIPアドレスかFQDNを指定する必要があります。
設定漏れを回避するためか、exampleからコピーしただけでは空欄となっています。
* によるワイルドカードも指定可能です。
お家サーバーや検証環境レベルなら*でもいいのかもしれません。
その場合は以下のような表記になります。

ALLOWED_HOSTS = ['*']

DATABASE

DATABASEUSERPASSWORDが空欄になっています。
01で作成したDB用のユーザー名とパスワードを記載してください。

REDIS

REDISはデフォルトのままで大丈夫だと思います。

SECRET_KEY

SECRET_KEYはハッシュやソルトに使用する50文字以上のユニークな値が必要になります。
generate_secret_key.pyが用意されているため、特にこだわりがない場合はこちらを使うのがお手軽だと思います。

python3 ../generate_secret_key.py

生成された値をconfiguration.pySECRET_KEYに記載します。

その他

他にも設定ができますが、詳しくは公式のインストールガイドを参照してください。
リモートのファイルストレージが使えたりするみたいです。

インストール

configuration.pyの設定が終わったらインストールに進みます。
upgrade.shが用意されており、実行することでインストールが開始されます。

sudo /opt/netbox/upgrade.sh

(前略)
Completed.
Removing expired user sessions (python3 netbox/manage.py clearsessions)...
Upgrade complete! Don't forget to restart the NetBox services:
> sudo systemctl restart netbox netbox-rq

アプリケーション用のユーザーの作成

upgrade.shは必要なパッケージやDBのマイグレーションのみを実行しており、アプリケーションの管理ユーザーは作成されていません。ログインをするためにも管理ユーザーの作成が必要になります。

下記のコマンドでPythonのvirtual environmentに入ります。

source /opt/netbox/venv/bin/activate

プロンプトの前に(venv)が付いていることを確認して、下記のコマンドを実行します。
実行すると管理ユーザーのユーザー名やパスワードの入力を求められます。

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

Username:
Email address:
Password:
Password (again):
Superuser created successfully.

この後もPythonのvirtual environmentは維持したまま設定をしていきます。

netbox-housekeeping.sh の登録

古くなったセッションなどをクリーニングするためのシェルが用意されています。
手動で実行することもできますが、公式のインストールガイドではcronによるデイリーベースのシェルの実行を推奨しています。

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

お試しでアプリケーションを起動

下記のコマンドでアプリケーションを実行します。

python3 manage.py runserver 0.0.0.0:8000 --insecure

Performing system checks...

System check identified no issues (0 silenced).
November 02, 2024 - 14:00:42
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.

起動が確認できたら、ブラウザからIPアドレスかFQDNにポート8000を指定してアクセスしてみます。
ログイン画面で管理ユーザーのユーザー名とパスワードを指定してログインができるか確認します。

http://127.0.0.1:8000 など

  • httpであることに注意 (httpsではない)

アクセスできない場合、サーバー側のファイアーウォールを確認してみてください。

ログインが確認できたらコンソールに戻り、ctrl+cでアプリケーションを停止します。

Gunicornの設定

WSGIとして公式のインストールガイドではGunicornとuWSGIの2つが候補にあげられています。
今回はGunicornを採用しました。

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

下記のコマンドで起動状態を確認します。

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-11-02 14:17:57 UTC; 6s ago
Docs: https://docs.netbox.dev/
Main PID: 5075 (gunicorn)
Tasks: 6 (limit: 9444)
Memory: 525.7M (peak: 526.2M)
CPU: 4.139s
CGroup: /system.slice/netbox.service
├─5075 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netb>
├─5077 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netb>
├─5078 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netb>
├─5079 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netb>
├─5080 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netb>
└─5081 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netb>

Nov 02 14:17:57 net-box systemd[1]: Started netbox.service - NetBox WSGI Service.
Nov 02 14:17:57 net-box gunicorn[5075]: [2024-11-02 14:17:57 +0000] [5075] [INFO] Starting gunicorn 23.0.0

HTTPサーバーの設定

HTTPサーバーもnginxとapacheの2つの選択肢が用意されています。
今回はnginxを採用します。

証明書

自宅のVM用のIPAMのため、証明書は自己証明書とします。
ちゃんとした(?)証明書が必要な方は公式のインストールガイドを参照してください。
let's encryptなどが候補にあげられています。
https://netbox.readthedocs.io/en/stable/installation/5-http-server/

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

nginxの設定

sudo apt install -y nginx

事前に用意されたnginx用のコンフィグファイル/opt/netbox/contrib/nginx.confを編集します。
netbox.example.comconfiguration.pyで設定したALLOWED_HOSTSと同じ値に書き換えてください。
その後、nginxのディレクトリにコピーします。

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

またnginxにあるデフォルトのsite-enabledのファイルを削除し、netbox用のファイルをリンクで配置します。

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

また、nginxの起動前にこちらのファイルも書き換えが必要になります。
server_nameの値をconfiguration.pyで設定したALLOWED_HOSTSと同じ値に書き換えてください。

ALLOWED_HOSTS'*'で設定している場合、下記の設定にしないとnginxがエラーで立ち上がりません。

server_name '_';

最後にnginxを再起動し、ブラウザからアクセスできることを確認してください。

sudo systemctl restart nginx

https://127.0.0.1 など

  • httpsであることに注意

おわりに

公式ドキュメントがしっかりしているため、特に詰まることなく構築することができました。
構築の難易度はかなり低めなのかなと思います。
(外部DBやLDAPなど、今回は使わなかったオプションを使うとまた違うとは思いますが・・・)

いずれお家DNSで使っているBINDのZONEファイルへの連携ができればいいなと思いつつ、まずはこのあたりで満足しようと思います。

また、初期構築完了時のディスクの使用率は以下のとおりでした。
disk 2,3は2Gくらいでも十分だったかもしれません。

Filesystem Size Used Avail Use% Mounted on
tmpfs 795M 1.1M 794M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 9.8G 3.2G 6.1G 35% /
tmpfs 3.9G 1.1M 3.9G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sdb 16G 467M 15G 4% /opt
/dev/sdc 32G 267M 30G 1% /var/lib
/dev/sda2 1.7G 95M 1.5G 6% /boot
tmpfs 795M 12K 795M 1% /run/user/1000
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?