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
This commit is contained in:
Sven Luethi authored and Sven Luthi committed 2026-07-20 12:26:51 +02:00
commit 136ee48052
10 files changed
+593

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
# ============================================================
# 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"]