Configure docker build #17
							
								
								
									
										31
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | name: Build docker image | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - main | ||||||
|  |   pull_request: | ||||||
|  | jobs: | ||||||
|  |   build-static-assets: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v4 | ||||||
|  |         with: | ||||||
|  |           token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  | 
 | ||||||
|  |       - name: Set up Docker Buildx | ||||||
|  |         uses: docker/setup-buildx-action@v3 | ||||||
|  | 
 | ||||||
|  |       - name: Login to Docker Hub | ||||||
|  |         uses: docker/login-action@v3 | ||||||
|  |         with: | ||||||
|  |           username: ${{ secrets.DOCKERHUB_USERNAME }} | ||||||
|  |           password: ${{ secrets.DOCKERHUB_TOKEN }} | ||||||
|  |          | ||||||
|  |       - name: Build and push | ||||||
|  |         uses: docker/build-push-action@v5 | ||||||
|  |         with: | ||||||
|  |           context: . | ||||||
|  |           push: ${{ github.event_name != 'pull_request' }} | ||||||
|  |           tags: bustikiller/wedding-planner-frontend:latest | ||||||
|  |           cache-from: type=registry,ref=user/app:latest | ||||||
|  |           cache-to: type=inline | ||||||
							
								
								
									
										69
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | |||||||
|  | # Based on https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile | ||||||
|  | 
 | ||||||
|  | FROM node:20-alpine AS base | ||||||
|  | 
 | ||||||
|  | # Install dependencies only when needed | ||||||
|  | FROM base AS deps | ||||||
|  | # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. | ||||||
|  | RUN apk add --no-cache libc6-compat | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | # Install dependencies based on the preferred package manager | ||||||
|  | COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ | ||||||
|  | RUN \ | ||||||
|  |   if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ | ||||||
|  |   elif [ -f package-lock.json ]; then npm ci; \ | ||||||
|  |   elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ | ||||||
|  |   else echo "Lockfile not found." && exit 1; \ | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Rebuild the source code only when needed | ||||||
|  | FROM base AS builder | ||||||
|  | WORKDIR /app | ||||||
|  | COPY --from=deps /app/node_modules ./node_modules | ||||||
|  | COPY . . | ||||||
|  | 
 | ||||||
|  | # Next.js collects completely anonymous telemetry data about general usage. | ||||||
|  | # Learn more here: https://nextjs.org/telemetry | ||||||
|  | # Uncomment the following line in case you want to disable telemetry during the build. | ||||||
|  | ENV NEXT_TELEMETRY_DISABLED 1 | ||||||
|  | 
 | ||||||
|  | RUN \ | ||||||
|  |   if [ -f yarn.lock ]; then yarn run build; \ | ||||||
|  |   elif [ -f package-lock.json ]; then npm run build; \ | ||||||
|  |   elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \ | ||||||
|  |   else echo "Lockfile not found." && exit 1; \ | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  | # Production image, copy all the files and run next | ||||||
|  | FROM base AS runner | ||||||
|  | WORKDIR /app | ||||||
|  | 
 | ||||||
|  | ENV NODE_ENV production | ||||||
|  | # Uncomment the following line in case you want to disable telemetry during runtime. | ||||||
|  | # ENV NEXT_TELEMETRY_DISABLED 1 | ||||||
|  | 
 | ||||||
|  | RUN addgroup --system --gid 1001 nodejs | ||||||
|  | RUN adduser --system --uid 1001 nextjs | ||||||
|  | 
 | ||||||
|  | COPY --from=builder /app/public ./public | ||||||
|  | 
 | ||||||
|  | # Set the correct permission for prerender cache | ||||||
|  | RUN mkdir .next | ||||||
|  | RUN chown nextjs:nodejs .next | ||||||
|  | 
 | ||||||
|  | # Automatically leverage output traces to reduce image size | ||||||
|  | # https://nextjs.org/docs/advanced-features/output-file-tracing | ||||||
|  | COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ | ||||||
|  | COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static | ||||||
|  | 
 | ||||||
|  | USER nextjs | ||||||
|  | 
 | ||||||
|  | EXPOSE 3000 | ||||||
|  | 
 | ||||||
|  | ENV PORT=3000 | ||||||
|  | 
 | ||||||
|  | # server.js is created by next build from the standalone output | ||||||
|  | # https://nextjs.org/docs/pages/api-reference/next-config-js/output | ||||||
|  | CMD HOSTNAME="0.0.0.0" node server.js | ||||||
| @ -1,5 +1,7 @@ | |||||||
| /** @type {import('next').NextConfig} */ | /** @type {import('next').NextConfig} */ | ||||||
| 
 | 
 | ||||||
| const nextConfig = {}; | const nextConfig = { | ||||||
|  |     output: 'standalone', | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| export default nextConfig; | export default nextConfig; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user