Fix: done docker setup

This commit is contained in:
Harshith Mullapudi 2025-06-13 03:48:41 +05:30
parent d111220aca
commit 26661cfd86
14 changed files with 1441 additions and 1367 deletions

View File

@ -1,5 +1,3 @@
"use client";
import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
import type { NodePopupContent, EdgePopupContent } from "./type";
import { getNodeColor } from "./node-colors";

View File

@ -1,5 +1,3 @@
"use client";
import { useState, useMemo, forwardRef } from "react";
import { Graph, type GraphRef } from "./graph";
import { GraphPopovers } from "./graph-popover";
@ -7,7 +5,6 @@ import type { RawTriplet, NodePopupContent, EdgePopupContent } from "./type";
import { createLabelColorMap } from "./node-colors";
import { useTheme } from "remix-themes";
import { toGraphTriplets } from "./utils";
interface GraphVisualizationProps {
@ -29,9 +26,6 @@ export const GraphVisualization = forwardRef<GraphRef, GraphVisualizationProps>(
},
ref,
) => {
const [resolvedTheme] = useTheme();
const isDarkMode = resolvedTheme === "dark";
// Graph state for popovers
const [showNodePopup, setShowNodePopup] = useState<boolean>(false);
const [showEdgePopup, setShowEdgePopup] = useState<boolean>(false);

View File

@ -1,5 +1,3 @@
"use client";
import {
useEffect,
useRef,

View File

@ -1,5 +1,3 @@
"use client";
import { Button } from "./button";
import {
DropdownMenu,

View File

@ -45,6 +45,7 @@
"@remix-run/v1-meta": "^0.1.3",
"@remixicon/react": "^4.2.0",
"@tanstack/react-table": "^8.13.2",
"@prisma/client": "*",
"@tailwindcss/container-queries": "^0.1.1",
"@tailwindcss/postcss": "^4.1.7",
"ai": "4.3.14",
@ -112,6 +113,7 @@
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-turbo": "^2.0.4",
"npm-run-all": "^4.1.5",
"postcss": "^8.4.38",
"postcss-import": "^16.0.1",
"postcss-loader": "^8.1.1",

View File

@ -3,49 +3,54 @@ import compression from "compression";
import express from "express";
import morgan from "morgan";
const viteDevServer =
process.env.NODE_ENV === "production"
? undefined
: await import("vite").then((vite) =>
vite.createServer({
server: { middlewareMode: true },
}),
);
let viteDevServer;
let remixHandler;
const remixHandler = createRequestHandler({
build: viteDevServer
async function init() {
if (process.env.NODE_ENV !== "production") {
const vite = await import("vite");
viteDevServer = await vite.createServer({
server: { middlewareMode: true },
});
}
const build = viteDevServer
? () => viteDevServer.ssrLoadModule("virtual:remix/server-build")
: await import("./build/server/index.js"),
});
: await import("./build/server/index.js");
const app = express();
remixHandler = createRequestHandler({ build });
app.use(compression());
const app = express();
// http://expressjs.com/en/advanced/best-practice-security.html#at-a-minimum-disable-x-powered-by-header
app.disable("x-powered-by");
app.use(compression());
// handle asset requests
if (viteDevServer) {
app.use(viteDevServer.middlewares);
} else {
// Vite fingerprints its assets so we can cache forever.
app.use(
"/assets",
express.static("build/client/assets", { immutable: true, maxAge: "1y" }),
// http://expressjs.com/en/advanced/best-practice-security.html#at-a-minimum-disable-x-powered-by-header
app.disable("x-powered-by");
// handle asset requests
if (viteDevServer) {
app.use(viteDevServer.middlewares);
} else {
// Vite fingerprints its assets so we can cache forever.
app.use(
"/assets",
express.static("build/client/assets", { immutable: true, maxAge: "1y" }),
);
}
// Everything else (like favicon.ico) is cached for an hour. You may want to be
// more aggressive with this caching.
app.use(express.static("build/client", { maxAge: "1h" }));
app.use(morgan("tiny"));
// handle SSR requests
app.all("*", remixHandler);
const port = process.env.REMIX_APP_PORT || 3000;
app.listen(port, () =>
console.log(`Express server listening at http://localhost:${port}`),
);
}
// Everything else (like favicon.ico) is cached for an hour. You may want to be
// more aggressive with this caching.
app.use(express.static("build/client", { maxAge: "1h" }));
app.use(morgan("tiny"));
// handle SSR requests
app.all("*", remixHandler);
const port = process.env.REMIX_APP_PORT || 3000;
app.listen(port, () =>
console.log(`Express server listening at http://localhost:${port}`),
);
init().catch(console.error);

View File

@ -28,6 +28,7 @@ export default defineConfig({
allowedHosts: true,
},
ssr: {
noExternal: ["helix-ts"],
noExternal: ["@core/database", "tailwindcss"],
external: ["@prisma/client"],
},
});

View File

@ -5,7 +5,7 @@ FROM ${NODE_IMAGE} AS pruner
WORKDIR /core
COPY --chown=node:node . .
RUN npx -q turbo@1.10.9 prune --scope=webapp --docker
RUN npx -q turbo@2.5.3 prune --scope=webapp --docker
RUN find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
# Base strategy to have layer caching
@ -60,10 +60,11 @@ WORKDIR /core
RUN corepack enable
ENV NODE_ENV production
COPY --from=base /usr/bin/dumb-init /usr/bin/dumb-init
COPY --from=pruner --chown=node:node /core/out/full/ .
COPY --from=production-deps --chown=node:node /core .
COPY --from=builder --chown=node:node /core/apps/webapp/build/server.js ./apps/webapp/build/server.js
COPY --from=builder --chown=node:node /core/apps/webapp/server.mjs ./apps/webapp/server.mjs
COPY --from=builder --chown=node:node /core/apps/webapp/build ./apps/webapp/build
COPY --from=builder --chown=node:node /core/apps/webapp/public ./apps/webapp/public
COPY --from=builder --chown=node:node /core/scripts ./scripts

View File

@ -0,0 +1,59 @@
version: "3.8"
services:
core:
build:
context: .
dockerfile: Dockerfile
environment:
- NODE_ENV=${NODE_ENV}
- DATABASE_URL=${DATABASE_URL}
- DIRECT_URL=${DIRECT_URL}
- SESSION_SECRET=${SESSION_SECRET}
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
- MAGIC_LINK_SECRET=${MAGIC_LINK_SECRET}
- LOGIN_ORIGIN=${LOGIN_ORIGIN}
- APP_ORIGIN=${APP_ORIGIN}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- REDIS_TLS_DISABLED=${REDIS_TLS_DISABLED}
- NEO4J_URI=${NEO4J_URI}
- NEO4J_USERNAME=${NEO4J_USERNAME}
- NEO4J_PASSWORD=${NEO4J_PASSWORD}
- OPENAI_API_KEY=${OPENAI_API_KEY}
ports:
- "3000:3000"
depends_on:
- postgres
- redis
- neo4j
postgres:
image: postgres:15
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7
ports:
- "6379:6379"
neo4j:
image: neo4j:5
environment:
- NEO4J_AUTH=${NEO4J_AUTH}
ports:
- "7474:7474"
- "7687:7687"
volumes:
- neo4j_data:/data
volumes:
postgres_data:
neo4j_data:

View File

@ -9,10 +9,12 @@ fi
pnpm --filter @core/database db:migrate:deploy
# Copy over required prisma files
mkdir -p apps/webapp/prisma/
mkdir -p apps/webapp/.prisma/
cp packages/database/prisma/schema.prisma apps/webapp/prisma/
cp node_modules/@prisma/engines/*.node apps/webapp/prisma/
cp -r packages/database/node_modules/@prisma/* apps/webapp/.prisma/
# cp node_modules/@prisma/engines/*.node apps/webapp/prisma/
cd /core/apps/webapp
# exec dumb-init pnpm run start:local
NODE_PATH='/core/node_modules/.pnpm/node_modules' exec dumb-init node --max-old-space-size=8192 ./build/server.js
NODE_PATH='/core/node_modules/.pnpm/node_modules' exec dumb-init node --max-old-space-size=8192 ./server.mjs

View File

@ -5,12 +5,12 @@
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"dependencies": {
"@prisma/client": "5.4.1"
"@prisma/client": "5.4.1",
"prisma": "5.4.1"
},
"devDependencies": {
"prisma": "5.4.1",
"rimraf": "6.0.1",
"esbuild": "^0.15.10"
"esbuild": "^0.25.5"
},
"scripts": {
"clean": "rimraf dist",

View File

@ -1,2 +1 @@
export * from "@prisma/client";
export * from "./transaction";

View File

@ -10,7 +10,7 @@
"devDependencies": {
"prisma": "5.4.1",
"rimraf": "6.0.1",
"esbuild": "^0.15.10"
"esbuild": "^0.25.5"
},
"scripts": {
"clean": "rimraf dist",

2631
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff