Files
Sven Luethi 136ee48052 new file: .env
new file:   Containerfile
new file:   README.md
new file:   compose.yml
new file:   configuration.py
new file:   entrypoint.sh
new file:   local_requirements.txt
new file:   named.conf
new file:   nginx.conf
new file:   rndc.key
2026-07-20 12:26:51 +02:00

100 lines
3.0 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# NetBox 4.5 – Python 3.12 / Alpine
# Custom validators → baked in via COPY
# Custom scripts → mounted as volume at runtime
# Plugins & extra deps → baked in via pip
# configuration.py → mounted as volume at runtime
# ============================================================
# ── Stage 1: build wheel cache ────────────────────────────────
ARG PYTHON_VERSION
FROM python:${PYTHON_VERSION}-alpine AS builder
ARG NETBOX_VERSION
LABEL org.opencontainers.image.version=$NETBOX_VERSION
RUN apk update && apk add --no-cache \
build-base \
cargo \
curl \
git \
libffi-dev \
openssl-dev \
postgresql-dev \
xmlsec-dev \
zlib-dev
WORKDIR /build
# Download NetBox source
RUN curl -fsSL \
"https://github.com/netbox-community/netbox/archive/refs/tags/v${NETBOX_VERSION}.tar.gz" \
| tar -xz --strip-components=1
# Install NetBox core requirements
RUN pip install --upgrade pip && \
pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt
# ── Install plugins & extra deps here ────────────────────────
COPY local_requirements.txt /build/local_requirements.txt
RUN pip wheel --no-cache-dir --wheel-dir /wheels -r /build/local_requirements.txt
# ── Stage 2: runtime image ────────────────────────────────────
FROM python:${PYTHON_VERSION}-alpine AS runtime
LABEL org.opencontainers.image.title="netbox" \
org.opencontainers.image.version="${NETBOX_VERSION}" \
org.opencontainers.image.description="NetBox network source of truth"
# Runtime OS deps only (no build tools)
RUN apk add --no-cache \
bash \
curl \
libffi \
libpq \
libxslt \
openssl \
xmlsec \
zlib && \
addgroup -S netbox && \
adduser -S -G netbox -h /opt/netbox netbox
WORKDIR /opt/netbox
# Copy NetBox source from builder
COPY --from=builder /build .
# Install all pre-built wheels (core + plugins)
COPY --from=builder /wheels /wheels
RUN pip install --no-cache-dir --no-index --find-links=/wheels /wheels/*.whl && \
rm -rf /wheels
# Create directories NetBox expects to own
RUN mkdir -p \
netbox/media \
netbox/reports \
netbox/scripts \
netbox/static && \
chown -R netbox:netbox /opt/netbox
# ── Volume mount points ───────────────────────────────────────
#
# /opt/netbox/netbox/netbox/configuration.py
# → your configuration.py
#
# /opt/netbox/netbox/media/
# → uploaded media (persist across restarts)
#
VOLUME ["/opt/netbox/netbox/media"]
VOLUME ["/opt/netbox/netbox/static"]
# Entrypoint script handles: collectstatic, migrate, then gunicorn/worker
COPY --chown=netbox:netbox ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
USER netbox
ENTRYPOINT ["/entrypoint.sh"]
CMD ["gunicorn"]