Files
MemRelay/deploy/memrelay/Dockerfile
T

123 lines
3.9 KiB
Docker

FROM node:22-bookworm-slim AS frontend-builder
ARG BUILD_HTTP_PROXY=""
ARG BUILD_HTTPS_PROXY=""
ARG BUILD_ALL_PROXY=""
ENV HTTP_PROXY=${BUILD_HTTP_PROXY} \
HTTPS_PROXY=${BUILD_HTTPS_PROXY} \
ALL_PROXY=${BUILD_ALL_PROXY} \
http_proxy=${BUILD_HTTP_PROXY} \
https_proxy=${BUILD_HTTPS_PROXY} \
all_proxy=${BUILD_ALL_PROXY}
WORKDIR /build/frontend
RUN npm install --global pnpm@10.28.0
COPY frontend/package.json frontend/pnpm-lock.yaml frontend/pnpm-workspace.yaml ./
RUN pnpm install --frozen-lockfile
COPY frontend/ ./
RUN pnpm build
FROM node:22-bookworm-slim AS bitwarden-builder
ARG BUILD_HTTP_PROXY=""
ARG BUILD_HTTPS_PROXY=""
ARG BUILD_ALL_PROXY=""
ENV HTTP_PROXY=${BUILD_HTTP_PROXY} \
HTTPS_PROXY=${BUILD_HTTPS_PROXY} \
ALL_PROXY=${BUILD_ALL_PROXY} \
http_proxy=${BUILD_HTTP_PROXY} \
https_proxy=${BUILD_HTTPS_PROXY} \
all_proxy=${BUILD_ALL_PROXY}
RUN npm install --global --omit=dev @bitwarden/cli@2026.7.0
FROM ghcr.io/astral-sh/uv:0.8.4-python3.12-bookworm-slim AS backend-builder
ARG BUILD_HTTP_PROXY=""
ARG BUILD_HTTPS_PROXY=""
ARG BUILD_ALL_PROXY=""
ENV UV_LINK_MODE=copy \
UV_PROJECT_ENVIRONMENT=/opt/venv \
HTTP_PROXY=${BUILD_HTTP_PROXY} \
HTTPS_PROXY=${BUILD_HTTPS_PROXY} \
ALL_PROXY=${BUILD_ALL_PROXY} \
http_proxy=${BUILD_HTTP_PROXY} \
https_proxy=${BUILD_HTTPS_PROXY} \
all_proxy=${BUILD_ALL_PROXY}
WORKDIR /build/backend
COPY backend/pyproject.toml backend/uv.lock backend/README.md ./
COPY backend/src ./src
RUN uv sync --locked --no-dev --no-editable
FROM python:3.12-slim-bookworm
ARG UID=1000
ARG GID=1000
ARG BUILD_HTTP_PROXY=""
ARG BUILD_HTTPS_PROXY=""
ARG BUILD_ALL_PROXY=""
ARG BUILD_APT_MIRROR=""
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PATH=/opt/venv/bin:$PATH \
MEMRELAY_DATA_DIR=/data/memrelay \
MEMRELAY_FRONTEND_DIR=/app/frontend \
BITWARDENCLI_APPDATA_DIR=/data/memrelay/bitwarden \
HTTP_PROXY="" \
HTTPS_PROXY="" \
ALL_PROXY="" \
http_proxy="" \
https_proxy="" \
all_proxy="" \
NO_PROXY="basic-memory,localhost,127.0.0.1"
RUN HTTP_PROXY="$BUILD_HTTP_PROXY" \
HTTPS_PROXY="$BUILD_HTTPS_PROXY" \
ALL_PROXY="$BUILD_ALL_PROXY" \
http_proxy="$BUILD_HTTP_PROXY" \
https_proxy="$BUILD_HTTPS_PROXY" \
all_proxy="$BUILD_ALL_PROXY" \
sh -c 'if [ -n "$BUILD_APT_MIRROR" ]; then sed -i "s|http://deb.debian.org|${BUILD_APT_MIRROR%/}|g" /etc/apt/sources.list.d/debian.sources; fi' \
&& \
apt-get update \
&& apt-get install --yes --no-install-recommends \
ca-certificates \
git \
gosu \
libstdc++6 \
openssh-client \
poppler-utils \
tesseract-ocr \
tesseract-ocr-chi-sim \
&& rm -rf /var/lib/apt/lists/* \
&& groupadd --gid "$GID" appgroup \
&& useradd --uid "$UID" --gid "$GID" --create-home --shell /usr/sbin/nologin appuser \
&& mkdir -p /app/backend /app/frontend /data/memrelay \
&& chown -R appuser:appgroup /app /data
COPY --from=backend-builder /opt/venv /opt/venv
COPY backend/alembic.ini /app/backend/alembic.ini
COPY backend/migrations /app/backend/migrations
COPY --from=frontend-builder /build/frontend/dist /app/frontend
COPY --from=bitwarden-builder /usr/local/bin/node /usr/local/bin/node
COPY --from=bitwarden-builder /usr/local/lib/node_modules/@bitwarden/cli /usr/local/lib/node_modules/@bitwarden/cli
COPY deploy/memrelay/entrypoint.sh /usr/local/bin/memrelay-entrypoint
RUN ln -s /usr/local/lib/node_modules/@bitwarden/cli/build/bw.js /usr/local/bin/bw \
&& chmod +x /usr/local/bin/memrelay-entrypoint
WORKDIR /app/backend
USER root
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/api/v1/health/ready', timeout=3).read()" || exit 1
ENTRYPOINT ["memrelay-entrypoint"]
CMD ["uvicorn", "memrelay.app:app", "--host", "0.0.0.0", "--port", "8080", "--proxy-headers", "--forwarded-allow-ips", "*"]