NetBox: Difference between revisions
imported>Jeyemwey Simplify, reformat and remove postgres code |
m Fixed inline code and added note about plugin id name difference |
||
| (5 intermediate revisions by 3 users not shown) | |||
| Line 2: | Line 2: | ||
== Setup == | == 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: | |||
You should | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Line 13: | Line 13: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Configuration === | |||
==== Basic Configuration ==== | ==== Basic Configuration ==== | ||
The module will automatically set up a Redis instance and a PostgreSQL database.<syntaxhighlight lang="nix"> | |||
{ config, ... }: { | |||
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> | |||
==== With Transport encryption ==== | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
{ config, ... }: { | { config, ... }: { | ||
networking.firewall.allowedTCPPorts = [ 80 443 ]; | networking.firewall.allowedTCPPorts = [ 80 443 ]; | ||
| Line 31: | Line 56: | ||
services.nginx = { | services.nginx = { | ||
enable = true; | enable = true; | ||
user = "netbox"; | forceSSL = true; | ||
user = "netbox"; # otherwise nginx cant access netbox files | |||
recommendedProxySettings = true; # otherwise you will get CSRF error while login | |||
recommendedTlsSettings = true; | recommendedTlsSettings = true; | ||
enableACME = true; | |||
virtualHosts.<name> = { | |||
virtualHosts. | |||
locations = { | locations = { | ||
"/" = { | "/" = { | ||
| Line 43: | Line 69: | ||
"/static/" = { alias = "${config.services.netbox.dataDir}/static/"; }; | "/static/" = { alias = "${config.services.netbox.dataDir}/static/"; }; | ||
}; | }; | ||
}; | }; | ||
}; | }; | ||
security.acme = { | security.acme = { | ||
[ ... ] | |||
acceptTerms = true; | acceptTerms = true; | ||
}; | }; | ||
} | } | ||
</syntaxhighlight> | </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: | To do this, run: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Line 104: | Line 110: | ||
</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 == | == Documentation == | ||