2019年7月18日 星期四

[經驗分享]NetBox 安裝記錄與初步使用心得



近期在評估 IP 與 Rack 管理系統,其中一款是 NetBox。

此文記錄安裝在 Ubuntu 18.04 過程與初步使用情況。







資料庫

NetBox 搭配的資料庫系統為 PostgreSQL,在 NetBox 2.2 版需要選用 PostgreSQL 9.4 以上的版本。
安裝資料庫伺服器
# apt-get update
# apt-get install -y postgresql libpq-dev

接下來建立其它部份,請注意密碼不要使用與範例相同。
建立使用者與資料庫
# sudo -u postgres psql
psql (9.4.5)
Type "help" for help.

postgres=# CREATE DATABASE netbox;
CREATE DATABASE
postgres=# CREATE USER netbox WITH PASSWORD 'J5brHrAXFLQSif0K';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
GRANT
postgres=# \q





主系統

開始安裝系統主要用到的元件,包含 Python、Redis 等。
安裝主要元件
# apt-get install -y python3 python3-pip python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev graphviz libpq-dev libssl-dev redis-server zlib1g-dev

安裝主程式,我採用直接從 Git 安裝方式。
以 Git 進行下載
# mkdir -p /opt/netbox/ && cd /opt/netbox/
# apt-get install -y git
# git clone -b master https://github.com/digitalocean/netbox.git .

安裝 Python 軟體包與設定。
以 PIP 方式進行處理
# pip3 install -r requirements.txt
# pip3 install napalm
# cd netbox/netbox/
# cp configuration.example.py configuration.py

設定檔 configuration.py 配置,主要有 ALLOWED_HOSTS、DATABASE、SECRET_KEY 這四大項。

其中 SECRET_KEY 可以預先使用 netbox/generate_secret_key.py 這支程式產生後,再填入。
系統設定修改
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
DATABASE = {
    'NAME': 'netbox',               # Database name
    'USER': 'netbox',               # PostgreSQL username
    'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
    'HOST': 'localhost',            # Database server
    'PORT': '',                     # Database port (leave blank for default)
}
SECRET_KEY = 'xxxxxxxx'

系統安裝完成後,需要手動建立一名管理者以供登入。
建立管理者
# python3 manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password:
Password (again):
Superuser created successfully.

至此系統安裝完成,可以進行初步測試。
執行系統測試
# python3 manage.py runserver 0.0.0.0:8000 --insecure
Performing system checks...

System check identified no issues (0 silenced).
November 28, 2018 - 09:33:45
Django version 2.0.9, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

請使用瀏覽器連至 http://ip:8000/ ,即可開始體驗 NetBox 系統。






網頁伺服器

上面完成的安裝僅適合測試或開發使用,若要正式上線,應該以網頁伺服器做為運作的服務基礎。
安裝 nginx
# apt-get install -y nginx

安裝完 nginx,接著使用文字編輯器建立給 NetBox 使用的站台設定,請存檔於 /etc/nginx/sites-available/netbox
建立 NetBox 站台設定
server {
    listen 80;

    server_name netbox.example.com;

    client_max_body_size 25m;

    location /static/ {
        alias /opt/netbox/netbox/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
}

接著調整站台相關設定並重啟服務生效。
調整 nginx sites 設定與連結
# cd /etc/nginx/sites-enabled/
# rm default
# ln -s /etc/nginx/sites-available/netbox
# service nginx restart

安裝相關啟動所需服務
相關服務安裝
# pip3 install gunicorn
# apt-get install -y supervisor

將以下設定存為 /opt/netbox/gunicorn_config.py
gunicorn 服務設定
command = '/usr/bin/gunicorn'
pythonpath = '/opt/netbox/netbox'
bind = '127.0.0.1:8001'
workers = 3
user = 'www-data'

將以下設定存為 /etc/supervisor/conf.d/netbox.conf
supervisor 服務設定
[program:netbox]
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
directory = /opt/netbox/netbox/
user = www-data

[program:netbox-rqworker]
command = python3 /opt/netbox/netbox/manage.py rqworker
directory = /opt/netbox/netbox/
user = www-data

重新啟動所需服務
重啟服務
# service supervisor restart






使用方式

安裝完成後,使用瀏覽器開啟 http://ip/ ,並登入先前所建立的管理者帳號密碼,即可開始順利使用。


裝置列表畫面



機櫃配置畫面






結論

NetBox 安裝流程算是容易,只要照著官方的安裝流程一步步進行不會有太大的問題。

使用後,我在 IP 管理部份的功能一下沒辦法上手,加上沒有內建繁體中文,亦無法由 GitHub 上貢獻繁體中文語系翻譯檔 (搜尋了一下該專案上的 Issue,官方表示暫時沒有加入可翻譯的架構想法),因此稍微研究後,先暫停使用 NetBox,準備接著試另一套 phpIPAM






參考資料