feat: docker

This commit is contained in:
trafficlunar 2025-04-23 17:46:50 +01:00
parent 487a1a658d
commit 99c3aa5add
7 changed files with 53 additions and 12 deletions

48
Dockerfile Normal file
View file

@ -0,0 +1,48 @@
FROM node:23-alpine AS base
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json pnpm-lock.yaml* ./
COPY prisma ./prisma/
RUN corepack enable pnpm && pnpm i --frozen-lockfile
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
RUN corepack enable pnpm && pnpm prisma generate
RUN pnpm prisma migrate deploy
RUN pnpm run build
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
# 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
COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma
USER nextjs
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]

View file

@ -1,6 +1,7 @@
import type { NextConfig } from "next"; import type { NextConfig } from "next";
const nextConfig: NextConfig = { const nextConfig: NextConfig = {
output: "standalone",
images: { images: {
remotePatterns: [ remotePatterns: [
{ {

View file

@ -2,6 +2,7 @@
"name": "tomodachi-share", "name": "tomodachi-share",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"packageManager": "pnpm@10.9.0",
"scripts": { "scripts": {
"dev": "next dev --turbopack", "dev": "next dev --turbopack",
"build": "next build", "build": "next build",

View file

@ -1,5 +1,6 @@
onlyBuiltDependencies: onlyBuiltDependencies:
- '@prisma/client' - '@prisma/client'
- '@prisma/engines' - '@prisma/engines'
- esbuild
- prisma - prisma
- sharp - sharp

View file

@ -1,9 +0,0 @@
/*
Warnings:
- You are about to drop the column `images` on the `miis` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "miis" DROP COLUMN "images",
ADD COLUMN "imageCount" INTEGER NOT NULL DEFAULT 0;

View file

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "users" ADD COLUMN "usernameUpdatedAt" TIMESTAMP(3);

View file

@ -8,6 +8,7 @@ CREATE TABLE "users" (
"image" TEXT, "image" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL, "updatedAt" TIMESTAMP(3) NOT NULL,
"usernameUpdatedAt" TIMESTAMP(3),
CONSTRAINT "users_pkey" PRIMARY KEY ("id") CONSTRAINT "users_pkey" PRIMARY KEY ("id")
); );
@ -45,7 +46,7 @@ CREATE TABLE "miis" (
"id" SERIAL NOT NULL, "id" SERIAL NOT NULL,
"userId" INTEGER NOT NULL, "userId" INTEGER NOT NULL,
"name" VARCHAR(64) NOT NULL, "name" VARCHAR(64) NOT NULL,
"images" TEXT[], "imageCount" INTEGER NOT NULL DEFAULT 0,
"tags" TEXT[], "tags" TEXT[],
"firstName" TEXT NOT NULL, "firstName" TEXT NOT NULL,
"lastName" TEXT NOT NULL, "lastName" TEXT NOT NULL,