feat: 导入 MemRelay 初始源码
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
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", "*"]
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
mkdir -p /data/memrelay
|
||||
chown -R appuser:appgroup /data/memrelay
|
||||
|
||||
exec gosu appuser "$@"
|
||||
Reference in New Issue
Block a user