NetBox: Difference between revisions
imported>Vater No edit summary |
m Fixed inline code and added note about plugin id name difference |
||
(10 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
[https://netbox.dev/ {{PAGENAME}}] | [https://netbox.dev/ {{PAGENAME}}] is available as a [[module]]. | ||
== | == Setup == | ||
=== | === Setup Secret Key === | ||
Netbox uses a secret key to derive new hashes for passwords and HTTP cookies [https://docs.netbox.dev/en/stable/configuration/required-parameters/#secret_key]. | |||
You should '''NOT''' share this key outside the configuration (i.e. in /nix/store) and it must be at least 50 characters long: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
mkdir -p /var/lib/netbox/ | |||
nix-shell -p openssl | |||
openssl rand -hex 50 > /var/lib/netbox/secret-key-file | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Configuration === | |||
==== Basic Configuration ==== | |||
The module will automatically set up a Redis instance and a PostgreSQL database.<syntaxhighlight lang="nix"> | |||
{ config, ... }: { | |||
networking.firewall.allowedTCPPorts = [ | networking.firewall.allowedTCPPorts = [ 80 ]; | ||
services.netbox = { | |||
enable = true; | |||
secretKeyFile = "/var/lib/netbox/secret-key-file"; | |||
}; | |||
services.nginx = { | |||
enable = true; | |||
user = "netbox"; # otherwise nginx cant access netbox files | |||
recommendedProxySettings = true; # otherwise you will get CSRF error while login | |||
virtualHosts.<name> = { | |||
locations = { | |||
"/" = { | |||
proxyPass = "http://[::1]:8001"; | |||
# proxyPass = "http://${config.services.netbox.listenAddress}:${config.services.netbox.port}"; | |||
}; | |||
"/static/" = { alias = "${config.services.netbox.dataDir}/static/"; }; | |||
# | |||
# | |||
# | |||
}; | }; | ||
}; | }; | ||
}; | }; | ||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==== With Transport encryption ==== | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
{ config, ... }: { | |||
networking.firewall.allowedTCPPorts = [ 80 443 ]; | |||
== | services.netbox = { | ||
enable = true; | |||
secretKeyFile = "/var/lib/netbox/secret-key-file"; | |||
}; | |||
services.nginx = { | |||
enable = true; | |||
forceSSL = true; | |||
user = "netbox"; # otherwise nginx cant access netbox files | |||
recommendedProxySettings = true; # otherwise you will get CSRF error while login | |||
recommendedTlsSettings = true; | |||
enableACME = true; | |||
virtualHosts.<name> = { | |||
locations = { | |||
"/" = { | |||
proxyPass = "http://[::1]:8001"; | |||
# proxyPass = "http://${config.services.netbox.listenAddress}:${config.services.netbox.port}"; | |||
}; | |||
"/static/" = { alias = "${config.services.netbox.dataDir}/static/"; }; | |||
}; | |||
}; | |||
}; | |||
== | security.acme = { | ||
[ ... ] | |||
acceptTerms = true; | |||
}; | |||
} | |||
< | </syntaxhighlight>For more acme settings and further instruction, please look here [[ACME]]. | ||
For more nginx settings and further instruction, please look here [[Nginx|Nginx.]] | |||
==== | === Plugins === | ||
The NixOS module supports plugins from nixpkgs. However, at the moment only a small set of plugins is packaged in nixpkgs and is available as part of [https://search.nixos.org/packages?type=packages&query=python3Packages+netbox python3Packages]. The documentation for plugins is being worked on and discussed in [https://github.com/NixOS/nixpkgs/issues/261522 #261522]. | |||
==== | To include a plugin:<syntaxhighlight lang="nix"> | ||
== | { pkgs, ... }: { | ||
services.netbox = { | |||
plugins = ps: with ps; [ ps.netbox-reorder-rack ]; | |||
settings.PLUGINS = ["netbox_reorder_rack"]; | |||
}; | |||
} | |||
</syntaxhighlight>The plugin identifier for <source lang="nix" enclose="none">services.netbox.settings.PLUGINS</source> is usually contained in the official documentation for the plugin. It usually is slightly different from the package name. | |||
=== Setup Superuser === | |||
== | |||
There will be no user after the installation, so you need to register one manually. | |||
To do this, run: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ netbox-manage createsuperuser | |||
Username (leave blank to use 'netbox'): | Username (leave blank to use 'netbox'): | ||
Email address: | Email address: | ||
Password: | Password: | ||
Password (again): | Password (again): | ||
Superuser created successfully. | Superuser created successfully. | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | You can now log in with the given credentials. | ||
=== Troubleshooting === | |||
==== CSRF aborted message at login ==== | |||
If you still get an CSRF aborted message while trying to log in after doing everything above, please try to use another browser. | |||
It could be these problem https://stackoverflow.com/questions/11516635/django-does-not-send-csrf-token-again-after-browser-cookies-has-been-cleared but I'm not sure. | |||
== Documentation == | |||
: | * https://netbox.dev/ | ||
: | ** https://docs.netbox.dev/ | ||
[[Category:Guide]] | [[Category:Guide]] | ||
[[Category:Applications]] | [[Category:Applications]] |