mirror of
https://github.com/netbox-community/netbox-docker.git
synced 2025-12-10 13:52:38 +00:00
Netbox plugins can now be mounted into the container and will be loaded automatically from the mounted path. A configuration file to enabled the plugin in has to be mounted additionally. To install a plugin from outside the container you need to use the same Python version as is used in the container. At the moment that is Python 3.11. Assuming you are in the netbox-docker directory and using the default configuration, just run this command, to install the netbox-initializers plugin: pip install --target=plugins netbox-initializers
130 lines
5.1 KiB
Docker
130 lines
5.1 KiB
Docker
ARG FROM
|
|
FROM ${FROM} as builder
|
|
|
|
RUN export DEBIAN_FRONTEND=noninteractive \
|
|
&& apt-get update -qq \
|
|
&& apt-get upgrade \
|
|
--yes -qq --no-install-recommends \
|
|
&& apt-get install \
|
|
--yes -qq --no-install-recommends \
|
|
build-essential \
|
|
ca-certificates \
|
|
libldap-dev \
|
|
libpq-dev \
|
|
libsasl2-dev \
|
|
libssl-dev \
|
|
libxml2-dev \
|
|
libxmlsec1 \
|
|
libxmlsec1-dev \
|
|
libxmlsec1-openssl \
|
|
libxslt-dev \
|
|
pkg-config \
|
|
python3-dev \
|
|
python3-pip \
|
|
python3-venv \
|
|
&& python3 -m venv /opt/netbox/venv \
|
|
&& /opt/netbox/venv/bin/python3 -m pip install --upgrade \
|
|
pip \
|
|
setuptools \
|
|
wheel
|
|
|
|
ARG NETBOX_PATH
|
|
COPY ${NETBOX_PATH}/requirements.txt requirements-container.txt /
|
|
RUN \
|
|
# We compile 'psycopg' in the build process
|
|
sed -i -e '/psycopg/d' /requirements.txt && \
|
|
# Gunicorn is not needed because we use Nginx Unit
|
|
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 have potential version conflicts and the build will fail.
|
|
# That's why we just replace it in the original requirements.txt.
|
|
sed -i -e 's/social-auth-core\[openidconnect\]/social-auth-core\[all\]/g' /requirements.txt && \
|
|
/opt/netbox/venv/bin/pip install \
|
|
-r /requirements.txt \
|
|
-r /requirements-container.txt
|
|
|
|
###
|
|
# Main stage
|
|
###
|
|
|
|
ARG FROM
|
|
FROM ${FROM} as main
|
|
|
|
RUN export DEBIAN_FRONTEND=noninteractive \
|
|
&& apt-get update -qq \
|
|
&& apt-get upgrade \
|
|
--yes -qq --no-install-recommends \
|
|
&& apt-get install \
|
|
--yes -qq --no-install-recommends \
|
|
bzip2 \
|
|
ca-certificates \
|
|
curl \
|
|
libldap-common \
|
|
libpq5 \
|
|
libxmlsec1-openssl \
|
|
openssh-client \
|
|
openssl \
|
|
python3 \
|
|
python3-distutils \
|
|
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/ lunar unit" \
|
|
> /etc/apt/sources.list.d/unit.list \
|
|
&& apt-get update -qq \
|
|
&& apt-get install \
|
|
--yes -qq --no-install-recommends \
|
|
unit=1.30.0-1~lunar \
|
|
unit-python3.11=1.30.0-1~lunar \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --from=builder /opt/netbox/venv /opt/netbox/venv
|
|
|
|
ARG NETBOX_PATH
|
|
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/ldap_config.docker.py /opt/netbox/netbox/netbox/ldap_config.py
|
|
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 configuration/ /etc/netbox/config/
|
|
COPY docker/nginx-unit.json /etc/unit/
|
|
|
|
WORKDIR /opt/netbox/netbox
|
|
|
|
# Must set permissions for '/opt/netbox/netbox/media' directory
|
|
# to g+w so that pictures can be uploaded to netbox.
|
|
RUN mkdir -p static /opt/unit/state/ /opt/unit/tmp/ /opt/netbox/plugins \
|
|
&& chown -R unit:root /opt/unit/ media reports scripts \
|
|
&& chmod -R g+w /opt/unit/ media reports scripts \
|
|
# Add additional path to sys.path, to enable plugin installation without having to build a new Docker image
|
|
&& echo "/opt/netbox/plugins" > /opt/netbox/venv/lib/python3.11/site-packages/plugins.pth \
|
|
&& cd /opt/netbox/ && SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python -m mkdocs build \
|
|
--config-file /opt/netbox/mkdocs.yml --site-dir /opt/netbox/netbox/project-static/docs/ \
|
|
&& SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py collectstatic --no-input
|
|
|
|
ENV LANG=C.utf8 PATH=/opt/netbox/venv/bin:$PATH
|
|
ENTRYPOINT [ "/usr/bin/tini", "--" ]
|
|
|
|
CMD [ "/opt/netbox/docker-entrypoint.sh", "/opt/netbox/launch-netbox.sh" ]
|
|
|
|
LABEL netbox.original-tag="" \
|
|
netbox.git-branch="" \
|
|
netbox.git-ref="" \
|
|
netbox.git-url="" \
|
|
# See https://github.com/opencontainers/image-spec/blob/master/annotations.md#pre-defined-annotation-keys
|
|
org.opencontainers.image.created="" \
|
|
org.opencontainers.image.title="NetBox Docker" \
|
|
org.opencontainers.image.description="A container based distribution of NetBox, the free and open IPAM and DCIM solution." \
|
|
org.opencontainers.image.licenses="Apache-2.0" \
|
|
org.opencontainers.image.authors="The netbox-docker contributors." \
|
|
org.opencontainers.image.vendor="The netbox-docker contributors." \
|
|
org.opencontainers.image.url="https://github.com/netbox-community/netbox-docker" \
|
|
org.opencontainers.image.documentation="https://github.com/netbox-community/netbox-docker/wiki" \
|
|
org.opencontainers.image.source="https://github.com/netbox-community/netbox-docker.git" \
|
|
org.opencontainers.image.revision="" \
|
|
org.opencontainers.image.version=""
|