diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..303492b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +node_modules +dist +.env +.env.* +!.env.example +*.local +.DS_Store +indexer/data +indexer-dist +tsconfig.tsbuildinfo +*.log +.vite +.git +lp-terminal.tar.gz +Dockerfile +docker-compose.yml +.dockerignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8d53bee --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +# syntax=docker/dockerfile:1 +# 单容器双进程:lp-indexer(:8787)+ vite preview(:4173) +# 暴露 4173;preview 同源反代 /api -> 同容器 8787 +FROM node:22-slim + +WORKDIR /app + +# 先装依赖(利用层缓存:源码变不动 node_modules 层) +COPY package.json package-lock.json ./ +RUN npm ci + +# 拷源码并构建(RPC 必须空:公网部署私钥不进 bundle) +COPY . . +RUN RPC="" npm run build + +# indexer 数据持久化目录 +RUN mkdir -p indexer/data +VOLUME /app/indexer/data + +EXPOSE 4173 + +# 同时跑 indexer 和 preview,indexer 崩了容器不退(preview 仍可用 + dexscreener 兜底) +COPY docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..eca8d82 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +services: + lp-terminal: + build: . + container_name: lp-terminal + restart: unless-stopped + ports: + - "4173:4173" + volumes: + # indexer 的 SQLite 持久化(首次回填约 65 分钟,别丢) + - lp-data:/app/indexer/data + # 美国服务器 IP 直连,无需代理;如需代理取消下面注释 + # environment: + # - NODE_USE_ENV_PROXY=1 + # - HTTPS_PROXY=http://host.docker.internal:7890 + +volumes: + lp-data: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 0000000..4b39d6f --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# 单容器双进程启动:indexer(后台)+ preview(前台) +# 任一进程退出都让容器退出,交给 docker/compose 的 restart 策略重启 + +set -e + +cd /app + +# 后台跑 indexer +echo "[entrypoint] starting lp-indexer on :8787" +npm run indexer & +INDEXER_PID=$! + +# 前台跑 preview(--host 0.0.0.0 暴露到容器外) +echo "[entrypoint] starting lp-web (preview) on :4173" +npm run preview -- --host 0.0.0.0 --port 4173 & +WEB_PID=$! + +# 任一进程退出就整体退出 +trap 'echo "[entrypoint] process exited, shutting down"; kill $INDEXER_PID $WEB_PID 2>/dev/null; exit 1' CHLD +wait