From 2b9f8aeea497f403b076d5c6977b49bd95419e72 Mon Sep 17 00:00:00 2001 From: deechael Date: Thu, 19 Sep 2024 21:02:04 +0800 Subject: [PATCH] feat: alist chore: dockerfile --- Dockerfile | 80 ++++++++++++++++++++++++++++++++++++++++++++ app/page.tsx | 9 ++++- components/icons.tsx | 34 ++++++++++++++++++- config/site.ts | 1 + 4 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c1e3118 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,80 @@ +FROM node:18-alpine AS base + +# Step 1. Rebuild the source code only when needed +FROM base AS builder + +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +# Omit --production flag for TypeScript devDependencies +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; \ + # Allow install without lockfile, so example works even without Node.js installed locally + else echo "Warning: Lockfile not found. It is recommended to commit lockfiles to version control." && yarn install; \ + fi + +COPY components ./components +COPY styles ./styles +COPY app ./app +COPY config ./config +COPY node_modules ./node_modules +COPY types ./types +COPY public ./public +COPY next.config.js . +COPY tsconfig.json . +COPY postcss.config.js . +COPY tailwind.config.js . + +# Environment variables must be present at build time +# https://github.com/vercel/next.js/discussions/14030 +ARG ENV_VARIABLE +ENV ENV_VARIABLE=${ENV_VARIABLE} +ARG NEXT_PUBLIC_ENV_VARIABLE +ENV NEXT_PUBLIC_ENV_VARIABLE=${NEXT_PUBLIC_ENV_VARIABLE} + +# Next.js collects completely anonymous telemetry data about general usage. Learn more here: https://nextjs.org/telemetry +# Uncomment the following line to disable telemetry at build time +# ENV NEXT_TELEMETRY_DISABLED 1 + +# Build Next.js based on the preferred package manager +RUN \ + if [ -f yarn.lock ]; then yarn build; \ + elif [ -f package-lock.json ]; then npm run build; \ + elif [ -f pnpm-lock.yaml ]; then pnpm build; \ + else npm run build; \ + fi + +# Note: It is not necessary to add an intermediate step that does a full copy of `node_modules` here + +# Step 2. Production image, copy all the files and run next +FROM base AS runner + +WORKDIR /app + +# Don't run production as root +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +USER 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 + +# Environment variables must be redefined at run time +ARG ENV_VARIABLE +ENV ENV_VARIABLE=${ENV_VARIABLE} +ARG NEXT_PUBLIC_ENV_VARIABLE +ENV NEXT_PUBLIC_ENV_VARIABLE=${NEXT_PUBLIC_ENV_VARIABLE} + +# Uncomment the following line to disable telemetry at run time +# ENV NEXT_TELEMETRY_DISABLED 1 + +# Note: Don't expose ports here, Compose will handle that for us + +CMD ["node", "server.js"] diff --git a/app/page.tsx b/app/page.tsx index 917349b..793bb8e 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -4,7 +4,7 @@ import { button as buttonStyles } from "@nextui-org/theme"; import { siteConfig } from "@/config/site"; import { title, subtitle } from "@/components/primitives"; -import { GithubIcon, TwitterIcon, MavenIcon, GiteaIcon } from "@/components/icons"; +import { GithubIcon, TwitterIcon, MavenIcon, GiteaIcon, AListIcon } from "@/components/icons"; export default function Home() { return ( @@ -37,6 +37,13 @@ export default function Home() { > + + + = ({ width={size || width} {...props} > - + + + ); +}; +export const AListIcon: React.FC = ({ + size = 24, + width, + height, + ...props +}) => { + return ( + + + + + + + + + ); }; diff --git a/config/site.ts b/config/site.ts index 2da0ffd..4362d82 100644 --- a/config/site.ts +++ b/config/site.ts @@ -64,5 +64,6 @@ export const siteConfig = { twitter: "https://x.com/DeerioChaelingo", maven: "https://maven.deechael.net", gitea: "https://git.deechael.net", + alist: "https://files.deechael.net", }, };