From 439578434e47e7226a9d6108fcf079478ebba950 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Tue, 9 Sep 2025 10:39:24 +0200 Subject: [PATCH] Create Dockerfile --- .dockerignore | 35 ++++++++++++++++++++++++++++++++++ Dockerfile | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c0cdede --- /dev/null +++ b/.dockerignore @@ -0,0 +1,35 @@ +# Git +.git +.gitignore +README.md +LICENSE + +# Rust +server/target/ +**/*.rs.bk + +# Node.js +webui/node_modules/ +webui/dist/ +webui/.vite/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log +server/data/logs/ + +# Database (for development) +server/data/db/*.db +server/data/backups/ + +# Cache +.cache/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..512fdad --- /dev/null +++ b/Dockerfile @@ -0,0 +1,53 @@ +FROM node:20-alpine AS webui-builder + +WORKDIR /app/webui + +COPY webui/package.json webui/pnpm-lock.yaml ./ +RUN npm install -g pnpm && pnpm install --frozen-lockfile + +COPY webui/ . +RUN pnpm build + +FROM rust:1.89-alpine AS rust-builder + +RUN apk add --no-cache musl-dev sqlite-dev pkgconfig openssl-dev + +WORKDIR /app/server + +COPY server/Cargo.toml server/Cargo.lock ./ + +COPY server/src ./src +RUN cargo build --release + +FROM alpine:latest + +RUN apk add --no-cache sqlite + +RUN addgroup -g 1001 -S appgroup && \ + adduser -u 1001 -S appuser -G appgroup + +WORKDIR /app + +RUN mkdir -p data/db data/logs data/backups && \ + chown -R appuser:appgroup /app + +COPY --from=rust-builder /app/server/target/release/server ./server + +COPY --from=webui-builder /app/webui/dist ./dist + +RUN chown -R appuser:appgroup /app + +USER appuser + +EXPOSE 8379 + +ENV RUST_LOG=info + +VOLUME ["/app/data/db"] +VOLUME ["/app/data/logs"] +VOLUME ["/app/data/backups"] + +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:8379/ || exit 1 + +CMD ["./server"] \ No newline at end of file