Skip to content

Commit a54861c

Browse files
committed
chore(linea-ens-app): refactor Dockerfile to reduce image size
1 parent c72e142 commit a54861c

File tree

3 files changed

+99
-23
lines changed

3 files changed

+99
-23
lines changed

.dockerignore

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Dependencies (will be installed in Docker)
2+
**/node_modules
3+
4+
# Build outputs (will be rebuilt in Docker)
5+
**/.next
6+
**/dist
7+
**/build
8+
**/out
9+
10+
# Development files
11+
**/.gitignore
12+
**/.env.local
13+
**/.env.*.local
14+
15+
# IDE
16+
**/.idea
17+
**/.vscode
18+
**/*.swp
19+
**/*.swo
20+
21+
# Testing
22+
**/coverage
23+
**/e2e
24+
**/test
25+
**/*.test.*
26+
**/*.spec.*
27+
**/playwright
28+
**/playwright-report
29+
30+
# Documentation
31+
**/*.md
32+
**/docs
33+
34+
# Misc
35+
**/.DS_Store
36+
**/Thumbs.db
37+
**/*.log
38+
**/npm-debug.log*
39+
**/yarn-debug.log*
40+
**/yarn-error.log*
41+
42+
# Archives
43+
**/*.tar
44+
**/*.tar.gz
45+
**/*.tar.lz4
46+
**/*.zip
47+
48+
# Other packages not needed for linea-ens-app build
49+
packages/linea-ccip-gateway
50+
packages/linea-ens-resolver
51+
packages/linea-ens-subgraph
52+
packages/linea-state-verifier
53+
packages/poh-signer-api
54+
services
55+

packages/linea-ens-app/Dockerfile

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,57 @@
1-
FROM node:18
2-
3-
# Install system dependencies (if necessary)
4-
RUN apt-get update && apt-get install -y \
5-
libcairo2-dev \
6-
libpango1.0-dev \
7-
libjpeg-dev \
8-
libgif-dev \
9-
librsvg2-dev \
10-
build-essential \
11-
&& rm -rf /var/lib/apt/lists/*
1+
FROM node:22-alpine AS base
122

3+
ENV PNPM_HOME="/pnpm"
4+
ENV PATH="$PNPM_HOME:$PATH"
5+
RUN corepack enable
6+
7+
RUN apk add --no-cache libc6-compat python3 make g++ git \
8+
cairo-dev pango-dev jpeg-dev giflib-dev librsvg-dev
9+
10+
FROM base AS builder
1311
WORKDIR /app
1412

1513
ARG NEXT_PUBLIC_ALCHEMY_KEY
1614
ARG NEXT_PUBLIC_INFURA_KEY
1715
ARG NEXT_PUBLIC_WC_PROJECT_ID
1816
ARG NEXT_PUBLIC_THE_GRAPH_MAINNET_API_KEY
1917
ARG NEXT_PUBLIC_THE_GRAPH_SEPOLIA_API_KEY
18+
2019
ENV NEXT_PUBLIC_ALCHEMY_KEY=$NEXT_PUBLIC_ALCHEMY_KEY
2120
ENV NEXT_PUBLIC_INFURA_KEY=$NEXT_PUBLIC_INFURA_KEY
2221
ENV NEXT_PUBLIC_WC_PROJECT_ID=$NEXT_PUBLIC_WC_PROJECT_ID
2322
ENV NEXT_PUBLIC_THE_GRAPH_MAINNET_API_KEY=$NEXT_PUBLIC_THE_GRAPH_MAINNET_API_KEY
2423
ENV NEXT_PUBLIC_THE_GRAPH_SEPOLIA_API_KEY=$NEXT_PUBLIC_THE_GRAPH_SEPOLIA_API_KEY
25-
COPY . .
2624

27-
# Install pnpm and dependencies
28-
RUN npm install -g [email protected]
29-
RUN rm -rf node_modules
30-
RUN pnpm config set store-dir ~/.local/share/pnpm/store
25+
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
26+
27+
COPY packages/linea-ens-app/package.json ./packages/linea-ens-app/
28+
COPY packages/linea-ens-contracts/package.json ./packages/linea-ens-contracts/
29+
30+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile --prefer-offline
31+
32+
COPY .git ./.git
3133

34+
COPY packages/linea-ens-app/ ./packages/linea-ens-app/
35+
COPY packages/linea-ens-contracts/ ./packages/linea-ens-contracts/
3236

3337
WORKDIR /app/packages/linea-ens-app
38+
RUN pnpm build
3439

35-
# Clear Next.js cache
36-
RUN rm -rf .next
37-
RUN pnpm install
38-
RUN pnpm run build
40+
FROM node:22-alpine AS runner
41+
WORKDIR /app
42+
43+
ENV NODE_ENV=production
44+
ENV NEXT_TELEMETRY_DISABLED=1
45+
46+
RUN addgroup --system --gid 1001 nodejs && \
47+
adduser --system --uid 1001 nextjs
48+
49+
COPY --from=builder --chown=nextjs:nodejs /app/packages/linea-ens-app/.next/standalone ./
50+
COPY --from=builder --chown=nextjs:nodejs /app/packages/linea-ens-app/.next/static ./packages/linea-ens-app/.next/static
51+
COPY --from=builder --chown=nextjs:nodejs /app/packages/linea-ens-app/public ./packages/linea-ens-app/public
3952

4053
EXPOSE 3000
4154

42-
CMD ["pnpm", "start"]
55+
USER nextjs
56+
57+
CMD ["node", "packages/linea-ens-app/server.js"]

packages/linea-ens-app/next.config.mjs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
;
2+
13
// @ts-check
24

35
/* eslint-disable @typescript-eslint/naming-convention */
@@ -7,9 +9,11 @@ import { execSync } from 'child_process'
79
import path, { dirname } from 'path'
810
import { fileURLToPath } from 'url'
911

12+
1013
import { withSentryConfig } from '@sentry/nextjs'
1114
import StylelintPlugin from 'stylelint-webpack-plugin'
1215

16+
1317
const __dirname = dirname(fileURLToPath(import.meta.url))
1418

1519
const babelIncludeRegexes = [
@@ -24,6 +28,9 @@ const babelIncludeRegexes = [
2428
* */
2529
const nextConfig = {
2630
reactStrictMode: true,
31+
output: 'standalone',
32+
// For monorepo support with pnpm - trace dependencies from the root
33+
outputFileTracingRoot: path.join(__dirname, '../../'),
2734
compiler: {
2835
styledComponents: true,
2936
},
@@ -91,8 +98,7 @@ const nextConfig = {
9198
]
9299
},
93100
generateBuildId: () => {
94-
const hash = execSync('git rev-parse HEAD').toString().trim()
95-
return hash
101+
return execSync('git rev-parse HEAD').toString().trim()
96102
},
97103
webpack: (config, options) => {
98104
for (const rule of config.module.rules) {

0 commit comments

Comments
 (0)