Compare commits

...

235 Commits

Author SHA1 Message Date
Tobias Genannt
c60defe0e6
Merge pull request #1609 from netbox-community/develop
Release 4.0.0
2026-02-03 11:22:18 +01:00
Tobias Genannt
7e956129d0
Merge pull request #1606 from tobiasge/fix-deocs
Fixed the local documentation and prepare for a new release
2026-02-03 09:54:23 +01:00
Tobias Genannt
01a36c69c4 Preparation for 4.0.0 2026-02-02 12:46:51 +01:00
Tobias Genannt
52b1e23c80 Fixed serving of the local documentation 2026-02-02 12:46:02 +01:00
Tobias Genannt
6430391602
Merge pull request #1604 from netbox-community/renovate/sentry-sdk-2.x
chore(deps): update dependency sentry-sdk to v2.51.0
2026-01-28 12:43:16 +01:00
renovate[bot]
a4a83453d9
chore(deps): update dependency sentry-sdk to v2.51.0 2026-01-28 11:07:37 +00:00
Tobias Genannt
5b8320bcca
Merge pull request #1599 from netbox-community/renovate/sentry-sdk-2.x
chore(deps): update dependency sentry-sdk to v2.50.0
2026-01-20 16:23:37 +01:00
renovate[bot]
909c234af6
chore(deps): update dependency sentry-sdk to v2.50.0 2026-01-20 14:45:03 +00:00
Tobias Genannt
b6cf435091
Merge pull request #1598 from netbox-community/renovate/dulwich-1.x
Update dependency dulwich to v1
2026-01-18 12:13:28 +01:00
renovate[bot]
050f313485
chore(deps): update dependency dulwich to v1 2026-01-18 02:03:43 +00:00
Tobias Genannt
68717f8d21
Merge pull request #1594 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.25.2
2026-01-12 06:43:29 +01:00
renovate[bot]
4f60741e79
chore(deps): update dependency dulwich to v0.25.2 2026-01-12 01:54:47 +00:00
Tobias Genannt
848b5d9150
Merge pull request #1593 from netbox-community/renovate/dulwich-0.x
chore(deps): update dependency dulwich to v0.25.1
2026-01-09 06:38:26 +01:00
renovate[bot]
c8232c058e
chore(deps): update dependency dulwich to v0.25.1 2026-01-09 00:43:09 +00:00
Tobias Genannt
fd6a75ac96
Support new API token format (#1591)
Support new API token format
2026-01-08 13:36:54 +01:00
Tobias Genannt
94dd752652
Merge pull request #1592 from netbox-community/renovate/sentry-sdk-2.x
chore(deps): update dependency sentry-sdk to v2.49.0
2026-01-08 11:46:48 +01:00
renovate[bot]
20cccc3869
chore(deps): update dependency sentry-sdk to v2.49.0 2026-01-08 10:09:25 +00:00
Tobias Genannt
269cf83362
Merge pull request #1590 from netbox-community/renovate/granian-2.x
chore(deps): update dependency granian to v2.6.1
2026-01-08 09:18:35 +01:00
renovate[bot]
da0784992e
chore(deps): update dependency granian to v2.6.1 2026-01-07 13:54:12 +00:00
Tobias Genannt
c0ead010ec
Merge pull request #1571 from tobiasge/fix-pg-volume
Changed volume to match upstream image
2026-01-07 14:53:42 +01:00
Tobias Genannt
ebba20d02b Changed volume to match upstream image 2026-01-07 14:18:31 +01:00
Tobias Genannt
36bf34ddc1
Merge pull request #1583 from netbox-community/renovate/django-auth-ldap-5.x
Update dependency django-auth-ldap to v5.3.0
2025-12-27 09:12:47 +01:00
renovate[bot]
36f075e407
chore(deps): update dependency django-auth-ldap to v5.3.0 2025-12-26 18:05:18 +00:00
Tobias Genannt
937216ecb0
Merge pull request #1580 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.25.0
2025-12-18 07:00:14 +01:00
renovate[bot]
968bef976c
chore(deps): update dependency dulwich to v0.25.0 2025-12-18 00:05:52 +00:00
renovate[bot]
021c3fea99
chore(deps): update dependency sentry-sdk to v2.48.0 (#1579)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-16 19:14:21 +00:00
Skye Fugate
8387b4d0f6
NetBox-Docker Okta & Google SSO Environment Additions (#1475)
* feat: add SSO environment variable support for OKTA and Google OAuth2

Add native support for SSO configuration through environment variables
and Docker secrets, eliminating the need to modify configuration.py
for common SSO providers.

Changes:
- Add OKTA OpenID Connect configuration variables:
  - SOCIAL_AUTH_OKTA_OPENIDCONNECT_KEY (env var)
  - SOCIAL_AUTH_OKTA_OPENIDCONNECT_SECRET (env var + Docker secret: okta_openidconnect_secret)
  - SOCIAL_AUTH_OKTA_OPENIDCONNECT_API_URL (env var)

- Add Google OAuth2 configuration variables:
  - SOCIAL_AUTH_GOOGLE_OAUTH2_KEY (env var)
  - SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET (env var + Docker secret: google_oauth2_secret)

Follows existing patterns with _read_secret() for sensitive data and
environ.get() for non-sensitive configuration.

Resolves: netbox-community/netbox-docker#1139

* Secrets example

* fix: add newline at end of file

---------

Co-authored-by: skyefugate <skyefugate@users.noreply.github.com>
2025-12-10 07:51:30 +01:00
Tobias Genannt
d24afeecb0
Merge pull request #1576 from matandomuertos/fix-storages-example
Update STORAGES example in extra.py
2025-12-09 16:27:33 +01:00
Nahuel Cassinari
ac419312ae
Update STORAGES example 2025-12-09 15:27:25 +01:00
Tobias Genannt
95c201f416
Merge pull request #1572 from fbouynot/patch-1
fix: change the netbox docker version in the image tag
2025-12-08 08:29:27 +01:00
Tobias Genannt
a0961edd76
Merge pull request #1574 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.47.0
2025-12-03 21:08:13 +01:00
renovate[bot]
9a68d6fd70
Update dependency sentry-sdk to v2.47.0 2025-12-03 19:34:23 +00:00
Félix Bouynot
6967b2ca34
feat: bump the version to 3.4.2 so it match a newer docker image 2025-12-01 14:57:07 +01:00
Tobias Genannt
d6ee283a24
Merge pull request #1567 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.46.0
2025-11-24 15:22:50 +01:00
renovate[bot]
10031c2990
Update dependency sentry-sdk to v2.46.0 2025-11-24 13:50:32 +00:00
Tobias Genannt
50021466ad
Merge pull request #1565 from netbox-community/renovate/actions-checkout-6.x
Update actions/checkout action to v6
2025-11-20 20:55:15 +01:00
renovate[bot]
0f2fb47d9c
Update actions/checkout action to v6 2025-11-20 18:38:17 +00:00
Tobias Genannt
cff630efa0
Merge pull request #1564 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.45.0
2025-11-19 06:52:02 +01:00
renovate[bot]
74b0a41f3e
Update dependency sentry-sdk to v2.45.0 2025-11-18 22:51:24 +00:00
Tobias Genannt
9de4e23f9c
Merge pull request #1562 from netbox-community/renovate/granian-2.x
Update dependency granian to v2.6.0
2025-11-16 19:27:33 +01:00
renovate[bot]
db027b14a3
Update dependency granian to v2.6.0 2025-11-16 17:56:30 +00:00
Tobias Genannt
07fcb205b4
Switch server to Granian (#1561)
* Switch server to Granian

Because the development of Nginx Unit has been stopped, switch the server
to Granian which still allows to serve the Python application and the
static files from one server.

* Addressed review comments

* Update docker/launch-netbox.sh

Co-authored-by: Christian Mäder <cimnine@users.noreply.github.com>

* Update docker/launch-netbox.sh

Co-authored-by: Christian Mäder <cimnine@users.noreply.github.com>

---------

Co-authored-by: Christian Mäder <cimnine@users.noreply.github.com>
2025-11-12 12:57:50 +00:00
Tobias Genannt
c89fd3331b
Merge pull request #1560 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.44.0
2025-11-11 15:15:09 +01:00
renovate[bot]
f474cc585c
Update dependency sentry-sdk to v2.44.0 2025-11-11 13:43:40 +00:00
Tobias Genannt
8147115847
Merge pull request #1559 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.10
2025-11-10 22:42:50 +01:00
renovate[bot]
22688dedd4
Update dependency dulwich to v0.24.10 2025-11-10 20:51:29 +00:00
Tobias Genannt
86223f210a
Merge pull request #1523 from netbox-community/renovate/docker.io-postgres-18.x
Update docker.io/postgres Docker tag to v18
2025-11-10 12:57:48 +01:00
Tobias Genannt
665e27560f
Merge pull request #1500 from netbox-community/renovate/docker.io-valkey-valkey-9.x
Update docker.io/valkey/valkey Docker tag to v9
2025-11-10 12:57:24 +01:00
Tobias Genannt
7d6f00662c
Merge pull request #1558 from netbox-community/develop
Version 3.4.2
2025-11-10 12:55:32 +01:00
Tobias Genannt
4965e7e988 Preparation for 3.4.2 2025-11-10 10:28:40 +01:00
Tobias Genannt
d194cf7fff
Merge pull request #1554 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.43.0
2025-11-10 10:02:13 +01:00
Tobias Genannt
0439c610de
Merge pull request #1555 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.8
2025-11-10 10:01:53 +01:00
renovate[bot]
35473e755b
Update dependency dulwich to v0.24.8 2025-10-30 03:30:40 +00:00
renovate[bot]
3f0f4e7160
Update dependency sentry-sdk to v2.43.0 2025-10-29 19:47:17 +00:00
Tobias Genannt
10a57990e2
Merge pull request #1553 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.7
2025-10-23 15:18:16 +02:00
renovate[bot]
2d6d5058fe
Update dependency dulwich to v0.24.7 2025-10-23 12:46:08 +00:00
Tobias Genannt
f6cab681b4
Merge pull request #1547 from WillNilges/patch-1
Correct typo in launch-netbox.sh
2025-10-22 14:52:48 +02:00
Tobias Genannt
4bdf66157b
Merge pull request #1550 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.42.1
2025-10-22 14:20:41 +02:00
renovate[bot]
73bbf17d6b
Update dependency sentry-sdk to v2.42.1 2025-10-20 15:32:40 +00:00
Tobias Genannt
9b2793a808
Merge pull request #1548 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.6
2025-10-19 15:31:13 +02:00
renovate[bot]
b0aad0dfda
Update dependency dulwich to v0.24.6 2025-10-19 12:45:34 +00:00
Willard Nilges
eb2822a978
Fix typo in error message for Unit configuration 2025-10-19 01:17:23 -04:00
Tobias Genannt
016a2ab4fe
Merge pull request #1542 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.5
2025-10-16 19:39:19 +02:00
renovate[bot]
56d27f84a7
Update dependency dulwich to v0.24.5 2025-10-16 14:11:49 +00:00
Tobias Genannt
24641dabc5
Merge pull request #1540 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.42.0
2025-10-15 13:16:39 +02:00
renovate[bot]
07258394d1
Update dependency sentry-sdk to v2.42.0 2025-10-15 10:43:52 +00:00
Tobias Genannt
b6cc5e3c06
Merge pull request #1537 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.4
2025-10-15 06:43:09 +02:00
renovate[bot]
95bcfeb69d
Update dependency dulwich to v0.24.4 2025-10-14 21:08:52 +00:00
Tobias Genannt
c10d4e71c7
Merge pull request #1533 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.41.0
2025-10-14 07:17:32 +02:00
renovate[bot]
85615a9bea
Update dependency sentry-sdk to v2.41.0 2025-10-14 04:46:28 +00:00
Tobias Genannt
1abb784f9b
Merge pull request #1535 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.3
2025-10-14 06:45:35 +02:00
renovate[bot]
f89f907408
Update dependency dulwich to v0.24.3 2025-10-14 01:45:18 +00:00
Tobias Genannt
6b7121564b
Merge pull request #1532 from tobiasge/new-api-token
Support new API_TOKEN format
2025-10-10 11:36:01 +02:00
Tobias Genannt
1f0ef020a9 Support new API_TOKEN format
Allows configuration the new API_TOKEN_PEPPERS setting from an
ENV variable or secret file.

Feature request: https://github.com/netbox-community/netbox/issues/20210
Pull request: https://github.com/netbox-community/netbox/pull/20477
2025-10-08 08:26:27 +02:00
Tobias Genannt
f07c9d533d
Merge pull request #1531 from netbox-community/renovate/ghcr.io-astral-sh-uv-0.x
Update ghcr.io/astral-sh/uv Docker tag to v0.9
2025-10-08 07:29:21 +02:00
renovate[bot]
7067475a81
Update ghcr.io/astral-sh/uv Docker tag to v0.9 2025-10-08 05:08:30 +00:00
Tobias Genannt
0072d59ea2
Merge pull request #1528 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.40.0
2025-10-06 15:59:15 +02:00
renovate[bot]
88bc5cf8d6
Update dependency sentry-sdk to v2.40.0 2025-10-06 13:37:57 +00:00
Tobias Genannt
993628d8f0
Merge pull request #1525 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.2
2025-09-26 13:04:17 +02:00
renovate[bot]
dbc1b37cf7
Update dependency dulwich to v0.24.2 2025-09-26 10:42:24 +00:00
Tobias Genannt
7aeec92141
Merge pull request #1479 from tobiasge/update-readme
Use our example file in the Readme
2025-09-26 12:41:55 +02:00
Tobias Genannt
ae5f7d2419
Merge pull request #1524 from netbox-community/develop
Version 3.4.1
2025-09-26 11:04:31 +02:00
Tobias Genannt
a945236c81 Preparation for 3.4.1 2025-09-26 09:47:06 +02:00
Tobias Genannt
481a102d30
Merge pull request #1515 from alexanderhofstaetter/patch-1
Increase default NGINX Unit request body limit to 100 MB in nginx settings
2025-09-26 09:25:28 +02:00
renovate[bot]
88a2e48923
Update docker.io/postgres Docker tag to v18 2025-09-26 02:25:40 +00:00
Tobias Genannt
81fb62ecef
Merge pull request #1519 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.39.0
2025-09-25 15:14:25 +02:00
renovate[bot]
2c49500e8d
Update dependency sentry-sdk to v2.39.0 2025-09-25 12:49:11 +00:00
Tobias Genannt
c16c79ff16
Merge pull request #1517 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.38.0
2025-09-16 06:39:49 +02:00
renovate[bot]
c05e838edc
Update dependency sentry-sdk to v2.38.0 2025-09-15 23:32:23 +00:00
Alexander Hofstätter
e62af8be76
Increase default NGINX Unit request body limit to 100 MB in docker/nginx-unit.json
The current NGINX Unit configuration in netbox-docker implicitly limits
incoming HTTP request bodies to roughly 2.5 MB. This causes file uploads
(custom scripts, attachments, etc.) to fail with HTTP 413 before they
reach Django, even when NetBox settings like FILE_UPLOAD_MAX_MEMORY_SIZE
are raised.

This change adds a settings block to docker/nginx-unit.json to raise
the default limit:

{
  "settings": {
    "http": {
      "max_body_size": 104857600
    }
  }
}

With this change, new deployments can handle uploads up to 100 MB out
of the box, aligning the container default with the capabilities of
NetBox core and preventing unexpected 413 errors.

Fixes: https://github.com/netbox-community/netbox-docker/issues/897
2025-09-13 13:06:29 +02:00
Tobias Genannt
a229603d90
Merge pull request #1513 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.37.1
2025-09-09 17:08:38 +02:00
renovate[bot]
942fc04776
Update dependency sentry-sdk to v2.37.1 2025-09-09 14:47:12 +00:00
Tobias Genannt
b76bd3d780
Merge pull request #1511 from LeoColomb/patch-1
Update `BUILD_DATE` format to include seconds
2025-09-08 08:12:34 +02:00
Léo Colombaro
4744eeb3ef
Update BUILD_DATE format to include seconds
* Comply with all standards (RFC 3339, ISO 8601, and HTML).
* Reduce ambiguity.
* Ensure a fully compliant `org.opencontainers.image.created`. (fix artifacthub error)
2025-09-07 14:41:44 +02:00
Tobias Genannt
bdea0cf05a
Merge pull request #1510 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.37.0
2025-09-05 15:21:12 +02:00
renovate[bot]
76f670faaa
Update dependency sentry-sdk to v2.37.0 2025-09-05 12:59:40 +00:00
Tobias Genannt
263fcf35bf
Merge pull request #1509 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.36.0
2025-09-04 12:17:06 +02:00
renovate[bot]
fb1cfd880a
Update dependency sentry-sdk to v2.36.0 2025-09-04 09:54:49 +00:00
Tobias Genannt
b1394ff9cb
Merge pull request #1508 from netbox-community/develop
Version 3.4.0
2025-09-04 09:59:09 +02:00
Tobias Genannt
e9a8e14aa8 Disable zizmor for now 2025-09-03 08:10:15 +02:00
Tobias Genannt
1b0da4048b Disable Trivy for now 2025-09-03 07:59:56 +02:00
Tobias Genannt
e61aba8388 Preparation for 3.4.0 2025-09-03 07:50:41 +02:00
Tobias Genannt
c4f90b7b34
Merge pull request #1507 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.35.2
2025-09-02 07:07:46 +02:00
renovate[bot]
8dac9f2dc7
Update dependency sentry-sdk to v2.35.2 2025-09-01 21:58:31 +00:00
Tobias Genannt
51947e4c52
Merge pull request #1506 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.35.1
2025-08-26 18:14:55 +02:00
renovate[bot]
af562671e2
Update dependency sentry-sdk to v2.35.1 2025-08-26 15:54:13 +00:00
Tobias Genannt
b97c177df8
Merge pull request #1501 from tobiasge/remove-housekeeping-container
Housekeeping
2025-08-18 10:49:53 +02:00
Tobias Genannt
67eff20f7d Housekeeping 2025-08-18 08:45:47 +02:00
Tobias Genannt
c49af09fa5
Merge pull request #1499 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.35.0
2025-08-15 06:49:39 +02:00
renovate[bot]
00d8dd75d6
Update docker.io/valkey/valkey Docker tag to v9 2025-08-15 00:38:39 +00:00
renovate[bot]
71ebfca443
Update dependency sentry-sdk to v2.35.0 2025-08-14 21:03:27 +00:00
Tobias Genannt
b882df6c73
Merge pull request #1497 from netbox-community/renovate/actions-checkout-5.x
Update actions/checkout action to v5
2025-08-11 17:50:23 +02:00
renovate[bot]
e9b6231d03
Update actions/checkout action to v5 2025-08-11 15:30:00 +00:00
Tobias Genannt
1d8a31be83
Merge pull request #1495 from CompPhy/database-syntax-fix
Support new DATABASES syntax in Netbox 4.3
2025-08-05 07:19:46 +02:00
Kelly Shutt
109ef8afd2 Update DATABASES syntax. 2025-08-04 13:10:06 -04:00
Tobias Genannt
b329ab9e61
Merge pull request #1493 from tobiasge/fix-feature-build
Fixed build for Netbox feature branch
2025-08-02 10:44:45 +02:00
Tobias Genannt
56e8af355e Fixed build for Netbox feature branch 2025-08-02 10:00:17 +02:00
Tobias Genannt
8c1a8a9ea6
Merge pull request #1492 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.1
2025-08-01 23:14:05 +02:00
renovate[bot]
68fd99c34a
Update dependency dulwich to v0.24.1 2025-08-01 14:59:00 +00:00
Tobias Genannt
88b6fdb1bd
Merge pull request #1491 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.24.0
2025-08-01 09:07:14 +02:00
renovate[bot]
f03200b88b
Update dependency dulwich to v0.24.0 2025-08-01 06:47:14 +00:00
Tobias Genannt
cc314c6e03
Merge pull request #1490 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.34.1
2025-07-30 15:05:23 +02:00
renovate[bot]
7b10cf0933
Update dependency sentry-sdk to v2.34.1 2025-07-30 12:45:32 +00:00
Tobias Genannt
b15de21aca
Merge pull request #1489 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.34.0
2025-07-30 07:17:42 +02:00
renovate[bot]
d1ef353b31
Update dependency sentry-sdk to v2.34.0 2025-07-29 18:12:22 +00:00
Tobias Genannt
900c8da9c6
Merge pull request #1487 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.33.2
2025-07-22 20:44:38 +02:00
renovate[bot]
e58c735825
Update dependency sentry-sdk to v2.33.2 2025-07-22 18:24:34 +00:00
Tobias Genannt
a2506df96a
Merge pull request #1486 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.33.1
2025-07-21 22:12:45 +02:00
renovate[bot]
f9f5ae70f9
Update dependency sentry-sdk to v2.33.1 2025-07-21 19:45:47 +00:00
Tobias Genannt
dd57383091
Merge pull request #1485 from netbox-community/renovate/super-linter-super-linter-8.x
Update super-linter/super-linter action to v8
2025-07-18 18:22:45 +02:00
renovate[bot]
950b74e3e6
Update super-linter/super-linter action to v8 2025-07-18 15:59:13 +00:00
Tobias Genannt
9623807910
Merge pull request #1484 from netbox-community/renovate/ghcr.io-astral-sh-uv-0.x
Update ghcr.io/astral-sh/uv Docker tag to v0.8
2025-07-18 08:47:16 +02:00
renovate[bot]
658fc00a86
Update ghcr.io/astral-sh/uv Docker tag to v0.8 2025-07-17 23:45:53 +00:00
Tobias Genannt
bc74b0aa6a
Merge pull request #1483 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.33.0
2025-07-15 18:55:23 +02:00
renovate[bot]
f69d214b9a
Update dependency sentry-sdk to v2.33.0 2025-07-15 15:30:00 +00:00
Tobias Genannt
c8d766a95b Use our example file in the Readme 2025-07-08 07:45:38 +02:00
Tobias Genannt
0e66fbad47
Merge pull request #1478 from dawnstrider/develop
Fixed typo for BUILDX_PLATFORM variable
2025-07-08 07:19:23 +02:00
dawnstrider
3320c5d82f Fixed typo for BUILDX_PLATFORM variable
The help prints the variable name as BUILDX_PLATFORMS whereas the code uses BUILDX_PLATFORM
2025-07-07 23:08:49 +02:00
Tobias Genannt
8a58c5a273
Merge pull request #1477 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.23.2
2025-07-07 16:04:16 +02:00
renovate[bot]
21232c8ce1
Update dependency dulwich to v0.23.2 2025-07-07 13:43:56 +00:00
Tobias Genannt
4966abc535
Merge pull request #1474 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.23.1
2025-07-01 06:57:37 +02:00
renovate[bot]
bc41310179
Update dependency dulwich to v0.23.1 2025-06-30 23:37:38 +00:00
Tobias Genannt
b7b226fd53
Merge pull request #1473 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.32.0
2025-06-27 10:57:35 +02:00
renovate[bot]
b845a0f45f
Update dependency sentry-sdk to v2.32.0 2025-06-27 08:38:17 +00:00
Tobias Genannt
98feb59fb7
Merge pull request #1471 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.31.0
2025-06-24 21:49:05 +02:00
renovate[bot]
a0b6ce5ace
Update dependency sentry-sdk to v2.31.0 2025-06-24 19:28:55 +00:00
Tobias Genannt
24f081ce9f
Merge pull request #1470 from jensrudolf/jensrudolf-expose-ldap-always-update-user
Add AUTH_LDAP_ALWAY_UPDATE_USER to ldap config
2025-06-23 14:28:36 +02:00
Jens Rudolf
8e8e37fcc1
Add AUTH_LDAP_ALWAY_UPDATE_USER to ldap config
This change exposes the Django setting AUTH_LDAP_ALWAYS_UPDATE_USER as environment variable to simplify deployments with readonly databases and LDAP based authentication as no extra file is required to be mounted into the container anymore.
2025-06-23 13:08:00 +02:00
Tobias Genannt
17a5ddc232
Merge pull request #1469 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.23.0
2025-06-22 11:51:07 +02:00
renovate[bot]
0e7e68e153
Update dependency dulwich to v0.23.0 2025-06-21 20:48:00 +00:00
Tobias Genannt
4da0319f1f
Merge pull request #1458 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.30.0
2025-06-21 10:15:50 +02:00
renovate[bot]
9748e5b9b7
Update dependency sentry-sdk to v2.30.0 2025-06-12 12:41:10 +00:00
Tobias Genannt
0456a39136
Merge pull request #1454 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.28.0
2025-05-12 15:15:34 +02:00
renovate[bot]
4a2b9be52c
Update dependency sentry-sdk to v2.28.0 2025-05-12 12:54:48 +00:00
Tobias Genannt
e3f2401526
Merge pull request #1452 from netbox-community/renovate/django-auth-ldap-5.x
Update dependency django-auth-ldap to v5.2.0
2025-05-07 15:56:45 +02:00
renovate[bot]
945f61e684
Update dependency django-auth-ldap to v5.2.0 2025-05-07 13:36:43 +00:00
Tobias Genannt
477decd80a
Merge pull request #1450 from netbox-community/develop
Version 3.3.0
2025-05-05 07:51:26 +02:00
Tobias Genannt
b845efe1ad
Merge pull request #1449 from netbox-community/renovate/ghcr.io-astral-sh-uv-0.x
Update ghcr.io/astral-sh/uv Docker tag to v0.7
2025-05-04 15:52:39 +02:00
renovate[bot]
56defa3f82
Update ghcr.io/astral-sh/uv Docker tag to v0.7 2025-04-30 04:00:06 +00:00
Tobias Genannt
7078ab7519
Merge pull request #1448 from tobiasge/merge-back
Merge back of release into develop
2025-04-25 07:58:35 +02:00
Tobias Genannt
fcd5b4e66b Merge remote-tracking branch 'upstream/release' into merge-back 2025-04-25 07:28:42 +02:00
Tobias Genannt
2efacf39ca
Merge pull request #1447 from tobiasge/sentry-hot-fix
Hot fix for Sentry and feature build (Release 3.2.1)
2025-04-25 07:18:54 +02:00
Tobias Genannt
a4ce13be19 Preparation for 3.2.1 2025-04-25 07:06:42 +02:00
renovate[bot]
fa08388175 Update dependency django-storages to v1.14.6 2025-04-25 07:06:42 +02:00
renovate[bot]
fd9b41a5d1 Update dependency sentry-sdk to v2.27.0 2025-04-25 06:58:02 +02:00
Tobias Genannt
83ec1c2656
Merge pull request #1446 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.27.0
2025-04-25 06:42:22 +02:00
renovate[bot]
0fe49f87d7
Update dependency sentry-sdk to v2.27.0 2025-04-24 15:15:00 +00:00
Tobias Genannt
83f87b4ad2
Merge pull request #1406 from netbox-community/renovate/docker.io-valkey-valkey-8.x
Update docker.io/valkey/valkey Docker tag to v8.1
2025-04-20 11:01:11 +02:00
Tobias Genannt
82d9d8ae49
Merge pull request #1438 from tobiasge/prepare-netbox-43
Prepare for NetBox 4.3
2025-04-20 10:50:32 +02:00
Tobias Genannt
f1864f8f20
Merge pull request #1439 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.26.1
2025-04-19 17:36:43 +02:00
Tobias Genannt
8431b77422 Use develop branch for pre-releases 2025-04-19 17:36:09 +02:00
renovate[bot]
19e167ec19
Update dependency sentry-sdk to v2.26.1 2025-04-15 11:46:55 +00:00
Tobias Genannt
8f7c21749e Match upstream testing configuration 2025-04-12 11:10:33 +02:00
Tobias Genannt
ec9a3e80da Prepare for NetBox 4.3 2025-04-12 10:26:09 +02:00
Tobias Genannt
61eaffaf2e
Merge pull request #1432 from netbox-community/renovate/django-storages-1.x
Update dependency django-storages to v1.14.6
2025-04-02 20:10:56 +02:00
Tobias Genannt
fef49f447e
Merge pull request #1435 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.25.1
2025-04-02 20:10:25 +02:00
renovate[bot]
5ded00b6fb
Update dependency sentry-sdk to v2.25.1 2025-04-02 16:02:23 +00:00
renovate[bot]
67ddeb6735
Update dependency django-storages to v1.14.6 2025-04-02 06:32:03 +00:00
Tobias Genannt
8179a4344b
Merge pull request #1431 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.25.0
2025-03-31 18:10:09 +02:00
renovate[bot]
688d8901b7
Update dependency sentry-sdk to v2.25.0 2025-03-31 15:49:55 +00:00
Tobias Genannt
687b8384bc
Merge pull request #1418 from tobiasge/update-unit
Update Nginx Unit
2025-03-27 09:52:14 +01:00
Tobias Genannt
1c3017323c
Merge pull request #1425 from skupjoe/fix-editorconfig-checker
Fix editorconfig-checker deprecations
2025-03-24 14:45:06 +01:00
skupjoe
c8bd177a93 Fix deprecated config name 2025-03-24 14:18:38 +01:00
Tobias Genannt
c31ed9a79a
Merge pull request #1426 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.24.1
2025-03-24 14:09:28 +01:00
renovate[bot]
139c158d8a
Update dependency sentry-sdk to v2.24.1 2025-03-24 12:37:10 +00:00
Tobias Genannt
e5400e345b
Merge pull request #1423 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.24.0
2025-03-21 17:35:20 +01:00
renovate[bot]
017098a587
Update dependency sentry-sdk to v2.24.0 2025-03-21 16:10:17 +00:00
Tobias Genannt
bb8f2fd17c
Merge pull request #1421 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.23.1
2025-03-17 20:17:20 +01:00
renovate[bot]
d9da3fa35b
Update dependency sentry-sdk to v2.23.1 2025-03-17 18:07:11 +00:00
Tobias Genannt
0f7e72fc0d
Merge pull request #1420 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.23.0
2025-03-17 13:12:44 +01:00
renovate[bot]
d9f72e94fa
Update dependency sentry-sdk to v2.23.0 2025-03-17 11:43:58 +00:00
Tobias Genannt
1c8cdfa6dd Update Nginx Unit 2025-03-14 17:12:42 +01:00
Tobias Genannt
b6a30bf989
Merge pull request #1413 from netbox-community/renovate/dulwich-0.x
Update dependency dulwich to v0.22.8
2025-03-07 19:33:22 +01:00
Tobias Genannt
4eb0d6a368 Update test configuration 2025-03-06 21:29:33 +01:00
Tobias Genannt
849f8bef07 Make superliner happy 2025-03-06 20:56:29 +01:00
renovate[bot]
9eee74ba61
Update dependency dulwich to v0.22.8 2025-03-03 03:04:24 +00:00
renovate[bot]
34c26bbd30
Update docker.io/valkey/valkey Docker tag to v8.1 2025-02-17 22:53:25 +00:00
Tobias Genannt
caa3d3324f
Merge pull request #1405 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.22.0
2025-02-17 18:26:38 +01:00
renovate[bot]
25b022203a
Update dependency sentry-sdk to v2.22.0 2025-02-17 15:35:24 +00:00
Tobias Genannt
e61496688d
Merge pull request #1400 from netbox-community/renovate/django-storages-1.x
Update dependency django-storages to v1.14.5
2025-02-15 20:13:33 +01:00
renovate[bot]
29bef7450a
Update dependency django-storages to v1.14.5 2025-02-15 18:46:36 +00:00
Tobias Genannt
6edc921a79
Merge pull request #1399 from netbox-community/renovate/ghcr.io-astral-sh-uv-0.x
Update ghcr.io/astral-sh/uv Docker tag to v0.6
2025-02-14 20:17:22 +01:00
renovate[bot]
0f0ce521d6
Update ghcr.io/astral-sh/uv Docker tag to v0.6 2025-02-14 18:56:50 +00:00
Tobias Genannt
c3f119bedc
Merge pull request #1396 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.21.0
2025-02-12 12:54:22 +01:00
renovate[bot]
1701399b82
Update dependency sentry-sdk to v2.21.0 2025-02-12 11:35:22 +00:00
Tobias Genannt
0b70f722f9
Merge pull request #1387 from netbox-community/develop
Release 3.2.0
2025-02-06 07:17:56 +01:00
Tobias Genannt
cecfd627e4 Preparation for 3.2.0 2025-02-05 20:27:26 +00:00
Tobias Genannt
fb7213a1d2
Merge pull request #1384 from MikuuW/only-ipv6-support
Add: IPv6-only support => Update docker/nginx-unit.json
2025-02-05 07:40:33 +01:00
Tobias Genannt
1aa742342c Make superlinter happy 2025-02-05 07:20:46 +01:00
Mikulas Willaschek
230cd09cb5 Update nginx-unit.json with new listeners and forwarded sources 2025-02-05 07:19:44 +01:00
Tobias Genannt
d67ed0c2df
Merge pull request #1386 from tobiasge/uv-build
Improved image build
2025-02-05 06:51:21 +01:00
Paul Donald
b1d6e3caaa
udpate issue reporting (#1329)
* Update issue report string
* Remove docker version string from placeholder (now obsolete)
2025-02-04 21:47:24 +01:00
Tobias Genannt
542538bf5c Improved image build
- Fix #1383: Setting DEBUG = true when collection the static files
  enables the use of the Django debug toolbar.
- Fix #1385: Use uv as package manager instead of pip speeds up the build.
- Nice display of Docker image version
2025-02-04 21:01:29 +01:00
Tobias Genannt
76404d01bf
Merge pull request #1376 from tobiasge/runners-update
Use hosted Ubuntu 24.04 runners
2025-02-04 20:59:56 +01:00
Tobias Genannt
ab948e467c Ignore actionlint error for now 2025-02-04 20:10:31 +01:00
Christian Mäder
0d221e684d
Merge pull request #1252 from cimnine/principals
PRINCIPALS.md and MAINTAINERS.md
2025-02-03 09:35:12 +01:00
Christian Mäder
5332504c5a
Implement linter feedback 2025-02-03 08:54:56 +01:00
Christian Mäder
0082261007 Fix typos 2025-02-01 16:26:14 +01:00
Christian Mäder
052b17d5c1 Slight improvements 2025-02-01 16:26:14 +01:00
Christian Mäder
7516e5d00d Remove having to provide a reason for turning down applications 2025-02-01 16:26:14 +01:00
Christian Mäder
1bd16cec68 First draft for PRINCIPALS.md, MAINTAINERS.md 2025-02-01 16:26:11 +01:00
Tobias Genannt
0d1637bd71
Merge pull request #1382 from tobiasge/update-readme
Updates for new branch names
2025-01-24 16:01:34 +01:00
Tobias Genannt
60db7e6c90 Make Superlinter happy 2025-01-24 14:45:00 +01:00
Tobias Genannt
607ae32450 Updates for new branch names 2025-01-24 14:31:41 +01:00
Tobias Genannt
64bf745dce
Merge pull request #1380 from tobiasge/edition-marker
Display Docker image version
2025-01-20 11:21:43 +01:00
Tobias Genannt
0ec4c5d795 Display Docker image version 2025-01-20 10:38:42 +01:00
Tobias Genannt
afc10aaf26
Merge pull request #1379 from netbox-community/develop
Version 3.1.1
2025-01-20 09:42:30 +01:00
Tobias Genannt
e48a1b685b Preparation for 3.1.1 2025-01-20 08:53:40 +01:00
Tobias Genannt
d129ade861
Merge pull request #1377 from ProfessorLogout/develop
Feature: Support ISOLATED_DEPLOYMENT setting
2025-01-17 19:36:25 +01:00
Marco Kamner
f394400b2b
Feature: Support ISOLATED_DEPLOYMENT setting 2025-01-17 15:33:01 +01:00
Tobias Genannt
b56c45b4ee Use hosted Ubuntu 24.04 runners 2025-01-16 18:26:35 +01:00
Tobias Genannt
a48b86b5d4
Merge pull request #1372 from mvanwilligen-prox/update_nginx_unit
Update Nginx unit to 1.34.1
2025-01-16 12:08:51 +01:00
Tobias Genannt
6e74993d99
Merge pull request #1375 from netbox-community/renovate/sentry-sdk-2.x
Update dependency sentry-sdk to v2.20.0
2025-01-14 18:51:36 +01:00
renovate[bot]
6fd2681449
Update dependency sentry-sdk to v2.20.0 2025-01-14 17:12:54 +00:00
Mathijs van Willigen
a194302a41 Update Nginx unit to 1.34.1
This fixes the OTel bug in nginx unit 1.34.0.

Signed-off-by: Mathijs van Willigen <mavanwilligen@proxsys.nl>
2025-01-13 10:34:37 +01:00
29 changed files with 366 additions and 312 deletions

View File

@ -5,6 +5,9 @@ docker-compose*
env env
test-configuration test-configuration
.netbox/.git* .netbox/.git*
.netbox/.pre-commit-config.yaml
.netbox/.readthedocs.yaml
.netbox/.tx
.netbox/contrib .netbox/contrib
.netbox/scripts .netbox/scripts
.netbox/upgrade.sh .netbox/upgrade.sh

View File

@ -9,3 +9,6 @@ indent_size = 2
[*.py] [*.py]
indent_size = 4 indent_size = 4
[VERSION]
insert_final_newline = false

View File

@ -2,17 +2,12 @@
"Verbose": false, "Verbose": false,
"Debug": false, "Debug": false,
"IgnoreDefaults": false, "IgnoreDefaults": false,
"SpacesAftertabs": false, "SpacesAfterTabs": false,
"NoColor": false, "NoColor": false,
"Exclude": [ "Exclude": ["LICENSE", "\\.initializers", "\\.vscode"],
"LICENSE",
"\\.initializers",
"\\.vscode"
],
"AllowedContentTypes": [], "AllowedContentTypes": [],
"PassedFiles": [], "PassedFiles": [],
"Disable": { "Disable": {
// set these options to true to disable specific checks
"EndOfLine": false, "EndOfLine": false,
"Indentation": false, "Indentation": false,
"InsertFinalNewline": false, "InsertFinalNewline": false,

View File

@ -4,4 +4,4 @@ extend-ignore = E203, W503
per-file-ignores = per-file-ignores =
configuration/*:E131,E251,E266,E302,E305,E501,E722 configuration/*:E131,E251,E266,E302,E305,E501,E722
startup_scripts/startup_script_utils/__init__.py:F401 startup_scripts/startup_script_utils/__init__.py:F401
docker/*:E266,E722 docker/*:E266,E722,E501

View File

@ -48,7 +48,7 @@ body:
id: docker-compose-version id: docker-compose-version
attributes: attributes:
label: Docker Compose Version label: Docker Compose Version
description: Please paste the output of `docker-compose version` description: Please paste the output of `docker-compose version` (or `docker compose version`)
placeholder: Docker Compose version vX.Y.Z placeholder: Docker Compose version vX.Y.Z
validations: validations:
required: true required: true
@ -139,7 +139,6 @@ body:
description: Please paste the output of `cat docker-compose.override.yml` description: Please paste the output of `cat docker-compose.override.yml`
render: yaml render: yaml
placeholder: | placeholder: |
version: '3.4'
services: services:
netbox: netbox:
ports: ports:

View File

@ -16,31 +16,36 @@ concurrency:
jobs: jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-24.04
name: Checks syntax of our code name: Checks syntax of our code
permissions:
contents: read
packages: read
statuses: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: with:
# Full git history is needed to get a proper # Full git history is needed to get a proper
# list of changed files within `super-linter` # list of changed files within `super-linter`
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: "3.9"
- name: Lint Code Base - name: Lint Code Base
uses: github/super-linter@v7 uses: super-linter/super-linter@v8
env: env:
DEFAULT_BRANCH: develop DEFAULT_BRANCH: develop
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SUPPRESS_POSSUM: true SUPPRESS_POSSUM: true
LINTER_RULES_PATH: / LINTER_RULES_PATH: /
VALIDATE_ALL_CODEBASE: false VALIDATE_ALL_CODEBASE: false
VALIDATE_BIOME_FORMAT: false
VALIDATE_CHECKOV: false VALIDATE_CHECKOV: false
VALIDATE_DOCKERFILE: false VALIDATE_DOCKERFILE: false
VALIDATE_GITHUB_ACTIONS_ZIZMOR: false
VALIDATE_GITLEAKS: false VALIDATE_GITLEAKS: false
VALIDATE_JSCPD: false VALIDATE_JSCPD: false
VALIDATE_PYTHON_PYLINT: false
VALIDATE_TRIVY: false
FILTER_REGEX_EXCLUDE: (.*/)?(LICENSE|configuration/.*) FILTER_REGEX_EXCLUDE: (.*/)?(LICENSE|configuration/.*)
EDITORCONFIG_FILE_NAME: .ecrc EDITORCONFIG_FILE_NAME: .editorconfig-checker.json
DOCKERFILE_HADOLINT_FILE_NAME: .hadolint.yaml DOCKERFILE_HADOLINT_FILE_NAME: .hadolint.yaml
MARKDOWN_CONFIG_FILE: .markdown-lint.yml MARKDOWN_CONFIG_FILE: .markdown-lint.yml
PYTHON_BLACK_CONFIG_FILE: pyproject.toml PYTHON_BLACK_CONFIG_FILE: pyproject.toml
@ -57,8 +62,8 @@ jobs:
- ./build.sh feature - ./build.sh feature
- ./build.sh main - ./build.sh main
os: os:
- ubuntu-latest - ubuntu-24.04
- self-hosted - ubuntu-24.04-arm
fail-fast: false fail-fast: false
env: env:
GH_ACTION: enable GH_ACTION: enable
@ -69,13 +74,18 @@ jobs:
steps: steps:
- id: git-checkout - id: git-checkout
name: Checkout name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v6
- id: buildx-setup - id: buildx-setup
name: Set up Docker Buildx name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- id: arm-install-skopeo
name: Install 'skopeo' on ARM64
if: matrix.os == 'ubuntu-24.04-arm'
run: |
sudo apt-get install -y skopeo
- id: arm-buildx-platform - id: arm-buildx-platform
name: Set BUILDX_PLATFORM to ARM64 name: Set BUILDX_PLATFORM to ARM64
if: matrix.os == 'self-hosted' if: matrix.os == 'ubuntu-24.04-arm'
run: | run: |
echo "BUILDX_PLATFORM=linux/arm64" >>"${GITHUB_ENV}" echo "BUILDX_PLATFORM=linux/arm64" >>"${GITHUB_ENV}"
- id: docker-build - id: docker-build
@ -85,7 +95,7 @@ jobs:
BUILDX_BUILDER_NAME: ${{ steps.buildx-setup.outputs.name }} BUILDX_BUILDER_NAME: ${{ steps.buildx-setup.outputs.name }}
- id: arm-time-limit - id: arm-time-limit
name: Set Netbox container start_period higher on ARM64 name: Set Netbox container start_period higher on ARM64
if: matrix.os == 'self-hosted' if: matrix.os == 'ubuntu-24.04-arm'
run: | run: |
echo "NETBOX_START_PERIOD=240s" >>"${GITHUB_ENV}" echo "NETBOX_START_PERIOD=240s" >>"${GITHUB_ENV}"
- id: docker-test - id: docker-test

View File

@ -13,15 +13,17 @@ jobs:
build: build:
strategy: strategy:
matrix: matrix:
build_cmd: build:
- ./build-latest.sh - { "cmd": "./build-latest.sh", "branch": "release" }
- PRERELEASE=true ./build-latest.sh - { "cmd": "./build.sh main", "branch": "release" }
- ./build.sh feature # Build pre release images from our develop branch
- ./build.sh main # This is used to test the latest changes before they are merged into the main branch
- { "cmd": "PRERELEASE=true ./build-latest.sh", "branch": "develop" }
- { "cmd": "./build.sh feature", "branch": "develop" }
platform: platform:
- linux/amd64,linux/arm64 - linux/amd64,linux/arm64
fail-fast: false fail-fast: false
runs-on: ubuntu-latest runs-on: ubuntu-24.04
name: Builds new NetBox Docker Images name: Builds new NetBox Docker Images
env: env:
GH_ACTION: enable GH_ACTION: enable
@ -30,16 +32,18 @@ jobs:
steps: steps:
- id: source-checkout - id: source-checkout
name: Checkout name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v6
with:
ref: ${{ matrix.build.branch }}
- id: set-netbox-docker-version - id: set-netbox-docker-version
name: Get Version of NetBox Docker name: Get Version of NetBox Docker
run: echo "version=$(cat VERSION)" >>"$GITHUB_OUTPUT" run: echo "version=$(cat VERSION)" >>"$GITHUB_OUTPUT"
shell: bash shell: bash
- id: check-build-needed - id: check-build-needed
name: Check if the build is needed for '${{ matrix.build_cmd }}' name: Check if the build is needed for '${{ matrix.build.cmd }}'
env: env:
CHECK_ONLY: "true" CHECK_ONLY: "true"
run: ${{ matrix.build_cmd }} run: ${{ matrix.build.cmd }}
# docker.io # docker.io
- id: docker-io-login - id: docker-io-login
name: Login to docker.io name: Login to docker.io
@ -77,7 +81,7 @@ jobs:
if: steps.check-build-needed.outputs.skipped != 'true' if: steps.check-build-needed.outputs.skipped != 'true'
- id: build-and-push - id: build-and-push
name: Push the image name: Push the image
run: ${{ matrix.build_cmd }} --push run: ${{ matrix.build.cmd }} --push
if: steps.check-build-needed.outputs.skipped != 'true' if: steps.check-build-needed.outputs.skipped != 'true'
env: env:
BUILDX_PLATFORM: ${{ matrix.platform }} BUILDX_PLATFORM: ${{ matrix.platform }}

View File

@ -1,6 +1,7 @@
ARG FROM ARG FROM
FROM ${FROM} AS builder FROM ${FROM} AS builder
COPY --from=ghcr.io/astral-sh/uv:0.9 /uv /usr/local/bin/
RUN export DEBIAN_FRONTEND=noninteractive \ RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update -qq \ && apt-get update -qq \
&& apt-get upgrade \ && apt-get upgrade \
@ -20,24 +21,21 @@ RUN export DEBIAN_FRONTEND=noninteractive \
libxslt-dev \ libxslt-dev \
pkg-config \ pkg-config \
python3-dev \ python3-dev \
python3-pip \ && /usr/local/bin/uv venv /opt/netbox/venv
python3-venv \
&& python3 -m venv /opt/netbox/venv \
&& /opt/netbox/venv/bin/python3 -m pip install --upgrade \
pip \
setuptools \
wheel
ARG NETBOX_PATH ARG NETBOX_PATH
COPY ${NETBOX_PATH}/requirements.txt requirements-container.txt / COPY ${NETBOX_PATH}/requirements.txt requirements-container.txt /
ENV VIRTUAL_ENV=/opt/netbox/venv
RUN \ RUN \
# Gunicorn is not needed because we use Nginx Unit # Gunicorn is not needed because we use Granian
sed -i -e '/gunicorn/d' /requirements.txt && \ sed -i -e '/gunicorn/d' /requirements.txt && \
# We need 'social-auth-core[all]' in the Docker image. But if we put it in our own requirements-container.txt # We need 'social-auth-core[all]' in the Docker image. But if we put it in our own requirements-container.txt
# we have potential version conflicts and the build will fail. # we have potential version conflicts and the build will fail.
# That's why we just replace it in the original requirements.txt. # That's why we just replace it in the original requirements.txt.
sed -i -e 's/social-auth-core/social-auth-core\[all\]/g' /requirements.txt && \ sed -i -e 's/social-auth-core/social-auth-core\[all\]/g' /requirements.txt && \
/opt/netbox/venv/bin/pip install \ # The same is true for 'django-storages'
sed -i -e 's/django-storages/django-storages\[azure,boto3,dropbox,google,libcloud,sftp\]/g' /requirements.txt && \
/usr/local/bin/uv pip install \
-r /requirements.txt \ -r /requirements.txt \
-r /requirements-container.txt -r /requirements-container.txt
@ -64,44 +62,39 @@ RUN export DEBIAN_FRONTEND=noninteractive \
openssl \ openssl \
python3 \ python3 \
tini \ tini \
&& curl --silent --output /usr/share/keyrings/nginx-keyring.gpg \
https://unit.nginx.org/keys/nginx-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ noble unit" \
> /etc/apt/sources.list.d/unit.list \
&& apt-get update -qq \
&& apt-get install \
--yes -qq --no-install-recommends \
unit=1.34.0-1~noble \
unit-python3.12=1.34.0-1~noble \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Copy the modified 'requirements*.txt' files, to have the files actually used during installation
COPY --from=builder /requirements.txt /requirements-container.txt /opt/netbox/
COPY --from=builder /usr/local/bin/uv /usr/local/bin/
COPY --from=builder /opt/netbox/venv /opt/netbox/venv COPY --from=builder /opt/netbox/venv /opt/netbox/venv
ARG NETBOX_PATH ARG NETBOX_PATH
COPY ${NETBOX_PATH} /opt/netbox COPY ${NETBOX_PATH} /opt/netbox
# Copy the modified 'requirements*.txt' files, to have the files actually used during installation
COPY --from=builder /requirements.txt /requirements-container.txt /opt/netbox/
COPY docker/configuration.docker.py /opt/netbox/netbox/netbox/configuration.py COPY docker/configuration.docker.py /opt/netbox/netbox/netbox/configuration.py
COPY docker/ldap_config.docker.py /opt/netbox/netbox/netbox/ldap_config.py COPY docker/ldap_config.docker.py /opt/netbox/netbox/netbox/ldap_config.py
COPY docker/docker-entrypoint.sh /opt/netbox/docker-entrypoint.sh COPY docker/docker-entrypoint.sh /opt/netbox/docker-entrypoint.sh
COPY docker/housekeeping.sh /opt/netbox/housekeeping.sh
COPY docker/launch-netbox.sh /opt/netbox/launch-netbox.sh COPY docker/launch-netbox.sh /opt/netbox/launch-netbox.sh
COPY docker/super_user.py /opt/netbox/super_user.py
COPY configuration/ /etc/netbox/config/ COPY configuration/ /etc/netbox/config/
COPY docker/nginx-unit.json /etc/unit/ COPY docker/granian.py /opt/netbox/netbox/netbox/granian.py
COPY VERSION /opt/netbox/VERSION
WORKDIR /opt/netbox/netbox WORKDIR /opt/netbox/netbox
# Must set permissions for '/opt/netbox/netbox/media' directory # Must set permissions for '/opt/netbox/netbox/media' directory
# to g+w so that pictures can be uploaded to netbox. # to g+w so that pictures can be uploaded to netbox.
RUN mkdir -p static /opt/unit/state/ /opt/unit/tmp/ \ RUN useradd --home-dir /opt/netbox/ --no-create-home --no-user-group --system --shell /bin/false --uid 999 --gid 0 netbox \
&& chown -R unit:root /opt/unit/ media reports scripts \ && mkdir -p static media local \
&& chmod -R g+w /opt/unit/ media reports scripts \ && chown -R netbox:root media reports scripts \
&& cd /opt/netbox/ && SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python -m mkdocs build \ && chmod -R g+w media reports scripts \
--config-file /opt/netbox/mkdocs.yml --site-dir /opt/netbox/netbox/project-static/docs/ \ && cd /opt/netbox/ && SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python -m mkdocs build \
&& SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py collectstatic --no-input --config-file /opt/netbox/mkdocs.yml --site-dir /opt/netbox/netbox/project-static/docs/ \
&& DEBUG="true" SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py collectstatic --no-input \
&& echo "build: Docker-$(cat /opt/netbox/VERSION)" > /opt/netbox/netbox/local/release.yaml
ENV LANG=C.utf8 PATH=/opt/netbox/venv/bin:$PATH ENV LANG=C.utf8 PATH=/opt/netbox/venv/bin:$PATH VIRTUAL_ENV=/opt/netbox/venv UV_NO_CACHE=1
ENTRYPOINT [ "/usr/bin/tini", "--" ] ENTRYPOINT [ "/usr/bin/tini", "--" ]
CMD [ "/opt/netbox/docker-entrypoint.sh", "/opt/netbox/launch-netbox.sh" ] CMD [ "/opt/netbox/docker-entrypoint.sh", "/opt/netbox/launch-netbox.sh" ]

19
MAINTAINERS.md Normal file
View File

@ -0,0 +1,19 @@
# Maintainers of _NetBox Docker_
This file lists all currently recognized maintainers of the _NetBox Docker_ project in alphabetical order:
- @cimnine
- @tobiasge
## Stepping Down
Every maintainer is a volunteer and may step down as maintainer at any time without providing any reason.
To make this explicit, the maintainer is asked to update this file.
The last maintainer stepping down is asked to archive the project on GitHub to indicate that the project is no longer maintained.
## Signing up
Everyone is welcome to sign up as maintainer by creating a PR and add their own username to the list.
The current maintainers shall discuss the application.
They may turn down an application if they don't feel confident that the new maintainer is a positive addition.

71
PRINCIPALS.md Normal file
View File

@ -0,0 +1,71 @@
# Development, Maintenance and Community Principals for _NetBox Docker_
These principals shall guide the development and the maintenance of _NetBox Docker_.
## Basic principals
This project is maintained on voluntary basis.
Everyone is asked to respect that.
This means, that …
- … sometimes features are not implemented as fast as one might like -- or not at all.
- … sometimes nobody is looking at bugs, or they are not fixed as fast as one might like -- or not at all.
- … sometimes PRs are not reviewed for an extended period.
Everyone is welcome to provide improvements and bugfixes to the benefit of everyone else.
## Development Principals
The goal of the _NetBox Docker_ project is to provide a container to run the basic NetBox project.
The container should feel like a native container -- as if it were provided by NetBox itself:
- Configuration via environment variables where feasible.
- Except: Whenever a complex type such as a `dict` is required as value of a configuration setting,
then it shall not be provided through an environment variable.
- Configuration of secrets via secret files.
- Log output to standard out (STDOUT/`&1`) / standard error (STDERR/`&2`).
- Volumes for data and cache directories.
- Otherwise, no mounts shall be necessary.
- Runs a non-root user by default.
- One process / role for each instance.
The container generally does not provide more features than the basic NetBox project itself provides.
It may provide additional Python dependencies than the upstream project,
so that all configurable features of NetBox can be used in the container without further modification.
The container may provide helpers, so that it feels and behaves like a native container.
The container does not bundle any community plugins.
## Maintenance Principals
The main goals of maintaining _NetBox Docker_ are:
- Keeping the project at a high quality level.
- Keeping the maintenance effort minimal.
- Coordinating development efforts.
The following guidelines help us to achieve these goals:
- As many maintenance tasks as possible shall be automated or scripted.
- All manual tasks must be documented.
- All changes are reviewed by at least one maintainer.
- Changes of maintainers are reviewed by at least one other maintainer.
(Except if there's only one maintainer left.)
- The infrastructure beyond what GitHub provides shall be kept to a minimum.
- On request, every maintainer shall get access to infrastructure that is beyond GitHub
(at the time of writing that's _Docker Hub_ and _Quay_ in particular).
## Community Principals
This project is developed by the NetBox community for the NetBox community.
We welcome contributions, as long as they are in line with the principals above.
The maintainers of NetBox Docker are not the support team.
The community is expected to help each other out.
Always remember:
Behind every screen (or screen-reader) on the other end is a fellow human.
Be nice and respectful, thankful for help,
and value ideas and contributions,
even when they don't fit the goals.

View File

@ -8,11 +8,16 @@
[![GitHub license](https://img.shields.io/github/license/netbox-community/netbox-docker)][netbox-docker-license] [![GitHub license](https://img.shields.io/github/license/netbox-community/netbox-docker)][netbox-docker-license]
[The GitHub repository][netbox-docker-github] houses the components needed to build NetBox as a container. [The GitHub repository][netbox-docker-github] houses the components needed to build NetBox as a container.
Images are built regularly using the code in that repository and are pushed to [Docker Hub][netbox-dockerhub], [Quay.io][netbox-quayio] and [GitHub Container Registry][netbox-ghcr]. Images are built regularly using the code in that repository
and are pushed to [Docker Hub][netbox-dockerhub],
[Quay.io][netbox-quayio] and [GitHub Container Registry][netbox-ghcr].
_NetBox Docker_ is a project developed and maintained by the _NetBox_ community.
Do you have any questions? Do you have any questions?
Before opening an issue on Github, Before opening an issue on GitHub,
please join [our Slack][netbox-docker-slack] and ask for help in the [`#netbox-docker`][netbox-docker-slack-channel] channel. please join [our Slack][netbox-docker-slack]
and ask for help in the [`#netbox-docker`][netbox-docker-slack-channel] channel,
or start a new [GitHub Discussion][github-discussions].
[github-stargazers]: https://github.com/netbox-community/netbox-docker/stargazers [github-stargazers]: https://github.com/netbox-community/netbox-docker/stargazers
[github-release]: https://github.com/netbox-community/netbox-docker/releases [github-release]: https://github.com/netbox-community/netbox-docker/releases
@ -24,6 +29,7 @@ please join [our Slack][netbox-docker-slack] and ask for help in the [`#netbox-d
[netbox-docker-slack-channel]: https://netdev-community.slack.com/archives/C01P0GEVBU7 [netbox-docker-slack-channel]: https://netdev-community.slack.com/archives/C01P0GEVBU7
[netbox-slack-channel]: https://netdev-community.slack.com/archives/C01P0FRSXRV [netbox-slack-channel]: https://netdev-community.slack.com/archives/C01P0FRSXRV
[netbox-docker-license]: https://github.com/netbox-community/netbox-docker/blob/release/LICENSE [netbox-docker-license]: https://github.com/netbox-community/netbox-docker/blob/release/LICENSE
[github-discussions]: https://github.com/netbox-community/netbox-docker/discussions
## Quickstart ## Quickstart
@ -33,12 +39,9 @@ There is a more complete [_Getting Started_ guide on our wiki][wiki-getting-star
```bash ```bash
git clone -b release https://github.com/netbox-community/netbox-docker.git git clone -b release https://github.com/netbox-community/netbox-docker.git
cd netbox-docker cd netbox-docker
tee docker-compose.override.yml <<EOF # Copy the example override file
services: cp docker-compose.override.yml.example docker-compose.override.yml
netbox: # Read and edit the file to your liking
ports:
- 8000:8080
EOF
docker compose pull docker compose pull
docker compose up docker compose up
``` ```
@ -53,7 +56,8 @@ To create the first admin user run this command:
docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser
``` ```
If you need to restart Netbox from an empty database often, you can also set the `SUPERUSER_*` variables in your `docker-compose.override.yml` as shown in the example. If you need to restart Netbox from an empty database often,
you can also set the `SUPERUSER_*` variables in your `docker-compose.override.yml`.
[wiki-getting-started]: https://github.com/netbox-community/netbox-docker/wiki/Getting-Started [wiki-getting-started]: https://github.com/netbox-community/netbox-docker/wiki/Getting-Started
@ -63,37 +67,34 @@ New container images are built and published automatically every ~24h.
> We recommend to use either the `vX.Y.Z-a.b.c` tags or the `vX.Y-a.b.c` tags in production! > We recommend to use either the `vX.Y.Z-a.b.c` tags or the `vX.Y-a.b.c` tags in production!
* `vX.Y.Z-a.b.c`, `vX.Y-a.b.c`: - `vX.Y.Z-a.b.c`, `vX.Y-a.b.c`:
These are release builds containing _NetBox version_ `vX.Y.Z`. These are release builds containing _NetBox version_ `vX.Y.Z`.
They contain the support files of _NetBox Docker version_ `a.b.c`. They contain the support files of _NetBox Docker version_ `a.b.c`.
You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility. You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility.
These images are automatically built from [the corresponding releases of NetBox][netbox-releases]. These images are automatically built from [the corresponding releases of NetBox][netbox-releases].
* `latest-a.b.c`: - `latest-a.b.c`:
These are release builds, containing the latest stable version of NetBox. These are release builds, containing the latest stable version of NetBox.
They contain the support files of _NetBox Docker version_ `a.b.c`. They contain the support files of _NetBox Docker version_ `a.b.c`.
You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility. You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility.
These images are automatically built from [the `master` branch of NetBox][netbox-master]. - `snapshot-a.b.c`:
* `snapshot-a.b.c`:
These are prerelease builds. These are prerelease builds.
They contain the support files of _NetBox Docker version_ `a.b.c`. They contain the support files of _NetBox Docker version_ `a.b.c`.
You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility. You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility.
These images are automatically built from the [`develop` branch of NetBox][netbox-develop]. These images are automatically built from the [`main` branch of NetBox][netbox-main].
For each of the above tag, there is an extra tag: For each of the above tag, there is an extra tag:
* `vX.Y.Z`, `vX.Y`: - `vX.Y.Z`, `vX.Y`:
This is the same version as `vX.Y.Z-a.b.c` (or `vX.Y-a.b.c`, respectively). This is the same version as `vX.Y.Z-a.b.c` (or `vX.Y-a.b.c`, respectively).
It always points to the latest version of _NetBox Docker_. - `latest`
* `latest`
This is the same version as `latest-a.b.c`. This is the same version as `latest-a.b.c`.
It always points to the latest version of _NetBox Docker_. It always points to the latest version of _NetBox Docker_.
* `snapshot` - `snapshot`
This is the same version as `snapshot-a.b.c`. This is the same version as `snapshot-a.b.c`.
It always points to the latest version of _NetBox Docker_. It always points to the latest version of _NetBox Docker_.
[netbox-releases]: https://github.com/netbox-community/netbox/releases [netbox-releases]: https://github.com/netbox-community/netbox/releases
[netbox-master]: https://github.com/netbox-community/netbox/tree/master [netbox-main]: https://github.com/netbox-community/netbox/tree/main
[netbox-develop]: https://github.com/netbox-community/netbox/tree/develop
## Documentation ## Documentation
@ -109,7 +110,7 @@ Feel free to correct errors, update outdated information or provide additional g
Feel free to ask questions in our [GitHub Community][netbox-community] Feel free to ask questions in our [GitHub Community][netbox-community]
or [join our Slack][netbox-docker-slack] and ask [in our channel `#netbox-docker`][netbox-docker-slack-channel], or [join our Slack][netbox-docker-slack] and ask [in our channel `#netbox-docker`][netbox-docker-slack-channel],
which is free to use and where there are almost always people online that can help you in the Slack channel. which is free to use and where there are almost always people online that can help you.
If you need help with using NetBox or developing for it or against it's API If you need help with using NetBox or developing for it or against it's API
you may find [the `#netbox` channel][netbox-slack-channel] on the same Slack instance very helpful. you may find [the `#netbox` channel][netbox-slack-channel] on the same Slack instance very helpful.
@ -120,16 +121,16 @@ you may find [the `#netbox` channel][netbox-slack-channel] on the same Slack ins
This project relies only on _Docker_ and _docker-compose_ meeting these requirements: This project relies only on _Docker_ and _docker-compose_ meeting these requirements:
* The _Docker version_ must be at least `20.10.10`. - The _Docker version_ must be at least `20.10.10`.
* The _containerd version_ must be at least `1.5.6`. - The _containerd version_ must be at least `1.5.6`.
* The _docker-compose version_ must be at least `1.28.0`. - The _docker-compose version_ must be at least `1.28.0`.
To check the version installed on your system run `docker --version` and `docker compose version`. To check the version installed on your system run `docker --version` and `docker compose version`.
## Updating ## Updating
Please read [the release notes][releases] carefully when updating to a new image version. Please read [the release notes][releases] carefully when updating to a new image version.
Note that the version of the NetBox Docker container image must stay in sync with the code. Note that the version of the NetBox Docker container image must stay in sync with the version of the Git repository.
If you update for the first time, be sure [to follow our _How To Update NetBox Docker_ guide in the wiki][netbox-docker-wiki-updating]. If you update for the first time, be sure [to follow our _How To Update NetBox Docker_ guide in the wiki][netbox-docker-wiki-updating].
@ -138,7 +139,8 @@ If you update for the first time, be sure [to follow our _How To Update NetBox D
## Rebuilding the Image ## Rebuilding the Image
`./build.sh` can be used to rebuild the container image. See `./build.sh --help` for more information. `./build.sh` can be used to rebuild the container image.
See `./build.sh --help` for more information or `./build-latest.sh` for an example.
For more details on custom builds [consult our wiki][netbox-docker-wiki-build]. For more details on custom builds [consult our wiki][netbox-docker-wiki-build].
@ -147,13 +149,15 @@ For more details on custom builds [consult our wiki][netbox-docker-wiki-build].
## Tests ## Tests
We have a test script. We have a test script.
It runs NetBox's own unit tests and ensures that all initializers work: It runs NetBox's own unit tests and ensures that NetBox starts:
```bash ```bash
IMAGE=netboxcommunity/netbox:latest ./test.sh IMAGE=docker.io/netboxcommunity/netbox:latest ./test.sh
``` ```
## Support ## Support
This repository is currently maintained by the community. This repository is currently maintained by the community.
The community is expected to help each other.
Please consider sponsoring the maintainers of this project. Please consider sponsoring the maintainers of this project.

View File

@ -1 +1 @@
3.1.0 4.0.0

5
actionlint.yml Normal file
View File

@ -0,0 +1,5 @@
---
paths:
.github/workflows/**/*.{yml,yaml}:
ignore:
- ".*ubuntu-24.04-arm.*"

View File

@ -62,7 +62,7 @@ DOCKERFILE The name of Dockerfile to use.
DOCKER_FROM The base image to use. DOCKER_FROM The base image to use.
${_GREEN}Default:${_CLEAR} 'ubuntu:24.04' ${_GREEN}Default:${_CLEAR} 'ubuntu:24.04'
BUILDX_PLATFORMS BUILDX_PLATFORM
Specifies the platform(s) to build the image for. Specifies the platform(s) to build the image for.
${_CYAN}Example:${_CLEAR} 'linux/amd64,linux/arm64' ${_CYAN}Example:${_CLEAR} 'linux/amd64,linux/arm64'
${_GREEN}Default:${_CLEAR} 'linux/amd64' ${_GREEN}Default:${_CLEAR} 'linux/amd64'
@ -223,7 +223,7 @@ fi
### ###
# Variables for labelling the docker image # Variables for labelling the docker image
### ###
BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M+00:00')" BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%S+00:00')"
if [ -d ".git" ] && [ -z "${SKIP_GIT}" ]; then if [ -d ".git" ] && [ -z "${SKIP_GIT}" ]; then
GIT_REF="$(git rev-parse HEAD)" GIT_REF="$(git rev-parse HEAD)"

View File

@ -64,19 +64,21 @@ if '*' not in ALLOWED_HOSTS and 'localhost' not in ALLOWED_HOSTS:
# PostgreSQL database configuration. See the Django documentation for a complete list of available parameters: # PostgreSQL database configuration. See the Django documentation for a complete list of available parameters:
# https://docs.djangoproject.com/en/stable/ref/settings/#databases # https://docs.djangoproject.com/en/stable/ref/settings/#databases
DATABASE = { DATABASES = {
'NAME': environ.get('DB_NAME', 'netbox'), # Database name 'default': {
'USER': environ.get('DB_USER', ''), # PostgreSQL username 'NAME': environ.get('DB_NAME', 'netbox'), # Database name
'PASSWORD': _read_secret('db_password', environ.get('DB_PASSWORD', '')), 'USER': environ.get('DB_USER', ''), # PostgreSQL username
# PostgreSQL password 'PASSWORD': _read_secret('db_password', environ.get('DB_PASSWORD', '')),
'HOST': environ.get('DB_HOST', 'localhost'), # Database server # PostgreSQL password
'PORT': environ.get('DB_PORT', ''), # Database port (leave blank for default) 'HOST': environ.get('DB_HOST', 'localhost'), # Database server
'OPTIONS': {'sslmode': environ.get('DB_SSLMODE', 'prefer')}, 'PORT': environ.get('DB_PORT', ''), # Database port (leave blank for default)
# Database connection SSLMODE 'OPTIONS': {'sslmode': environ.get('DB_SSLMODE', 'prefer')},
'CONN_MAX_AGE': _environ_get_and_map('DB_CONN_MAX_AGE', '300', _AS_INT), # Database connection SSLMODE
# Max database connection age 'CONN_MAX_AGE': _environ_get_and_map('DB_CONN_MAX_AGE', '300', _AS_INT),
'DISABLE_SERVER_SIDE_CURSORS': _environ_get_and_map('DB_DISABLE_SERVER_SIDE_CURSORS', 'False', _AS_BOOL), # Max database connection age
# Disable the use of server-side cursors transaction pooling 'DISABLE_SERVER_SIDE_CURSORS': _environ_get_and_map('DB_DISABLE_SERVER_SIDE_CURSORS', 'False', _AS_BOOL),
# Disable the use of server-side cursors transaction pooling
}
} }
# Redis database settings. Redis is used for caching and for queuing background tasks such as webhook events. A separate # Redis database settings. Redis is used for caching and for queuing background tasks such as webhook events. A separate
@ -114,6 +116,11 @@ REDIS = {
# https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-SECRET_KEY # https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-SECRET_KEY
SECRET_KEY = _read_secret('secret_key', environ.get('SECRET_KEY', '')) SECRET_KEY = _read_secret('secret_key', environ.get('SECRET_KEY', ''))
API_TOKEN_PEPPERS = {}
if api_token_pepper := _read_secret('api_token_pepper_1', environ.get('API_TOKEN_PEPPER_1', '')):
API_TOKEN_PEPPERS.update({1: api_token_pepper})
######################### #########################
# # # #
@ -303,6 +310,12 @@ REMOTE_AUTH_SUPERUSER_GROUPS = _environ_get_and_map('REMOTE_AUTH_SUPERUSER_GROUP
REMOTE_AUTH_SUPERUSERS = _environ_get_and_map('REMOTE_AUTH_SUPERUSERS', '', _AS_LIST) REMOTE_AUTH_SUPERUSERS = _environ_get_and_map('REMOTE_AUTH_SUPERUSERS', '', _AS_LIST)
REMOTE_AUTH_STAFF_GROUPS = _environ_get_and_map('REMOTE_AUTH_STAFF_GROUPS', '', _AS_LIST) REMOTE_AUTH_STAFF_GROUPS = _environ_get_and_map('REMOTE_AUTH_STAFF_GROUPS', '', _AS_LIST)
REMOTE_AUTH_STAFF_USERS = _environ_get_and_map('REMOTE_AUTH_STAFF_USERS', '', _AS_LIST) REMOTE_AUTH_STAFF_USERS = _environ_get_and_map('REMOTE_AUTH_STAFF_USERS', '', _AS_LIST)
# SSO Configuration
SOCIAL_AUTH_OKTA_OPENIDCONNECT_KEY = environ.get('SOCIAL_AUTH_OKTA_OPENIDCONNECT_KEY')
SOCIAL_AUTH_OKTA_OPENIDCONNECT_SECRET = _read_secret('okta_openidconnect_secret', environ.get('SOCIAL_AUTH_OKTA_OPENIDCONNECT_SECRET', ''))
SOCIAL_AUTH_OKTA_OPENIDCONNECT_API_URL = environ.get('SOCIAL_AUTH_OKTA_OPENIDCONNECT_API_URL')
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = environ.get('SOCIAL_AUTH_GOOGLE_OAUTH2_KEY')
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = _read_secret('google_oauth2_secret', environ.get('SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET', ''))
# This repository is used to check whether there is a new release of NetBox available. Set to None to disable the # This repository is used to check whether there is a new release of NetBox available. Set to None to disable the
# version check or use the URL below to check for release in the official NetBox repository. # version check or use the URL below to check for release in the official NetBox repository.
@ -348,3 +361,5 @@ SESSION_FILE_PATH = environ.get('SESSION_FILE_PATH', environ.get('SESSIONS_ROOT'
# Time zone (default: UTC) # Time zone (default: UTC)
TIME_ZONE = environ.get('TIME_ZONE', 'UTC') TIME_ZONE = environ.get('TIME_ZONE', 'UTC')
# If true disables miscellaneous functionality which depends on access to the Internet.
ISOLATED_DEPLOYMENT = _environ_get_and_map('ISOLATED_DEPLOYMENT', 'False', _AS_BOOL)

View File

@ -33,13 +33,20 @@
## By default uploaded media is stored on the local filesystem. Using Django-storages is also supported. Provide the ## By default uploaded media is stored on the local filesystem. Using Django-storages is also supported. Provide the
## class path of the storage driver in STORAGE_BACKEND and any configuration options in STORAGE_CONFIG. For example: ## class path of the storage driver and any configuration options in STORAGES. For example:
# STORAGE_BACKEND = 'storages.backends.s3boto3.S3Boto3Storage' # STORAGES = {
# STORAGE_CONFIG = { # 'default': {
# 'AWS_ACCESS_KEY_ID': 'Key ID', # 'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
# 'AWS_SECRET_ACCESS_KEY': 'Secret', # 'OPTIONS': {
# 'AWS_STORAGE_BUCKET_NAME': 'netbox', # 'access_key': 'Key ID',
# 'AWS_S3_REGION_NAME': 'eu-west-1', # 'secret_key': 'Secret',
# 'bucket_name': 'netbox',
# 'region_name': 'us-west-1',
# }
# },
# 'staticfiles': {
# 'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage',
# }
# } # }

View File

@ -109,3 +109,6 @@ AUTH_LDAP_USER_ATTR_MAP = {
"last_name": environ.get('AUTH_LDAP_ATTR_LASTNAME', 'sn'), "last_name": environ.get('AUTH_LDAP_ATTR_LASTNAME', 'sn'),
"email": environ.get('AUTH_LDAP_ATTR_MAIL', 'mail') "email": environ.get('AUTH_LDAP_ATTR_MAIL', 'mail')
} }
# Update user object with the latest values from the LDAP directory every time the user logs in.
AUTH_LDAP_ALWAYS_UPDATE_USER = environ.get('AUTH_LDAP_ALWAYS_UPDATE_USER', 'True').lower() == 'true'

View File

@ -2,9 +2,6 @@ services:
netbox: netbox:
ports: ports:
- "8000:8080" - "8000:8080"
# If you want the Nginx unit status page visible from the
# outside of the container add the following port mapping:
# - "8001:8081"
# healthcheck: # healthcheck:
# Time for which the health check can fail after the container is started. # Time for which the health check can fail after the container is started.
# This depends mostly on the performance of your database. On the first start, # This depends mostly on the performance of your database. On the first start,
@ -19,4 +16,18 @@ services:
# SUPERUSER_EMAIL: "" # SUPERUSER_EMAIL: ""
# SUPERUSER_NAME: "" # SUPERUSER_NAME: ""
# SUPERUSER_PASSWORD: "" # SUPERUSER_PASSWORD: ""
# SSO Configuration
# SOCIAL_AUTH_OKTA_OPENIDCONNECT_KEY: "your_okta_client_id"
# SOCIAL_AUTH_OKTA_OPENIDCONNECT_API_URL: "https://your-domain.okta.com"
# SOCIAL_AUTH_GOOGLE_OAUTH2_KEY: "your_google_client_id"
# secrets:
# - okta_openidconnect_secret
# - google_oauth2_secret
# Uncomment to use Docker secrets for SSO credentials
# secrets:
# okta_openidconnect_secret:
# file: ./secrets/okta_secret.txt
# google_oauth2_secret:
# file: ./secrets/google_secret.txt

View File

@ -9,7 +9,7 @@ services:
redis-cache: redis-cache:
condition: service_healthy condition: service_healthy
env_file: env/netbox.env env_file: env/netbox.env
user: "unit:root" user: "netbox:root"
volumes: volumes:
- ./test-configuration/test_config.py:/etc/netbox/config/test_config.py:z,ro - ./test-configuration/test_config.py:/etc/netbox/config/test_config.py:z,ro
healthcheck: healthcheck:
@ -28,18 +28,9 @@ services:
start_period: 40s start_period: 40s
timeout: 3s timeout: 3s
interval: 15s interval: 15s
netbox-housekeeping:
<<: *netbox
command:
- /opt/netbox/housekeeping.sh
healthcheck:
test: ps -aux | grep -v grep | grep -q housekeeping || exit 1
start_period: 40s
timeout: 3s
interval: 15s
postgres: postgres:
image: docker.io/postgres:17-alpine image: docker.io/postgres:18-alpine
env_file: env/postgres.env env_file: env/postgres.env
healthcheck: healthcheck:
test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER ## $$ because of docker-compose test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER ## $$ because of docker-compose
@ -49,7 +40,7 @@ services:
retries: 5 retries: 5
redis: &redis redis: &redis
image: docker.io/valkey/valkey:8.0-alpine image: docker.io/valkey/valkey:9.0-alpine
command: command:
- sh - sh
- -c # this is to evaluate the $REDIS_PASSWORD from the env - -c # this is to evaluate the $REDIS_PASSWORD from the env

View File

@ -1,12 +1,12 @@
services: services:
netbox: &netbox netbox: &netbox
image: docker.io/netboxcommunity/netbox:${VERSION-v4.2-3.1.0} image: docker.io/netboxcommunity/netbox:${VERSION-v4.5-4.0.0}
depends_on: depends_on:
- postgres - postgres
- redis - redis
- redis-cache - redis-cache
env_file: env/netbox.env env_file: env/netbox.env
user: "unit:root" user: "netbox:root"
healthcheck: healthcheck:
test: curl -f http://localhost:8080/login/ || exit 1 test: curl -f http://localhost:8080/login/ || exit 1
start_period: 90s start_period: 90s
@ -31,22 +31,10 @@ services:
start_period: 20s start_period: 20s
timeout: 3s timeout: 3s
interval: 15s interval: 15s
netbox-housekeeping:
<<: *netbox
depends_on:
netbox:
condition: service_healthy
command:
- /opt/netbox/housekeeping.sh
healthcheck:
test: ps -aux | grep -v grep | grep -q housekeeping || exit 1
start_period: 20s
timeout: 3s
interval: 15s
# postgres # postgres
postgres: postgres:
image: docker.io/postgres:17-alpine image: docker.io/postgres:18-alpine
healthcheck: healthcheck:
test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER
start_period: 20s start_period: 20s
@ -55,11 +43,11 @@ services:
retries: 5 retries: 5
env_file: env/postgres.env env_file: env/postgres.env
volumes: volumes:
- netbox-postgres-data:/var/lib/postgresql/data - netbox-postgres:/var/lib/postgresql
# redis # redis
redis: redis:
image: docker.io/valkey/valkey:8.0-alpine image: docker.io/valkey/valkey:9.0-alpine
command: command:
- sh - sh
- -c # this is to evaluate the $REDIS_PASSWORD from the env - -c # this is to evaluate the $REDIS_PASSWORD from the env
@ -74,7 +62,7 @@ services:
volumes: volumes:
- netbox-redis-data:/data - netbox-redis-data:/data
redis-cache: redis-cache:
image: docker.io/valkey/valkey:8.0-alpine image: docker.io/valkey/valkey:9.0-alpine
command: command:
- sh - sh
- -c # this is to evaluate the $REDIS_PASSWORD from the env - -c # this is to evaluate the $REDIS_PASSWORD from the env
@ -87,7 +75,7 @@ services:
volumes: volumes:
netbox-media-files: netbox-media-files:
driver: local driver: local
netbox-postgres-data: netbox-postgres:
driver: local driver: local
netbox-redis-cache-data: netbox-redis-cache-data:
driver: local driver: local

View File

@ -54,43 +54,10 @@ fi
if [ "$SKIP_SUPERUSER" == "true" ]; then if [ "$SKIP_SUPERUSER" == "true" ]; then
echo "↩️ Skip creating the superuser" echo "↩️ Skip creating the superuser"
else else
if [ -z ${SUPERUSER_NAME+x} ]; then ./manage.py shell --no-startup --no-imports --interface python \
SUPERUSER_NAME='admin' </opt/netbox/super_user.py
fi
if [ -z ${SUPERUSER_EMAIL+x} ]; then
SUPERUSER_EMAIL='admin@example.com'
fi
if [ -f "/run/secrets/superuser_password" ]; then
SUPERUSER_PASSWORD="$(</run/secrets/superuser_password)"
elif [ -z ${SUPERUSER_PASSWORD+x} ]; then
SUPERUSER_PASSWORD='admin'
fi
if [ -f "/run/secrets/superuser_api_token" ]; then
SUPERUSER_API_TOKEN="$(</run/secrets/superuser_api_token)"
elif [ -z ${SUPERUSER_API_TOKEN+x} ]; then
SUPERUSER_API_TOKEN='0123456789abcdef0123456789abcdef01234567'
fi
./manage.py shell --interface python <<END
from users.models import Token, User
if not User.objects.filter(username='${SUPERUSER_NAME}'):
u = User.objects.create_superuser('${SUPERUSER_NAME}', '${SUPERUSER_EMAIL}', '${SUPERUSER_PASSWORD}')
Token.objects.create(user=u, key='${SUPERUSER_API_TOKEN}')
END
echo "💡 Superuser Username: ${SUPERUSER_NAME}, E-Mail: ${SUPERUSER_EMAIL}"
fi fi
./manage.py shell --interface python <<END
from users.models import Token
try:
old_default_token = Token.objects.get(key="0123456789abcdef0123456789abcdef01234567")
if old_default_token:
print("⚠️ Warning: You have the old default admin API token in your database. This token is widely known; please remove it. Log in as your superuser and check API Tokens in your user menu.")
except Token.DoesNotExist:
pass
END
echo "✅ Initialisation is done." echo "✅ Initialisation is done."
# Launch whatever is passed by docker # Launch whatever is passed by docker

13
docker/granian.py Normal file
View File

@ -0,0 +1,13 @@
from granian.utils.proxies import wrap_wsgi_with_proxy_headers
from netbox.wsgi import application
application = wrap_wsgi_with_proxy_headers(
application,
trusted_hosts=[
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.0.0/16",
"fc00::/7",
"fe80::/10",
],
)

View File

@ -1,8 +0,0 @@
#!/bin/bash
SLEEP_SECONDS=${HOUSEKEEPING_INTERVAL:=86400}
echo "Interval set to ${SLEEP_SECONDS} seconds"
while true; do
date
/opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py housekeeping
sleep "${SLEEP_SECONDS}s"
done

View File

@ -1,57 +1,21 @@
#!/bin/bash #!/bin/bash
UNIT_CONFIG="${UNIT_CONFIG-/etc/unit/nginx-unit.json}" exec granian \
# Also used in "nginx-unit.json" --host "::" \
UNIT_SOCKET="/opt/unit/unit.sock" --port "8080" \
--interface "wsgi" \
load_configuration() { --no-ws \
MAX_WAIT=10 --workers "${GRANIAN_WORKERS:-4}" \
WAIT_COUNT=0 --respawn-failed-workers \
while [ ! -S $UNIT_SOCKET ]; do --backpressure "${GRANIAN_BACKPRESSURE:-${GRANIAN_WORKERS:-4}}" \
if [ $WAIT_COUNT -ge $MAX_WAIT ]; then --loop "uvloop" \
echo "⚠️ No control socket found; configuration will not be loaded." --log \
return 1 --log-level "info" \
fi --access-log \
--working-dir "/opt/netbox/netbox/" \
WAIT_COUNT=$((WAIT_COUNT + 1)) --static-path-route "/static" \
echo "⏳ Waiting for control socket to be created... (${WAIT_COUNT}/${MAX_WAIT})" --static-path-mount "/opt/netbox/netbox/static/" \
--static-path-dir-to-file index.html \
sleep 1 --pid-file "/tmp/granian.pid" \
done "${GRANIAN_EXTRA_ARGS[@]}" \
"netbox.granian:application"
# even when the control socket exists, it does not mean unit has finished initialisation
# this curl call will get a reply once unit is fully launched
curl --silent --output /dev/null --request GET --unix-socket $UNIT_SOCKET http://localhost/
echo "⚙️ Applying configuration from $UNIT_CONFIG"
RESP_CODE=$(
curl \
--silent \
--output /dev/null \
--write-out '%{http_code}' \
--request PUT \
--data-binary "@${UNIT_CONFIG}" \
--unix-socket $UNIT_SOCKET \
http://localhost/config
)
if [ "$RESP_CODE" != "200" ]; then
echo "⚠️ Could no load Unit configuration"
kill "$(cat /opt/unit/unit.pid)"
return 1
fi
echo "✅ Unit configuration loaded successfully"
}
load_configuration &
exec unitd \
--no-daemon \
--control unix:$UNIT_SOCKET \
--pid /opt/unit/unit.pid \
--log /dev/stdout \
--statedir /opt/unit/state/ \
--tmpdir /opt/unit/tmp/ \
--user unit \
--group root

View File

@ -1,61 +0,0 @@
{
"listeners": {
"*:8080": {
"pass": "routes/main",
"forwarded": {
"client_ip": "X-Forwarded-For",
"protocol": "X-Forwarded-Proto",
"source": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
}
},
"*:8081": {
"pass": "routes/status",
"forwarded": {
"client_ip": "X-Forwarded-For",
"protocol": "X-Forwarded-Proto",
"source": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
}
}
},
"routes": {
"main": [
{
"match": {
"uri": "/static/*"
},
"action": {
"share": "/opt/netbox/netbox${uri}"
}
},
{
"action": {
"pass": "applications/netbox"
}
}
],
"status": [
{
"match": {
"uri": "/status/*"
},
"action": {
"proxy": "http://unix:/opt/unit/unit.sock"
}
}
]
},
"applications": {
"netbox": {
"type": "python 3",
"path": "/opt/netbox/netbox/",
"module": "netbox.wsgi",
"home": "/opt/netbox/venv",
"processes": {
"max": 4,
"spare": 1,
"idle_timeout": 120
}
}
},
"access_log": "/dev/stdout"
}

36
docker/super_user.py Normal file
View File

@ -0,0 +1,36 @@
from os import environ
from django.conf import settings
from users.choices import TokenVersionChoices
from users.models import Token, User
# Read secret from file
def _read_secret(secret_name: str, default: str | None = None) -> str | None:
try:
f = open("/run/secrets/" + secret_name, "r", encoding="utf-8")
except EnvironmentError:
return default
else:
with f:
return f.readline().strip()
su_name = environ.get("SUPERUSER_NAME", "admin")
su_email = environ.get("SUPERUSER_EMAIL", "admin@example.com")
su_password = _read_secret("superuser_password", environ.get("SUPERUSER_PASSWORD", "admin"))
su_api_token = _read_secret(
"superuser_api_token",
environ.get("SUPERUSER_API_TOKEN", "0123456789abcdef0123456789abcdef01234567"),
)
if not User.objects.filter(username=su_name):
u = User.objects.create_superuser(su_name, su_email, su_password)
msg = ""
if not settings.API_TOKEN_PEPPERS:
print("⚠️ No API token will be created as API_TOKEN_PEPPERS is not set")
msg = f"💡 Superuser Username: {su_name}, E-Mail: {su_email}"
else:
t = Token.objects.create(user=u, token=su_api_token, version=TokenVersionChoices.V2)
msg = f"💡 Superuser Username: {su_name}, E-Mail: {su_email}, API Token: {t} (use with '{t.get_auth_header_prefix()}<Your token>')"
print(msg)

12
env/netbox.env vendored
View File

@ -1,3 +1,4 @@
API_TOKEN_PEPPER_1=Qy+F=OTeGskWQ(wTMgjc+NPPlz6YwFXY=KHIIg=wpYXT&e(6u8
CORS_ORIGIN_ALLOW_ALL=True CORS_ORIGIN_ALLOW_ALL=True
DB_HOST=postgres DB_HOST=postgres
DB_NAME=netbox DB_NAME=netbox
@ -14,8 +15,9 @@ EMAIL_USERNAME=netbox
# EMAIL_USE_SSL and EMAIL_USE_TLS are mutually exclusive, i.e. they can't both be `true`! # EMAIL_USE_SSL and EMAIL_USE_TLS are mutually exclusive, i.e. they can't both be `true`!
EMAIL_USE_SSL=false EMAIL_USE_SSL=false
EMAIL_USE_TLS=false EMAIL_USE_TLS=false
GRANIAN_BACKPRESSURE=4
GRANIAN_WORKERS=4
GRAPHQL_ENABLED=true GRAPHQL_ENABLED=true
HOUSEKEEPING_INTERVAL=86400
MEDIA_ROOT=/opt/netbox/netbox/media MEDIA_ROOT=/opt/netbox/netbox/media
METRICS_ENABLED=false METRICS_ENABLED=false
REDIS_CACHE_DATABASE=1 REDIS_CACHE_DATABASE=1
@ -31,4 +33,12 @@ REDIS_SSL=false
RELEASE_CHECK_URL=https://api.github.com/repos/netbox-community/netbox/releases RELEASE_CHECK_URL=https://api.github.com/repos/netbox-community/netbox/releases
SECRET_KEY='r(m)9nLGnz$(_q3N4z1k(EFsMCjjjzx08x9VhNVcfd%6RF#r!6DE@+V5Zk2X' SECRET_KEY='r(m)9nLGnz$(_q3N4z1k(EFsMCjjjzx08x9VhNVcfd%6RF#r!6DE@+V5Zk2X'
SKIP_SUPERUSER=true SKIP_SUPERUSER=true
# SSO Configuration (uncomment and configure as needed)
# OKTA OpenID Connect
# SOCIAL_AUTH_OKTA_OPENIDCONNECT_KEY=your_okta_client_id
# SOCIAL_AUTH_OKTA_OPENIDCONNECT_SECRET=your_okta_client_secret
# SOCIAL_AUTH_OKTA_OPENIDCONNECT_API_URL=https://your-domain.okta.com
# Google OAuth2
# SOCIAL_AUTH_GOOGLE_OAUTH2_KEY=your_google_client_id
# SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET=your_google_client_secret
WEBHOOKS_ENABLED=true WEBHOOKS_ENABLED=true

View File

@ -1,5 +1,7 @@
django-auth-ldap==5.1.0 django-auth-ldap==5.3.0
django-storages[azure,boto3,dropbox,google,libcloud,sftp]==1.14.4 dulwich==1.0.0
dulwich==0.22.7 granian[uvloop]==2.7.0
python3-saml==1.16.0 --no-binary lxml,xmlsec python3-saml==1.16.0
sentry-sdk[django]==2.19.2 --no-binary lxml
--no-binary xmlsec
sentry-sdk[django]==2.51.0

View File

@ -3,4 +3,14 @@ LOGGING = {
'disable_existing_loggers': True 'disable_existing_loggers': True
} }
PLUGINS = [
'netbox.tests.dummy_plugin',
]
ALLOW_TOKEN_RETRIEVAL = True
DEFAULT_PERMISSIONS = {} DEFAULT_PERMISSIONS = {}
API_TOKEN_PEPPERS = {
1: 'TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE',
}