UbuntuServer16.04にOSSのDCIM・IPAMツール「netbox」をインストールする

以前に紹介したDCIM・IPAMツール「netbox」を、Ubuntu Server 16.04にインストールしてみる。
インストール手順については、公式ドキュメントがあるのでそれを参考にする。

1.PostgreSQLのインストール・設定

まずはPostgreSQLのインストールから。
以下のコマンドを実行する。

sudo apt-get install -y postgresql libpq-dev python-psycopg2

PostgreSQLインストール後、DBの作成などを行わせる。
(この手順では、PostgreSQLでパスワードの設定とか行っていない。実際に利用する場合はちゃんと設定することを推奨する。パスワードも例として「P@ssw0rd」にしているが、これもちゃんとランダムなものを設定したほうがいいので、環境や状況に合わせて変更を。)

sudo -u postgres psql << EOF
CREATE DATABASE netbox;
CREATE USER netbox WITH PASSWORD 'P@ssw0rd';
GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
EOF

2.netboxのインストール・初期設定

Webサーバの前にnetboxのインストール。
まず、以下のコマンドを実行して前提パッケージを導入する。

sudo apt-get install -y python2.7 python-dev python-pip libxml2-dev libxslt1-dev libffi-dev graphviz libpq-dev libssl-dev git

次に、githubからnetboxのソースを持ってくる。

sudo mkdir -p /opt/netbox/
cd /opt/netbox/
sudo git clone -b master https://github.com/digitalocean/netbox.git .

pipで必要になるpythonパッケージのインストールを行う。

sudo pip install -r requirements.txt

設定ファイルをテンプレートをコピーして作成する。

cd netbox/netbox/
sudo cp configuration.example.py configuration.py

設定ファイルを編集して、DBの接続情報を記述する。

sudo sed -e "1i DEBUG=True" \
         -e "/^ALLOWED_HOSTS/s/\[\]/\[ 'アクセス可能なIPアドレス(*で指定も可能)' \]/g" \
         -e "/PostgreSQL username/s/''/'netbox'/g" \
         -e "/PostgreSQL password/s/''/'P@ssw0rd'/g" \
         -e "/^SECRET_KEY/s/''/'$(../generate_secret_key.py)'/g" \
         -i.bk ./configuration.py

DBへのテーブル作成などマイグレーションを実行する。

cd /opt/netbox/netbox/
./manage.py migrate

netboxの管理ユーザを作成する。

./manage.py createsuperuser
blacknon@BS-PUB-UBUNTU-01:/opt/netbox/netbox$ ./manage.py createsuperuser
Username (leave blank to use 'blacknon'):
Email address:
Password:
Password (again):
Superuser created successfully.

静的ファイルの設定。

./manage.py collectstatic
blacknon@BS-PUB-UBUNTU-01:/opt/netbox/netbox$ sudo ./manage.py collectstatic

You have requested to collect static files at the destination
location as specified in your settings:

    /opt/netbox/netbox/static

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes
Copying '/opt/netbox/netbox/project-static/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.svg'
Copying '/opt/netbox/netbox/project-static/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.woff2'
Copying '/opt/netbox/netbox/project-static/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.ttf'
Copying '/opt/netbox/netbox/project-static/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.woff'
Copying '/opt/netbox/netbox/project-static/bootstrap-3.3.6-dist/fonts/glyphicons-halflings-regular.eot'
Copying '/opt/netbox/netbox/project-static/bootstrap-3.3.6-dist/js/bootstrap.min.js'
...

最後に、テストでサーバを動作させる。

./manage.py runserver 0.0.0.0:8000 --insecure
blacknon@BS-PUB-UBUNTU-01:/opt/netbox/netbox$ ./manage.py runserver 0.0.0.0:8000 --insecure
Performing system checks...

System check identified no issues (0 silenced).
September 16, 2016 - 15:56:23
Django version 1.10, using settings 'netbox.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

無事、以下のようにページが表示されれば動作は問題ないだろう。

3.Webサーバのインストール・設定

最後に、ちゃんとWebブラウザから接続できるようにWebサーバのインストール・設定を行う。
今回はWebサーバとしてNginxを用いる。

sudo apt-get install -y gunicorn supervisor nginx

Nginxの設定ファイルを配置する。

sudo sh -c 'cat <<"EOF" > /etc/nginx/sites-available/netbox
server {
    listen 80;

    server_name サーバ名(ドメインやIPアドレスなど);

    access_log off;

    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"'\'';
    }
}
EOF'

デフォルトの読み込みファイルを削除してシンボリックリンクを作成する。

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

nginxの起動をする。

sudo service nginx restart

最後に、gunicornおよびsupervisordの設定ファイルを作成してサービスを起動させる。

sudo sh -c "cat <<EOF > /opt/netbox/gunicorn_config.py
command = '/usr/bin/gunicorn'
pythonpath = '/opt/netbox/netbox'
bind = '127.0.0.1:8001'
workers = 3
user = 'www-data'
EOF"
sudo sh -c "cat <<EOF > /etc/supervisor/conf.d/netbox.conf
[program:netbox]
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
directory = /opt/netbox/netbox/
user = www-data
EOF"
sudo chown -R www-data:www-data /opt/netbox/
sudo service supervisor restart

あとは、対象のサーバにブラウザからアクセスするだけだ。

無事、インストールが完了した。