feat: alist
chore: dockerfile
This commit is contained in:
parent
7a1eb0b0c8
commit
2b9f8aeea4
80
Dockerfile
Normal file
80
Dockerfile
Normal file
@ -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"]
|
@ -4,7 +4,7 @@ import { button as buttonStyles } from "@nextui-org/theme";
|
|||||||
|
|
||||||
import { siteConfig } from "@/config/site";
|
import { siteConfig } from "@/config/site";
|
||||||
import { title, subtitle } from "@/components/primitives";
|
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() {
|
export default function Home() {
|
||||||
return (
|
return (
|
||||||
@ -37,6 +37,13 @@ export default function Home() {
|
|||||||
>
|
>
|
||||||
<TwitterIcon size={20} />
|
<TwitterIcon size={20} />
|
||||||
</Link>
|
</Link>
|
||||||
|
<Link
|
||||||
|
isExternal
|
||||||
|
className={buttonStyles({ variant: "bordered", radius: "full" })}
|
||||||
|
href={siteConfig.links.alist}
|
||||||
|
>
|
||||||
|
<AListIcon size={20} />
|
||||||
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
isExternal
|
isExternal
|
||||||
className={buttonStyles({ variant: "bordered", radius: "full" })}
|
className={buttonStyles({ variant: "bordered", radius: "full" })}
|
||||||
|
@ -107,6 +107,38 @@ export const GiteaIcon: React.FC<IconSvgProps> = ({
|
|||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
export const AListIcon: React.FC<IconSvgProps> = ({
|
||||||
|
size = 24,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
...props
|
||||||
|
}) => {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
height={size || height}
|
||||||
|
viewBox="0 0 1252 1252"
|
||||||
|
width={size || width}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<g>
|
||||||
|
<g id="#70c6beff">
|
||||||
|
<path
|
||||||
|
d="m634.37,138.38c11.88,-1.36 24.25,1.3 34.18,8.09c14.96,9.66 25.55,24.41 34.49,39.51c40.59,68.03 81.45,135.91 122.02,203.96c54.02,90.99 108.06,181.97 161.94,273.06c37.28,63 74.65,125.96 112.18,188.82c24.72,41.99 50.21,83.54 73.84,126.16c10.18,17.84 15.77,38.44 14.93,59.03c-0.59,15.92 -3.48,32.28 -11.84,46.08c-11.73,19.46 -31.39,33.2 -52.71,40.36c-11.37,4.09 -23.3,6.87 -35.43,6.89c-132.32,-0.05 -264.64,0.04 -396.95,0.03c-11.38,-0.29 -22.95,-1.6 -33.63,-5.72c-7.81,-3.33 -15.5,-7.43 -21.61,-13.42c-10.43,-10.32 -17.19,-24.96 -15.38,-39.83c0.94,-10.39 3.48,-20.64 7.76,-30.16c4.15,-9.77 9.99,-18.67 15.06,-27.97c22.13,-39.47 45.31,-78.35 69.42,-116.65c7.72,-12.05 14.44,-25.07 25.12,-34.87c11.35,-10.39 25.6,-18.54 41.21,-19.6c12.55,-0.52 24.89,3.82 35.35,10.55c11.8,6.92 21.09,18.44 24.2,31.88c4.49,17.01 -0.34,34.88 -7.55,50.42c-8.09,17.65 -19.62,33.67 -25.81,52.18c-1.13,4.21 -2.66,9.52 0.48,13.23c3.19,3 7.62,4.18 11.77,5.22c12,2.67 24.38,1.98 36.59,2.06c45,-0.01 90,0 135,0c8.91,-0.15 17.83,0.3 26.74,-0.22c6.43,-0.74 13.44,-1.79 18.44,-6.28c3.3,-2.92 3.71,-7.85 2.46,-11.85c-2.74,-8.86 -7.46,-16.93 -12.12,-24.89c-119.99,-204.91 -239.31,-410.22 -360.56,-614.4c-3.96,-6.56 -7.36,-13.68 -13.03,-18.98c-2.8,-2.69 -6.95,-4.22 -10.77,-3.11c-3.25,1.17 -5.45,4.03 -7.61,6.57c-5.34,6.81 -10.12,14.06 -14.51,21.52c-20.89,33.95 -40.88,68.44 -61.35,102.64c-117.9,198.43 -235.82,396.85 -353.71,595.29c-7.31,13.46 -15.09,26.67 -23.57,39.43c-7.45,10.96 -16.49,21.23 -28.14,27.83c-13.73,7.94 -30.69,11.09 -46.08,6.54c-11.23,-3.47 -22.09,-9.12 -30.13,-17.84c-10.18,-10.08 -14.69,-24.83 -14.17,-38.94c0.52,-14.86 5.49,-29.34 12.98,-42.1c71.58,-121.59 143.62,-242.92 215.93,-364.09c37.2,-62.8 74.23,-125.69 111.64,-188.36c37.84,-63.5 75.77,-126.94 113.44,-190.54c21.02,-35.82 42.19,-71.56 64.28,-106.74c6.79,-11.15 15.58,-21.15 26.16,-28.85c8.68,-5.92 18.42,-11 29.05,-11.94z"
|
||||||
|
fill="#70c6be"
|
||||||
|
id="svg_2"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<g id="#1ba0d8ff">
|
||||||
|
<path
|
||||||
|
d="m628.35,608.38c17.83,-2.87 36.72,1.39 51.5,11.78c11.22,8.66 19.01,21.64 21.26,35.65c1.53,10.68 0.49,21.75 -3.44,31.84c-3.02,8.73 -7.35,16.94 -12.17,24.81c-68.76,115.58 -137.5,231.17 -206.27,346.75c-8.8,14.47 -16.82,29.47 -26.96,43.07c-7.37,9.11 -16.58,16.85 -27.21,21.89c-22.47,11.97 -51.79,4.67 -68.88,-13.33c-8.66,-8.69 -13.74,-20.63 -14.4,-32.84c-0.98,-12.64 1.81,-25.42 7.53,-36.69c5.03,-10.96 10.98,-21.45 17.19,-31.77c30.22,-50.84 60.17,-101.84 90.3,-152.73c41.24,-69.98 83.16,-139.55 124.66,-209.37c4.41,-7.94 9.91,-15.26 16.09,-21.9c8.33,-8.46 18.9,-15.3 30.8,-17.16z"
|
||||||
|
fill="#1ba0d8"
|
||||||
|
id="svg_3"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const MavenIcon: React.FC<IconSvgProps> = ({
|
export const MavenIcon: React.FC<IconSvgProps> = ({
|
||||||
size = 24,
|
size = 24,
|
||||||
|
@ -64,5 +64,6 @@ export const siteConfig = {
|
|||||||
twitter: "https://x.com/DeerioChaelingo",
|
twitter: "https://x.com/DeerioChaelingo",
|
||||||
maven: "https://maven.deechael.net",
|
maven: "https://maven.deechael.net",
|
||||||
gitea: "https://git.deechael.net",
|
gitea: "https://git.deechael.net",
|
||||||
|
alist: "https://files.deechael.net",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user