Should be able to deploy
This commit is contained in:
@@ -1,24 +1,62 @@
|
||||
# Use Deno image
|
||||
FROM denoland/deno:alpine
|
||||
# syntax=docker.io/docker/dockerfile:1
|
||||
|
||||
# Set working directory
|
||||
FROM node:18-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
|
||||
|
||||
# Copy project files
|
||||
# Install dependencies based on the preferred package manager
|
||||
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
|
||||
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
|
||||
RUN deno install
|
||||
# Uncomment the following line in case you want to disable telemetry during runtime.
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
|
||||
# Install Next.js dependencies
|
||||
RUN deno task build
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 nextjs
|
||||
|
||||
# Move everything to the standalone
|
||||
RUN cp -r public .next/standalone/public
|
||||
RUN cp -r .next/static .next/standalone/.next/static
|
||||
RUN mv .next/standalone/server.js .next/standalone/server.cjs
|
||||
COPY --from=builder /app/public ./public
|
||||
|
||||
RUN rm -r ./node_modules
|
||||
# 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
|
||||
|
||||
# Start the Next.js app
|
||||
CMD ["deno", "run", "--allow-env", "--allow-read", "--allow-sys", "--allow-net", ".next/standalone/server.cjs"]
|
||||
USER nextjs
|
||||
|
||||
# server.js is created by next build from the standalone output
|
||||
# https://nextjs.org/docs/pages/api-reference/config/next-config-js/output
|
||||
ENV HOSTNAME="0.0.0.0"
|
||||
CMD ["node", "server.js"]
|
||||
|
||||
25
frontend/Dockerfile.old
Normal file
25
frontend/Dockerfile.old
Normal file
@@ -0,0 +1,25 @@
|
||||
# Use Deno image
|
||||
FROM node
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy project files
|
||||
COPY . .
|
||||
|
||||
ENV NODE_PATH=.
|
||||
ENV NODE_ENV=production
|
||||
RUN npm install
|
||||
|
||||
# Install Next.js dependencies
|
||||
RUN npm run build
|
||||
|
||||
# Move everything to the standalone
|
||||
RUN cp -r public .next/standalone/public
|
||||
RUN cp -r .next/static .next/standalone/.next/static
|
||||
RUN mv .next/standalone/server.js .next/standalone/server.cjs
|
||||
|
||||
RUN rm -r ./node_modules
|
||||
|
||||
# Start the Next.js app
|
||||
CMD ["node", ".next/standalone/server.cjs"]
|
||||
@@ -1,8 +1,6 @@
|
||||
"use server";
|
||||
|
||||
export default async function About() {
|
||||
const res = await fetch("api");
|
||||
console.log(res);
|
||||
return (
|
||||
<div>
|
||||
<div>
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import { dirname } from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
import { FlatCompat } from "@eslint/eslintrc";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname,
|
||||
});
|
||||
|
||||
const eslintConfig = [
|
||||
...compat.extends("next/core-web-vitals", "next/typescript"),
|
||||
];
|
||||
|
||||
export default eslintConfig;
|
||||
@@ -1 +1 @@
|
||||
export const API_URL = `http://localhost:${process.env.NEXT_PUBLIC_BACKEND_PORT}`;
|
||||
export const API_URL = process.env.NEXT_PUBLIC_API_URL ?? "";
|
||||
|
||||
@@ -5,6 +5,7 @@ import IUser from "./interfaces/IUser";
|
||||
|
||||
export async function middleware(request: NextRequest) {
|
||||
const sessionCookie = request.cookies.get("auth_token")?.value;
|
||||
// console.log(sessionCookie);
|
||||
if (!sessionCookie) {
|
||||
return NextResponse.redirect(
|
||||
new URL(
|
||||
@@ -15,18 +16,22 @@ export async function middleware(request: NextRequest) {
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(API_URL);
|
||||
const res = await fetch(`${API_URL}/users/me`, {
|
||||
headers: { Authorization: `Bearer ${sessionCookie}` },
|
||||
});
|
||||
const js: ApiResponse<IUser> = await res.json();
|
||||
if (js.status === "Error")
|
||||
if (js.status === "Error") {
|
||||
console.log(js.message);
|
||||
return NextResponse.redirect(
|
||||
new URL(
|
||||
`/login?redirectTo=${encodeURIComponent(request.url)}`,
|
||||
request.url,
|
||||
),
|
||||
);
|
||||
}
|
||||
} catch (e: any) {
|
||||
console.log(e);
|
||||
return NextResponse.redirect(
|
||||
new URL(
|
||||
`/login?redirectTo=${encodeURIComponent(request.url)}`,
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
import type { NextConfig } from "next";
|
||||
|
||||
const apiUrl =
|
||||
process.env.NODE_ENV !== "production"
|
||||
? `http://localhost:${process.env.BACKEND_PORT ?? 3001}`
|
||||
: `https://${process.env.SERVER_NAME}/api`;
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
/* config options here */
|
||||
output: "standalone",
|
||||
// webpack: (config) => {
|
||||
// config.resolve.alias["@"] = path.resolve(__dirname, "./");
|
||||
// return config;
|
||||
// },
|
||||
images: {
|
||||
remotePatterns: [
|
||||
{
|
||||
@@ -13,6 +22,7 @@ const nextConfig: NextConfig = {
|
||||
},
|
||||
env: {
|
||||
NEXT_PUBLIC_BACKEND_PORT: process.env.BACKEND_PORT,
|
||||
NEXT_PUBLIC_API_URL: apiUrl,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user