Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 71b30ba8c5 | |||
| e9ea253021 |
@@ -46,13 +46,14 @@ ENV PORT=3000
|
|||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
# Copy standalone output and static files
|
# Copy standalone output and static files
|
||||||
# Create directory as root first, then copy with chown
|
|
||||||
RUN mkdir -p /app/.next/cache && chown -R nextjs:nodejs /app/.next/cache
|
|
||||||
|
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||||
|
|
||||||
|
# Ensure the cache directory specifically is writeable (Mintel Standard #16)
|
||||||
|
# We copy a small directory or just create it via COPY to avoid RUN chown permission issues
|
||||||
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/cache ./.next/cache
|
||||||
|
|
||||||
USER nextjs
|
USER nextjs
|
||||||
|
|
||||||
CMD ["node", "server.js"]
|
CMD ["node", "server.js"]
|
||||||
|
|||||||
@@ -118,6 +118,8 @@ export default async function Image() {
|
|||||||
{/* Title */}
|
{/* Title */}
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "row",
|
||||||
fontSize: "72px",
|
fontSize: "72px",
|
||||||
fontWeight: "900",
|
fontWeight: "900",
|
||||||
color: "#0f172a",
|
color: "#0f172a",
|
||||||
@@ -126,12 +128,19 @@ export default async function Image() {
|
|||||||
letterSpacing: "-0.02em",
|
letterSpacing: "-0.02em",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
MB Grid <span style={{ color: "#10b981" }}>Solutions</span>
|
MB Grid{" "}
|
||||||
|
<span
|
||||||
|
style={{ color: "#10b981", display: "flex", marginLeft: "16px" }}
|
||||||
|
>
|
||||||
|
Solutions
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Subtitle */}
|
{/* Subtitle */}
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
fontSize: "32px",
|
fontSize: "32px",
|
||||||
fontWeight: "500",
|
fontWeight: "500",
|
||||||
color: "#64748b",
|
color: "#64748b",
|
||||||
@@ -140,9 +149,8 @@ export default async function Image() {
|
|||||||
lineHeight: 1.4,
|
lineHeight: 1.4,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Energiekabelprojekte & Technische Beratung
|
<span>Energiekabelprojekte & Technische Beratung</span>
|
||||||
<br />
|
<span>bis 110 kV</span>
|
||||||
bis 110 kV
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -118,6 +118,8 @@ export default async function Image() {
|
|||||||
{/* Title */}
|
{/* Title */}
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "row",
|
||||||
fontSize: "72px",
|
fontSize: "72px",
|
||||||
fontWeight: "900",
|
fontWeight: "900",
|
||||||
color: "#0f172a",
|
color: "#0f172a",
|
||||||
@@ -126,12 +128,19 @@ export default async function Image() {
|
|||||||
letterSpacing: "-0.02em",
|
letterSpacing: "-0.02em",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
MB Grid <span style={{ color: "#10b981" }}>Solutions</span>
|
MB Grid{" "}
|
||||||
|
<span
|
||||||
|
style={{ color: "#10b981", display: "flex", marginLeft: "16px" }}
|
||||||
|
>
|
||||||
|
Solutions
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Subtitle */}
|
{/* Subtitle */}
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
fontSize: "32px",
|
fontSize: "32px",
|
||||||
fontWeight: "500",
|
fontWeight: "500",
|
||||||
color: "#64748b",
|
color: "#64748b",
|
||||||
@@ -140,9 +149,8 @@ export default async function Image() {
|
|||||||
lineHeight: 1.4,
|
lineHeight: 1.4,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Energiekabelprojekte & Technische Beratung
|
<span>Energiekabelprojekte & Technische Beratung</span>
|
||||||
<br />
|
<span>bis 110 kV</span>
|
||||||
bis 110 kV
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -32,48 +32,60 @@ export class PinoLoggerService implements LoggerService {
|
|||||||
|
|
||||||
trace(msg: string, ...args: unknown[]) {
|
trace(msg: string, ...args: unknown[]) {
|
||||||
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).trace(args[0] as object, msg, ...args.slice(1));
|
(this.logger as any).trace(args[0] as object, msg, ...args.slice(1));
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).trace(msg, ...args);
|
(this.logger as any).trace(msg, ...args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debug(msg: string, ...args: unknown[]) {
|
debug(msg: string, ...args: unknown[]) {
|
||||||
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).debug(args[0] as object, msg, ...args.slice(1));
|
(this.logger as any).debug(args[0] as object, msg, ...args.slice(1));
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).debug(msg, ...args);
|
(this.logger as any).debug(msg, ...args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
info(msg: string, ...args: unknown[]) {
|
info(msg: string, ...args: unknown[]) {
|
||||||
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).info(args[0] as object, msg, ...args.slice(1));
|
(this.logger as any).info(args[0] as object, msg, ...args.slice(1));
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).info(msg, ...args);
|
(this.logger as any).info(msg, ...args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
warn(msg: string, ...args: unknown[]) {
|
warn(msg: string, ...args: unknown[]) {
|
||||||
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).warn(args[0] as object, msg, ...args.slice(1));
|
(this.logger as any).warn(args[0] as object, msg, ...args.slice(1));
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).warn(msg, ...args);
|
(this.logger as any).warn(msg, ...args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
error(msg: string, ...args: unknown[]) {
|
error(msg: string, ...args: unknown[]) {
|
||||||
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).error(args[0] as object, msg, ...args.slice(1));
|
(this.logger as any).error(args[0] as object, msg, ...args.slice(1));
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).error(msg, ...args);
|
(this.logger as any).error(msg, ...args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fatal(msg: string, ...args: unknown[]) {
|
fatal(msg: string, ...args: unknown[]) {
|
||||||
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
if (args.length > 0 && typeof args[0] === "object" && args[0] !== null) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).fatal(args[0] as object, msg, ...args.slice(1));
|
(this.logger as any).fatal(args[0] as object, msg, ...args.slice(1));
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
(this.logger as any).fatal(msg, ...args);
|
(this.logger as any).fatal(msg, ...args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,15 @@ import * as Sentry from "@sentry/nextjs";
|
|||||||
import { config } from "./lib/config";
|
import { config } from "./lib/config";
|
||||||
|
|
||||||
if (config.errors.glitchtip.enabled) {
|
if (config.errors.glitchtip.enabled) {
|
||||||
|
console.log("Initializing Sentry in Edge runtime...", {
|
||||||
|
environment: config.target || "production",
|
||||||
|
});
|
||||||
Sentry.init({
|
Sentry.init({
|
||||||
dsn: config.errors.glitchtip.dsn,
|
dsn: config.errors.glitchtip.dsn,
|
||||||
tracesSampleRate: 1.0,
|
tracesSampleRate: 1.0,
|
||||||
debug: config.isDevelopment,
|
debug: true, // Force debug for now to see why it's failing
|
||||||
environment: config.target || "production",
|
environment: config.target || "production",
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
console.warn("Sentry is DISABLED in Edge runtime (missing DSN)");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user