perf: ️ introduce bun runtime in dockerfiles and package.json

This commit is contained in:
amianthus
2025-07-19 14:26:12 +01:00
parent ab7150b9a3
commit 585bb55c8b
10 changed files with 39 additions and 32 deletions

View File

@@ -95,7 +95,7 @@ services:
# Run localtunnel
localtunnel:
image: node:20-alpine
image: oven/bun:latest
build:
dockerfile: docker/dev.dockerfile
context: .

View File

@@ -32,14 +32,12 @@ services:
context: .
dockerfile: docker/prod.dockerfile
target: server-prod
volumes:
- ./server:/app/server
ports:
- "8080:8080"
restart: always
localtunnel:
image: node:20-alpine
image: oven/bun:latest
build:
dockerfile: docker/prod.dockerfile
context: .

View File

@@ -1,23 +1,19 @@
# Multi-stage Dockerfile for Autumn development
FROM node:22-alpine AS base
FROM oven/bun:latest AS base
WORKDIR /app
RUN npm install -g pnpm
# Skip Puppeteer Chromium download to speed up install
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_SKIP_DOWNLOAD=true
COPY package*.json ./
COPY pnpm-workspace.yaml ./
COPY pnpm-lock.yaml ./
COPY package.json ./
COPY bun.lockb ./
COPY shared/package*.json ./shared/
COPY server/package*.json ./server/
COPY vite/package*.json ./vite/
RUN pnpm install --frozen-lockfile
RUN npm install -g nodemon tsx
RUN bun install
# Stage 1: /localtunnel
FROM base AS localtunnel
@@ -29,26 +25,25 @@ CMD ["sh", "localtunnel-start.sh"]
FROM base AS shared
COPY shared/ ./shared/
WORKDIR /app/shared
RUN pnpm run build
CMD ["pnpm", "run", "dev"]
RUN bun run build
CMD ["bun", "run", "dev:bun"]
# Stage 3: /vite
FROM base AS vite
WORKDIR /app/vite
COPY vite/ ./
EXPOSE 3000
CMD ["pnpm", "run", "dev"]
CMD ["bun", "run", "dev"]
# Stage 4: /server
FROM base AS server
COPY server/ ./server/
WORKDIR /app/server
EXPOSE 8080
CMD ["pnpm", "run", "dev"]
CMD ["bun", "run", "dev:bun"]
# Stage 5: Workers
FROM base AS workers
COPY server/ ./server/
WORKDIR /app/server
# RUN pnpm install
CMD ["pnpm", "run", "workers"]
CMD ["bun", "run", "workers:bun"]

View File

@@ -1,14 +1,14 @@
# ---- Base dependencies ----
FROM node:18-alpine AS base
FROM oven/bun:latest AS base
WORKDIR /app
RUN npm install -g pnpm serve typescript tsc tsc-alias tsx
RUN bun install -g serve typescript tsc tsc-alias tsx
COPY package*.json pnpm-workspace.yaml pnpm-lock.yaml ./
COPY package.json bun.lockb ./
COPY shared/package*.json ./shared/
COPY server/package*.json ./server/
COPY vite/package*.json ./vite/
RUN pnpm install
RUN bun install
FROM base AS localtunnel
WORKDIR /app
@@ -19,27 +19,26 @@ CMD ["sh", "localtunnel-start.sh"]
FROM base AS vite-build
COPY . .
WORKDIR /app
RUN pnpm run vite:build
RUN bun run vite:build:bun
# ---- Build backend (server) ----
FROM base AS server-build
COPY . .
WORKDIR /app
RUN pnpm run server:build
RUN bun run server:build:bun
# ---- Production frontend image ----
FROM vite-build AS vite-prod
EXPOSE 3000
WORKDIR /app
CMD ["pnpm", "run", "vite:start"]
CMD ["bun", "run", "vite:start:bun"]
FROM server-build AS server-prod
EXPOSE 8080
WORKDIR /app
CMD ["pnpm", "run", "server:start"]
WORKDIR /app/server
CMD ["bun", "run", "prod:start:bun"]
FROM server-build AS workers-prod
EXPOSE 8080
WORKDIR /app
CMD ["pnpm", "run", "server:workers"]
WORKDIR /app/server
CMD ["bun", "run", "workers:start:bun"]

View File

@@ -15,7 +15,7 @@ fi
echo "Installing localtunnel..."
echo "Reserved key: ${LOCAL_TUNNEL_RESERVED_KEY}"
npm install -g localtunnel
bun install -g localtunnel
echo "Server is ready! Starting localtunnel..."

View File

@@ -9,12 +9,19 @@
"type": "module",
"scripts": {
"vite:build": "pnpm -F shared build && pnpm -F vite build",
"vite:build:bun": "bun -F @autumn/shared build && bun -F @autumn/vite build",
"vite:start": "pnpm -F vite start",
"vite:start:bun": "bun -F @autumn/shared build && bun -F @autumn/vite start",
"server:build": "pnpm -F shared build && pnpm -F server prod:build",
"server:build:bun": "bun -F @autumn/shared build && bun -F @autumn/server prod:build:bun",
"server:start": "pnpm -F server prod:start",
"server:start:bun": "bun -F @autumn/shared build && bun -F @autumn/server prod:start:bun",
"server:cron": "pnpm -F server cron:start",
"server:cron:bun": "bun -F @autumn/shared build && bun -F @autumn/server cron:start:bun",
"server:workers": "pnpm -F server workers:start",
"server:workers:bun": "bun -F @autumn/shared build && bun -F @autumn/server workers:start:bun",
"server:check": "NODE_ENV=production pnpm -F server check",
"server:check:bun": "NODE_ENV=production bun -F @autumn/shared build && bun -F @autumn/server check",
"dev": "concurrently \"cd server && npm run dev\" \"cd vite && npm run dev\" \"redis-server\"",
"dev:wsl": "concurrently \"cd server && npm run dev\" \"cd vite && npm run dev\" \"cd shared && npm run dev\"",
"setup": "node setup.js",

View File

@@ -9,15 +9,21 @@
"dev": "cross-env NODE_ENV=development npx nodemon --no-deprecation --exec npx tsx src/index.ts --ignore scripts --ignore tests",
"dev:bun": "cross-env NODE_ENV=development bunx nodemon --no-deprecation --exec bun src/index.ts --ignore scripts --ignore tests",
"start": "npx tsx src/index.ts",
"start:bun": "bun src/index.ts",
"workers": "npx tsx watch src/workers.ts",
"workers:start": "node --no-deprecation dist/src/workers.js",
"workers:start:bun": "bun dist/workers.js",
"check": "tsx src/check.ts",
"build": "tsc -b tsconfig.build.json && cp -r src/external/clickhouse/queries dist/src/external/clickhouse/",
"build:bun": "bun build ./src/index.ts ./src/workers.ts ./src/cron.ts --outdir dist --target bun",
"prod": "tsc -b tsconfig.build.json && tsc-alias && node dist/src/index.js",
"prod:build": "tsc -b tsconfig.build.json && tsc-alias && cp -r src/external/clickhouse/queries dist/src/external/clickhouse/",
"prod:build:bun": "bun build ./src/index.ts ./src/workers.ts ./src/cron.ts --outdir dist --target bun",
"prod:start": "node dist/src/index.js",
"prod:start:bun": "bun dist/index.js",
"cron": "tsx src/cron.ts",
"cron:start": "node --no-deprecation dist/src/cron.js",
"cron:start:bun": "bun dist/cron.js",
"testa-parallel": "mocha 'tests/alex/00_setup.ts' && mocha --parallel --timeout 10000000 'tests/alex/**/*.ts' --ignore 'tests/alex/00_setup.ts'",
"testa": "mocha 'tests/alex/00_setup.ts' && mocha --timeout 10000000 'tests/alex/01_free.ts' --ignore 'tests/alex/00_setup.ts'",
"test": "mocha --timeout 10000000 'tests/**/*.ts' --ignore 'tests/alex/**/*.ts'",

View File

@@ -24,6 +24,6 @@
"@emails/*": ["emails/*"]
}
},
"include": ["src", "emails"],
"include": ["src", "emails", "src/external/clickhouse/queries"],
"exclude": ["node_modules", "dist"]
}

View File

@@ -15,6 +15,7 @@
"scripts": {
"build": "tsc",
"dev": "npx nodemon --watch . --ext ts --ignore dist --exec 'pnpm run build'",
"dev:bun": "bunx nodemon --watch . --ext ts --ignore dist --exec 'bun run build'",
"db:push": "cross-env NODE_OPTIONS=\"--import tsx\" pnpm exec drizzle-kit push --config drizzle.config.ts",
"db:generate": "cross-env NODE_OPTIONS=\"--import tsx\" pnpm exec drizzle-kit generate --config drizzle.config.ts",
"db:migrate": "cross-env NODE_OPTIONS=\"--import tsx\" pnpm exec drizzle-kit migrate --config drizzle.config.ts"

View File

@@ -6,6 +6,7 @@
"scripts": {
"dev": "vite --port 3000 --host",
"build": "tsc -b && vite build",
"build:bun": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview",
"start": "serve -s dist"