🐳 appsmith

Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.

Docker Ready Ports: 80, 443 40,656 stars
1. Pull Image docker pull appsmithorg/appsmith:latest
2. 1-Click Launch Command docker run -d --name appsmith -p 80:80 --restart always appsmithorg/appsmith:latest
Dockerfile
ARG BASE
FROM ${BASE}

ARG APPSMITH_CLOUD_SERVICES_BASE_URL
ENV APPSMITH_CLOUD_SERVICES_BASE_URL=${APPSMITH_CLOUD_SERVICES_BASE_URL}

ARG APPSMITH_SEGMENT_CE_KEY
ENV APPSMITH_SEGMENT_CE_KEY=${APPSMITH_SEGMENT_CE_KEY}

ARG APPSMITH_BETTERBUGS_API_KEY
ENV APPSMITH_BETTERBUGS_API_KEY=${APPSMITH_BETTERBUGS_API_KEY}

ARG APPSMITH_PYLON_APP_ID
ENV APPSMITH_PYLON_APP_ID=${APPSMITH_PYLON_APP_ID}

COPY deploy/docker/fs /

RUN <<END
  if ! [ -f info.json ]; then
    echo "Missing info.json" >&2
    exit 1
  fi

  if ! [ -f server/mongo/server.jar ]; then
    echo "Missing MongoDB server.jar file. Are you using the build script?" >&2
    exit 1
  fi
END

# Add client UI - Application Layer
COPY ./app/client/build editor/

# Add RTS - Application Layer
COPY ./app/client/packages/rts/dist rts/

# Create the git-storage directory with group writeable permissions so non-root users can write to it.
RUN mkdir --mode 775 "/dev/shm/git-storage"

ENV PATH /opt/bin:/opt/java/bin:/opt/node/bin:$PATH

RUN <<END
  set -o errexit

  # Make all `*.sh` files executable, excluding `node_modules`.
  find . \( -name node_modules -prune \) -o \( -type f -name '*.sh' \) -exec chmod +x '{}' +

  # Ensure all custom command-scripts have executable permission
  chmod +x /opt/bin/* /watchtower-hooks/*.sh

  # Disable setuid/setgid bits for the files inside container.
  find / \( -path /proc -prune \) -o \( \( -perm -2000 -o -perm -4000 \) -exec chmod -s '{}' + \) || true

  mkdir -p /.mongodb/mongosh /appsmith-stacks
  chmod ugo+w /etc /appsmith-stacks
  chmod -R ugo+w /var/run /.mongodb /etc/ssl /usr/local/share
END

LABEL com.centurylinklabs.watchtower.lifecycle.pre-check=/watchtower-hooks/pre-check.sh
LABEL com.centurylinklabs.watchtower.lifecycle.pre-update=/watchtower-hooks/pre-update.sh

EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/opt/appsmith/entrypoint.sh" ]
HEALTHCHECK --interval=15s --timeout=15s --start-period=45s CMD "/opt/appsmith/healthcheck.sh"
CMD ["/usr/bin/supervisord", "-n"]