Commit 7f76a51a authored by jorke's avatar jorke

Merge branch 'dev' of https://dev.kpk.go.id/gitlab/jorke/presence into dev

parents 5f9b580a 56515d4e
FROM node:18-alpine
WORKDIR /app
# 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
COPY src ./src
COPY public ./public
COPY styles ./styles
COPY next.config.js .
COPY tailwind.config.js .
COPY postcss.config.js .
COPY theme.config.js .
COPY jsconfig.json .
# COPY tsconfig.json .
# COPY middleware.ts .
# 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 run time
# ENV NEXT_TELEMETRY_DISABLED 1
# Note: Don't expose ports here, Compose will handle that for us
# Start Next.js in development mode based on the preferred package manager
CMD \
if [ -f yarn.lock ]; then yarn dev; \
elif [ -f package-lock.json ]; then npm run dev; \
elif [ -f pnpm-lock.yaml ]; then pnpm dev; \
else yarn dev; \
fi
\ No newline at end of file
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 yarn global add 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 src ./src
COPY public ./public
COPY styles ./styles
COPY next.config.js .
COPY tailwind.config.js .
COPY postcss.config.js .
COPY theme.config.js .
COPY jsconfig.json .
# COPY tsconfig.json .
# COPY middleware.ts .
# Environment variables must be present at build time
# https://github.com/vercel/next.js/discussions/14030
ARG NEXTAUTH_URL
ENV NEXTAUTH_URL=${NEXTAUTH_URL}
ARG NEXTAUTH_PUBLIC_API_URL
ENV NEXTAUTH_PUBLIC_API_URL=${NEXTAUTH_PUBLIC_API_URL}
ARG NEXT_PUBLIC_API_GEOLOCATION_KEY
ENV NEXT_PUBLIC_API_GEOLOCATION_KEY=${NEXT_PUBLIC_API_GEOLOCATION_KEY}
ARG NODE_ENV=${NODE_ENV:-production}
ENV NODE_ENV=${NODE_ENV}
ARG NEXTAUTH_SECRET
ENV NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
# 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 yarn 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
COPY --from=builder /app/src ./src
COPY --from=builder /app/styles ./styles
# 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 NEXTAUTH_URL
ENV NEXTAUTH_URL=${NEXTAUTH_URL}
ARG NEXT_PUBLIC_API_URL
ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
ARG NEXT_PUBLIC_API_GEOLOCATION_KEY
ENV NEXT_PUBLIC_API_GEOLOCATION_KEY=${NEXT_PUBLIC_API_GEOLOCATION_KEY}
ARG NODE_ENV=${NODE_ENV:-production}
ENV NODE_ENV=${NODE_ENV}
ARG NEXTAUTH_SECRET
ENV NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
ARG NODE_TLS_REJECT_UNAUTHORIZED
ENV NODE_TLS_REJECT_UNAUTHORIZED=${NODE_TLS_REJECT_UNAUTHORIZED:-0}
# 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"]
\ No newline at end of file
services:
next-app-dev:
container_name: absensi-frontend-dev
image: absensi-frontend-dev
build:
context: .
dockerfile: ./Docker/dev.Dockerfile
# Set environment variables directly in the docker-compose file
environment:
NEXTAUTH_URL: ${NEXTAUTH_URL}
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
# Set envrionment variables based on the .env file
env_file:
- .env
volumes:
- ./src:/app/src
- ./public:/app/public
- ./styles:/app/styles
restart: always
ports:
- 3000:3000
networks:
- absensi-network
networks:
absensi-network:
driver: bridge
services:
next-app:
container_name: absensi-frontend-prod
image: absensi-frontend-prod
build:
context: .
dockerfile: ./Docker/prod.Dockerfile
environment:
NEXTAUTH_URL: ${NEXTAUTH_URL}
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
NEXT_PUBLIC_API_GEOLOCATION_KEY: ${NEXT_PUBLIC_API_GEOLOCATION_KEY}
NODE_ENV: ${NODE_ENV}
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
NODE_TLS_REJECT_UNAUTHORIZED: ${NODE_TLS_REJECT_UNAUTHORIZED:-0}
env_file:
- .env.production
restart: always
ports:
- 3002:3000
networks:
- absensi-network-prod
networks:
absensi-network-prod:
driver: bridge
const webpack = require('webpack');
const withPWA = require('next-pwa')({
dest: 'public',
register: true,
skipWaiting: true,
disable: process.env.NODE_ENV === 'development', // opsional
// disable: process.env.NODE_ENV === 'development', // opsional
});
/** @type {import('next').NextConfig} */
const nextConfig = {
output: "standalone",
eslint: {
ignoreDuringBuilds: true,
},
// konfigurasi lain jika ada
async rewrites() {
return [
......@@ -16,6 +21,12 @@ const nextConfig = {
},
];
},
webpack: (config) => {
config.plugins.push(
new webpack.ContextReplacementPlugin(/face-api/)
);
return config;
},
};
module.exports = withPWA(nextConfig);
"use client";
import { useState } from "react";
export default function AbsensiPage() {
const [waktu] = useState(new Date().toLocaleString());
const handleAbsen = () => {
alert("Absen berhasil pada " + waktu);
};
return (
<main className="p-4">
<h2 className="text-xl font-bold mb-2">Halaman Absensi</h2>
<p>Waktu: {waktu}</p>
<button
onClick={handleAbsen}
className="bg-blue-500 text-white px-4 py-2 rounded mt-4"
>
Absen Sekarang
</button>
</main>
);
}
......@@ -3,10 +3,9 @@
import React, { useEffect, useState } from 'react';
import { Button, Form, Image, Input, message } from 'antd';
import { signIn } from 'next-auth/react';
import { useRouter, useSearchParams } from 'next/navigation';
import { useRouter, useSearchParams } from 'next/navigation';
export default function Login() {
function LoginForm() {
const router = useRouter();
const searchParams = useSearchParams();
const error = searchParams.get('error');
......@@ -75,3 +74,11 @@ export default function Login() {
</div>
);
}
export default function Login() {
return (
<Suspense fallback={null}>
<LoginForm />
</Suspense>
);
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment