Help us understand the problem. What is going on with this article?

DCIMツール netboxをCentOS8にインストールする

Netboxってなに

DigitalOceanのネットワークエンジニアリングチームが作ったOSSのDCIM(Data Center Infrastructure Management)ツールです。

サイトのドキュメントは英語ですが以下からどうぞ
https://netbox.readthedocs.io/en/stable/

ドキュメントから抜粋して軽く日本語で書くとこんな感じです。

項目 どんなことができるのか
IP address management (IPAM) IPアドレス、サブネット、VLAN、VRF管理
Equiqment racks 組織、グループ、サイト単位でのラック管理
Devices デバイスの種類やそれらに導入されたもの
Connections ネットワーク、コンソール、電源などの接続しているものの管理
Virtualization 仮想マシンおよびクラスタの管理
Data circuits プロバイダなどの回線管理
Secrets 認証情報の管理

何が便利か

何ができるか、で書かれたことを1個のエクセルファイルとかで管理するのは難しく、
ドキュメントがバラバラになり、管理が煩雑になりがちです。
これらが1つのWebアプリケーションとなり、包括管理できることがすばらしく、
APIインターフェースを持っていることでAnsibleをつかってネットワークを巡回して自動的に登録したりなんていうことも、
使い方次第でできるようになります。

インストール編

今回は1VMで全部インストールする方法です。
docker-composeもあるみたいなので後日試してみたいと思います、。

SELinux

つかえませんつかいません。

本来はSELinuxを有効にしましょう。と言いたいところですが、
SELinux周りで躓くくらいなら先に動かしてヒャッホイしたいということでスキップします。
いわゆる技量不足のため麺硬めはできません。ってやつです。美味しく食べてください。
(社内公開用だからあれだけど、外部公開する時はメリデメ見極めて採用可否を判断してくださいね。)

PostgreSQL install

PostgreSQLをインストールします。
単純にDBMSとしてデータを保管しているだけなので、別サーバーでもできますね。
pg_hba.confの修正もわすれずに。

[root@netbox ~]# dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
[root@netbox ~]# dnf -qy module disable postgresql
[root@netbox ~]# dnf -y install postgresql12-server
[root@netbox ~]# /usr/pgsql-12/bin/postgresql-12-setup initdb
[root@netbox ~]# systemctl enable postgresql-12
[root@netbox ~]# systemctl start postgresql-12
[root@netbox ~]# su - postgres
[postgres@netbox ~]$ psql
psql (12.3)
"help"でヘルプを表示します。

postgres=# alter user postgres with password 'hogehoge';
ALTER ROLE
postgres=# create database netbox;
CREATE DATABASE
postgres=# create user netbox with password 'hogehoge';
CREATE ROLE
postgres=#  GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
GRANT
postgres=# \q
[postgres@netbox ~]$ cd 12/data/
[postgres@netbox data]$ cp -p pg_hba.conf{,.bak}
[postgres@netbox data]$ vi pg_hba.conf
[postgres@netbox data]$ diff pg_hba.conf{,.bak}
82c82
< host    all             all             127.0.0.1/32            md5
---
> host    all             all             127.0.0.1/32            ident
84c84
< host    all             all             ::1/128                 md5
---
> host    all             all             ::1/128                 ident

[root@netbox ~]# systemctl restart postgresql-12
[root@netbox ~]# systemctl status postgresql-12

redis install

インメモリデータストアでredisを使用しています。

[root@netbox ~]# dnf -y install epel-release
[root@netbox ~]# systemctl start redis
[root@netbox ~]# systemctl enable redis
[root@netbox ~]# dnf install -y redis

netbox install

いよいよnetboxインストールです。
venvの定義が付属しているので、思ったよりかんたんに導入できます。

[root@netbox ~]# dnf install -y gcc python36 python36-devel libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config git
[root@netbox netbox]#  git clone -b master https://github.com/netbox-community/netbox.git .
[root@netbox netbox]# groupadd --system netbox
[root@netbox netbox]# adduser --system --gid netbox netbox
[root@netbox netbox]# chown --recursive netbox /opt/netbox/netbox/media/
[root@netbox netbox]# python3 -m venv /opt/netbox/venv
[root@netbox netbox]# source venv/bin/activate
(venv) [root@netbox netbox]# pip3 install -r requirements.txt
(venv) [root@netbox netbox]# pip3 install napalm
(venv) [root@netbox netbox]# echo napalm >> local_requirements.txt
(venv) [root@netbox netbox]# pip3 install django-storages
(venv) [root@netbox netbox]# echo django-storages >> local_requirements.txt
(venv) [root@netbox netbox]# cd netbox/netbox/
(venv) [root@netbox netbox]# cp configuration.example.py configuration.py
(venv) [root@netbox netbox]# python ../generate_secret_key.py
ここの結果をSECRET_KEYに貼り付ける
(venv) [root@netbox netbox]# vi configuration.py

(venv) [root@netbox netbox]# cd /opt/netbox/netbox/
(venv) [root@netbox netbox]#  python3 manage.py migrate

ログイン用のスーパーユーザーの作成

(venv) [root@netbox netbox]# python3 manage.py createsuperuser
Username (leave blank to use 'root'): phadmin
Email address: nwadmin@pumpkinheads.jp
Password:
Password (again):
Superuser created successfully.

お試しで起動してみましょう

curlで見る限りもnetboxの画面が出力されてるように見えるので、一旦はOKとしました。
心配な場合はブラウザから見てみてください。

(venv) [root@netbox netbox]# python3 manage.py collectstatic --no-input

976 static files copied to '/opt/netbox/netbox/static'.
(venv) [root@netbox netbox]#  python3 manage.py runserver 0.0.0.0:8000 --insecure
Performing system checks...

System check identified no issues (0 silenced).
July 27, 2020 - 02:17:42
Django version 3.0.8, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[27/Jul/2020 02:18:14] "GET / HTTP/1.1" 200 31272

[root@netbox ~]# curl http://192.168.200.118:8000/


<!DOCTYPE html>
<html lang="en">
<head>
    <title>Home - NetBox</title>
    <link rel="stylesheet"
~省略~


apache install

普通に80版からアクセスしたいので、apacheを使って連携しました。
もちろんnginxでも連携できます。

firewalldのポート開放も忘れずに。

[root@netbox ~]# dnf install -y httpd
[root@netbox ~]# cp /opt/netbox/contrib/apache.conf /etc/httpd/conf.d/netbox.conf
[root@netbox ~]# vi /etc/httpd/conf.d/netbox.conf
[root@netbox ~]# diff /opt/netbox/contrib/apache.conf /etc/httpd/conf.d/netbox.conf
1c1
< <VirtualHost *:443>
---
> <VirtualHost *:80>
5,9c5
<     ServerName netbox.example.com
<
<     SSLEngine on
<     SSLCertificateFile /etc/ssl/certs/netbox.crt
<     SSLCertificateKeyFile /etc/ssl/private/netbox.key
---
>     ServerName netbox.hogehoge.jp
[root@netbox ~]# systemctl enable httpd --now
[root@netbox ~]# firewall-cmd --add-service=http --permanent
[root@netbox ~]# firewall-cmd --reload

自動起動・デーモン化

自動起動用にsystemdのserviceファイルが用意されているので忘れずに登録しましょう。

[root@netbox ~]# cd /opt/netbox
[root@netbox netbox]# cp contrib/gunicorn.py /opt/netbox/gunicorn.py
[root@netbox netbox]# cp contrib/*.service /etc/systemd/system/
[root@netbox netbox]# systemctl daemon-reload
[root@netbox netbox]# systemctl start netbox netbox-rq
[root@netbox netbox]# systemctl enable netbox netbox-rq
Created symlink /etc/systemd/system/multi-user.target.wants/netbox.service → /etc/systemd/system/netbox.service.
Created symlink /etc/systemd/system/multi-user.target.wants/netbox-rq.service → /etc/systemd/system/netbox-rq.service.
[root@netbox netbox]# systemctl status netbox.service
● netbox.service - NetBox WSGI Service
   Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-07-27 11:26:20 JST; 11s ago
     Docs: https://netbox.readthedocs.io/en/stable/
 Main PID: 90125 (gunicorn)
    Tasks: 6 (limit: 49284)
   Memory: 299.2M
   CGroup: /system.slice/netbox.service
           tq90125 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
           tq90132 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
           tq90133 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
           tq90136 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
           tq90138 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
           mq90139 /opt/netbox/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi

 7月 27 11:26:20 netbox.dev.pumpkinheads.jp systemd[1]: Started NetBox WSGI Service.
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90125] [INFO] Starting gunicorn 20.0.4
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90125] [INFO] Listening at: http://127.0.0.1:8001 (90125)
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90125] [INFO] Using worker: threads
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90132] [INFO] Booting worker with pid: 90132
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90133] [INFO] Booting worker with pid: 90133
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90136] [INFO] Booting worker with pid: 90136
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90138] [INFO] Booting worker with pid: 90138
 7月 27 11:26:20 netbox.dev.pumpkinheads.jp gunicorn[90125]: [2020-07-27 11:26:20 +0900] [90139] [INFO] Booting worker with pid: 90139

これでセットアップ完了です。

ブラウザからアクセスする

以下のような画面が表示されたら完了です。
右上のログインから先程登録したユーザーでログインしましょう。

image.png

おまけ: IPアドレスディスカバリ

思った動きにはなっていないので、実行したログだけ公開。
nmapがいい感じにIPアドレス巡回してホスト名を拾ってくれるはずなのですが、
現時点ではうまく行かず、"autodiscovered:netbox-scanner"とDescription項目に入った情報がIP Address管理画面に表示されるという感じです。

ansible連携してインベントリ登録する方法などを紹介されているところもあるので、
今後試してみて見たいと思います

[root@netbox ~]# source /opt/netbox/venv/bin/activate
(venv) [root@netbox ~]# dnf install -y nmap
(venv) [root@netbox ~]# wget https://github.com/lopes/netbox-scanner/archive/v2.zip
(venv) [root@netbox ~]# unzip v2.zip
(venv) [root@netbox ~]# cd netbox-scanner-2
(venv) [root@netbox netbox-scanner-master]# pip install -r requirements.txt
(venv) [root@netbox netbox-scanner-master]# cp netbox-scanner.conf /opt/netbox/netbox-scanner.conf
(venv) [root@netbox netbox-scanner-master]# vi /opt/netbox/netbox-scanner.conf
(venv) [root@netbox netbox-scanner-2]# diff netbox-scanner.conf /opt/netbox/netbox-scanner.conf
2,3c2,3
< address    = https://netbox.domain
< token      =
---
> address    = http://netbox.dev.pumpkinheads.jp
> token      = {APITOKEN}
8c8
< path     = samples/nmap
---
> path     = nmap
12a13,21
> [NETXMS]
> address    = https://netxms.domain
> username   =
> password   =
> tls_verify = no
> unknown    = autodiscovered:netbox-scanner
> tag        = netxms
> cleanup    = yes
>
(venv) [root@netbox netbox-scanner-2]# mkdir nmap
(venv) [root@netbox netbox-scanner-2]# nmap -T4 -O -F --host-timeout 30s -oX nmap/nmap-192.168.200.0.xml -sS 192.168.200.0/24
(venv) [root@netbox nmap]# cd ..

さいごに

道具としてすごく便利ですが、ルールぎめをしつつメンテナンスをしていかないと
結局エクセルでやってた時と同じです。
ただ細かくデータ投入することに気を取られていると、それだけで気疲れするというものもあるので、
少しずつ適用範囲を広げてはどうでしょうか。

電源管理とかも1個1個のデバイスの使用電力量をコツコツ入れていくと見えるかできたり、
データセンター移設やラックごと引き継ぎもかんたんにできるようになると思います。
デバイスをテンプレート化していくことができるので、ある程度まとまって同等機種を入れているようなラックには
登録が比較的ラクに行う事ができるとおもいます。

実験的に導入している段階ですが、スマホからでも気軽に見えるようにVPN経由で見られるようにして利用しています。

ssakaigawa
2018 - 2020 IBM Champion / TJBotFan コンテナ・ベース・オーケストレーション共著(IBM Cloud Container Service部分)
iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした