perf: ⚡️ introduce bun runtime in dockerfiles and package.json
This commit is contained in:
@@ -95,7 +95,7 @@ services:
|
||||
|
||||
# Run localtunnel
|
||||
localtunnel:
|
||||
image: node:20-alpine
|
||||
image: oven/bun:latest
|
||||
build:
|
||||
dockerfile: docker/dev.dockerfile
|
||||
context: .
|
||||
|
||||
@@ -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: .
|
||||
|
||||
@@ -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"]
|
||||
@@ -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"]
|
||||
|
||||
@@ -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..."
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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'",
|
||||
|
||||
@@ -24,6 +24,6 @@
|
||||
"@emails/*": ["emails/*"]
|
||||
}
|
||||
},
|
||||
"include": ["src", "emails"],
|
||||
"include": ["src", "emails", "src/external/clickhouse/queries"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user