# # Copyright © 2016-2026 The Thingsboard Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # FROM ${docker.base.image} ENV PG_MAJOR=16 ENV DATA_FOLDER=/data ENV HTTP_BIND_PORT=9090 ENV DATABASE_TS_TYPE=cassandra ENV PGDATA=/data/db ENV CASSANDRA_DATA=/data/cassandra ENV SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver ENV SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard ENV SPRING_DATASOURCE_USERNAME=${pkg.user} ENV CASSANDRA_HOST=localhost ENV CASSANDRA_PORT=9042 ENV CASSANDRA_HOME=/opt/cassandra ENV PATH=$CASSANDRA_HOME/bin:$PATH ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin ENV PGLOG=/var/log/postgres ENV CASSANDRA_LOG=/var/log/cassandra # For SVG renderer Debian Trixie slim fonts should be installed explicitly RUN echo "Previously installed font libraries:" \ && (dpkg -l | grep -E 'font|dejavu|harfbuzz' || echo " (none)") \ && apt-get update \ && apt-get install -y --no-install-recommends \ libharfbuzz0b fontconfig fonts-dejavu-core \ && rm -rf /var/lib/apt/lists/* \ && echo "Current fonts libraries:" \ && (dpkg -l | grep -E 'font|dejavu|harfbuzz') \ && echo "Font config list:" \ && fc-list && test -n "$(fc-list)" \ && (fc-list | grep -i dejavu) \ && echo "Harfbuzz library test with ldconfig:" \ && (ldconfig -p | grep harfbuzz) COPY logback.xml ${pkg.name}.conf start-db.sh stop-db.sh start-tb.sh upgrade-tb.sh install-tb.sh ${pkg.name}.deb /tmp/ # Keep base image's customized conffiles (e.g. /etc/java-17-openjdk/security/java.security) # when apt upgrades openjdk-17-jre-headless transitively as cassandra's java11-runtime provider; # without this dpkg blocks on a non-interactive conffile prompt and the build fails. ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get install -y --no-install-recommends wget nmap procps gnupg2 \ && mkdir -p /etc/apt/keyrings \ && wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | gpg --dearmor -o /etc/apt/keyrings/postgresql.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ $(. /etc/os-release && echo -n $VERSION_CODENAME)-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list > /dev/null \ && wget -q https://downloads.apache.org/cassandra/KEYS -O- | gpg --dearmor -o /etc/apt/keyrings/cassandra.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/cassandra.gpg] https://debian.cassandra.apache.org 40x main" | tee /etc/apt/sources.list.d/cassandra.sources.list > /dev/null \ && apt-get update \ && apt-get install -y --no-install-recommends \ -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \ cassandra cassandra-tools postgresql-${PG_MAJOR} \ && rm -rf /var/lib/apt/lists/* \ && apt-get purge -y --auto-remove \ && sed -i.old '/ulimit/d' /etc/init.d/cassandra \ && chmod a+x /tmp/*.sh \ && mv /tmp/start-tb.sh /usr/bin \ && mv /tmp/upgrade-tb.sh /usr/bin \ && mv /tmp/install-tb.sh /usr/bin \ && mv /tmp/start-db.sh /usr/bin \ && mv /tmp/stop-db.sh /usr/bin \ && dpkg -i /tmp/${pkg.name}.deb \ && rm /tmp/${pkg.name}.deb \ && (systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :) \ && mv /tmp/logback.xml ${pkg.installFolder}/conf \ && mv /tmp/${pkg.name}.conf ${pkg.installFolder}/conf \ # postgres config && mkdir -p $PGLOG \ && chown -R ${pkg.user}:${pkg.user} $PGLOG \ && chown -R ${pkg.user}:${pkg.user} /var/log/postgresql \ && chown -R ${pkg.user}:${pkg.user} /var/run/postgresql \ # cassandra config && rm -rf /var/lib/cassandra \ && chmod a+w /var/lib \ && chown -R ${pkg.user}:${pkg.user} $CASSANDRA_LOG \ && mkdir -p $DATA_FOLDER \ && chown -R ${pkg.user}:${pkg.user} $DATA_FOLDER \ && chown -R ${pkg.user}:${pkg.user} /var/log/${pkg.name} \ && chmod 555 ${pkg.installFolder}/bin/${pkg.name}.jar USER ${pkg.user} EXPOSE 9090 EXPOSE 1883 EXPOSE 5683/udp EXPOSE 5685/udp EXPOSE 5686/udp VOLUME ["/data"] CMD ["start-tb.sh"]