mirror of
https://github.com/soconnor0919/beenvoice.git
synced 2026-05-08 09:38:55 -04:00
feat: remove start.sh script and add appearance preferences management
- Deleted the start.sh script for container management. - Added AGENTS.md for project guidelines and development principles. - Introduced new SQL migration files for user appearance preferences and platform settings. - Implemented appearance provider to manage user interface themes and preferences. - Created branding utility to define and manage branding-related constants and types. Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
+57
-47
@@ -1,59 +1,69 @@
|
||||
FROM oven/bun:1.2.19 as deps
|
||||
WORKDIR /app
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM oven/bun:1 AS base
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Install dependencies (only package manifests copied first for better caching)
|
||||
COPY package.json bun.lock ./
|
||||
# Install minimal toolchain for native devDependencies (e.g., better-sqlite3) during build
|
||||
# Minimal toolchain (kept for safety, but we skip dev deps)
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends python3 make g++ \
|
||||
&& ln -sf /usr/bin/python3 /usr/bin/python \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Install all deps (including dev) for build tooling like @tailwindcss/postcss
|
||||
RUN bun install --frozen-lockfile --verbose
|
||||
FROM base AS install
|
||||
RUN mkdir -p /temp/dev
|
||||
COPY package.json bun.lock /temp/dev/
|
||||
RUN cd /temp/dev && bun install --frozen-lockfile
|
||||
|
||||
FROM oven/bun:1.2.19 as builder
|
||||
WORKDIR /app
|
||||
RUN mkdir -p /temp/prod
|
||||
COPY package.json bun.lock /temp/prod/
|
||||
RUN cd /temp/prod && bun install --frozen-lockfile --production
|
||||
|
||||
FROM base AS build
|
||||
COPY --from=install /temp/dev/node_modules node_modules
|
||||
COPY . .
|
||||
|
||||
ARG NEXT_PUBLIC_APP_URL=http://localhost:3000
|
||||
ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID=
|
||||
ARG NEXT_PUBLIC_UMAMI_SCRIPT_URL=https://analytics.umami.is/script.js
|
||||
ARG NEXT_PUBLIC_AUTHENTIK_ENABLED=false
|
||||
ARG NEXT_PUBLIC_BRAND_NAME=beenvoice
|
||||
ARG NEXT_PUBLIC_BRAND_TAGLINE="Simple and efficient invoicing for freelancers and small businesses"
|
||||
ARG NEXT_PUBLIC_BRAND_LOGO_TEXT=beenvoice
|
||||
ARG NEXT_PUBLIC_BRAND_ICON=$
|
||||
ARG NEXT_PUBLIC_DEFAULT_INTERFACE_THEME=beenvoice
|
||||
ARG NEXT_PUBLIC_DEFAULT_FONT=brand
|
||||
ARG NEXT_PUBLIC_DEFAULT_BODY_FONT=brand
|
||||
ARG NEXT_PUBLIC_DEFAULT_HEADING_FONT=brand
|
||||
ARG NEXT_PUBLIC_DEFAULT_RADIUS=xl
|
||||
ARG NEXT_PUBLIC_DEFAULT_SIDEBAR_STYLE=floating
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV SKIP_ENV_VALIDATION=1
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
|
||||
# Build Next.js app (no memory constraints)
|
||||
ENV NODE_OPTIONS=--max-old-space-size=4096
|
||||
ENV BETTER_AUTH_URL=http://localhost:3000
|
||||
ENV AUTH_SECRET=docker-build-placeholder-secret-do-not-use
|
||||
ENV DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres
|
||||
ENV NEXT_PUBLIC_APP_URL=$NEXT_PUBLIC_APP_URL
|
||||
ENV NEXT_PUBLIC_UMAMI_WEBSITE_ID=$NEXT_PUBLIC_UMAMI_WEBSITE_ID
|
||||
ENV NEXT_PUBLIC_UMAMI_SCRIPT_URL=$NEXT_PUBLIC_UMAMI_SCRIPT_URL
|
||||
ENV NEXT_PUBLIC_AUTHENTIK_ENABLED=$NEXT_PUBLIC_AUTHENTIK_ENABLED
|
||||
ENV NEXT_PUBLIC_BRAND_NAME=$NEXT_PUBLIC_BRAND_NAME
|
||||
ENV NEXT_PUBLIC_BRAND_TAGLINE=$NEXT_PUBLIC_BRAND_TAGLINE
|
||||
ENV NEXT_PUBLIC_BRAND_LOGO_TEXT=$NEXT_PUBLIC_BRAND_LOGO_TEXT
|
||||
ENV NEXT_PUBLIC_BRAND_ICON=$NEXT_PUBLIC_BRAND_ICON
|
||||
ENV NEXT_PUBLIC_DEFAULT_INTERFACE_THEME=$NEXT_PUBLIC_DEFAULT_INTERFACE_THEME
|
||||
ENV NEXT_PUBLIC_DEFAULT_FONT=$NEXT_PUBLIC_DEFAULT_FONT
|
||||
ENV NEXT_PUBLIC_DEFAULT_BODY_FONT=$NEXT_PUBLIC_DEFAULT_BODY_FONT
|
||||
ENV NEXT_PUBLIC_DEFAULT_HEADING_FONT=$NEXT_PUBLIC_DEFAULT_HEADING_FONT
|
||||
ENV NEXT_PUBLIC_DEFAULT_RADIUS=$NEXT_PUBLIC_DEFAULT_RADIUS
|
||||
ENV NEXT_PUBLIC_DEFAULT_SIDEBAR_STYLE=$NEXT_PUBLIC_DEFAULT_SIDEBAR_STYLE
|
||||
RUN bun run build
|
||||
|
||||
FROM oven/bun:1.2.19 as runner
|
||||
WORKDIR /app
|
||||
|
||||
FROM base AS release
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=3000
|
||||
|
||||
# Create non-root user and group
|
||||
RUN addgroup --system --gid 1001 beenvoice \
|
||||
&& adduser --system --uid 1001 --ingroup beenvoice beenvoice
|
||||
COPY --from=install /temp/prod/node_modules node_modules
|
||||
COPY --from=build /usr/src/app/.next ./.next
|
||||
COPY --from=build /usr/src/app/public ./public
|
||||
COPY --from=build /usr/src/app/package.json ./package.json
|
||||
COPY --from=build /usr/src/app/src/server/db/migrate.ts ./src/server/db/migrate.ts
|
||||
COPY --from=build /usr/src/app/drizzle ./drizzle
|
||||
|
||||
# Copy runtime artifacts and install production deps
|
||||
COPY --from=builder /app/.next ./.next
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder /app/package.json ./package.json
|
||||
COPY --from=builder /app/bun.lock ./bun.lock
|
||||
RUN bun install --frozen-lockfile --production --verbose
|
||||
COPY --from=builder /app/start.sh ./start.sh
|
||||
COPY --from=builder /app/next.config.js ./next.config.js
|
||||
COPY --from=builder /app/src ./src
|
||||
COPY --from=builder /app/drizzle ./drizzle
|
||||
COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
|
||||
COPY --from=builder /app/.env.example ./.env.example
|
||||
|
||||
RUN chmod +x ./start.sh
|
||||
|
||||
USER 1001
|
||||
RUN chown -R bun:bun /usr/src/app
|
||||
|
||||
USER bun
|
||||
EXPOSE 3000
|
||||
|
||||
CMD ["./start.sh"]
|
||||
|
||||
|
||||
CMD ["bun", "run", "start", "-p", "3000", "-H", "0.0.0.0"]
|
||||
|
||||
Reference in New Issue
Block a user