diff --git a/.gitignore b/.gitignore index 5d34c61..99a34d3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /node_modules /dist .env +.docker.env *.tsbuildinfo diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5cba278 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM node:24-alpine AS builder + +WORKDIR /app + +RUN corepack enable && corepack prepare pnpm@latest --activate + +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . + +RUN pnpm build + +# Production stage +FROM node:24-alpine + +WORKDIR /app + +RUN corepack enable && corepack prepare pnpm@latest --activate + +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --prod --frozen-lockfile + +COPY --from=builder /app/dist ./dist + +EXPOSE 7337 + +CMD ["node", "dist/index.mjs"] diff --git a/package.json b/package.json index 5f6f44f..387a5d2 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,10 @@ "lint": "eslint --fix", "dev": "tsx src/index.ts", "build": "tsdown src/index.ts", + "docker:pre-build": "sed \"s/[\\\"']//g\" .env > .docker.env", + "docker:source-env": "ls -a && pwd && source .docker.env", + "docker:build": "pnpm docker:pre-build && docker build -t gmstn-systems-shard .", + "docker:run": "pnpm docker:source-env && docker run -p $SERVER_PORT:$SERVER_PORT gmstn-systems-shard", "start": "pnpm build && node dist/index.mjs" }, "keywords": [], diff --git a/shell.nix b/shell.nix index 623b187..423a000 100644 --- a/shell.nix +++ b/shell.nix @@ -9,6 +9,7 @@ pnpm, typescript, typescript-language-server, + docker, callPackage, }: @@ -25,6 +26,7 @@ mkShellNoCC { pnpm typescript typescript-language-server + docker ]; shellHook = ''