diff --git a/Dockerfile b/Dockerfile index 38d5672..4fa4749 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,15 +9,8 @@ RUN pnpm install --frozen-lockfile COPY . . RUN pnpm run build -RUN pnpm prune --prod FROM node:22-alpine WORKDIR /app COPY --from=build /app/build /app/build -COPY --from=build /app/node_modules /app/node_modules -RUN echo '{"type":"module"}' > /app/package.json - -EXPOSE 3000 -ENV NODE_ENV=production -ENV HOST=0.0.0.0 -CMD [ "node", "./build/headplane/server.js" ] +CMD [ "node", "./build/server/index.js" ] diff --git a/app/routes/users/components/manage-banner.tsx b/app/routes/users/components/manage-banner.tsx index 1b75f3f..8905e2a 100644 --- a/app/routes/users/components/manage-banner.tsx +++ b/app/routes/users/components/manage-banner.tsx @@ -1,7 +1,7 @@ import { Building2, House, Key } from 'lucide-react'; import Card from '~/components/Card'; import Link from '~/components/Link'; -import type { HeadplaneConfig } from '~server/context/parser'; +import type { HeadplaneConfig } from '~/server/config/schema'; import CreateUser from '../dialogs/create-user'; interface Props { diff --git a/app/server/index.ts b/app/server/index.ts index c2955aa..78c14b8 100644 --- a/app/server/index.ts +++ b/app/server/index.ts @@ -1,5 +1,4 @@ -import { constants, access } from 'node:fs/promises'; -import { env, exit, versions } from 'node:process'; +import { env, versions } from 'node:process'; import type { UpgradeWebSocket } from 'hono/ws'; import { createHonoServer } from 'react-router-hono-server/node'; import type { WebSocket } from 'ws'; @@ -20,13 +19,6 @@ declare global { // MARK: Side-Effects // This module contains a side-effect because everything running here // exists for the lifetime of the process, making it appropriate. -try { - await access('./node_modules/react-router', constants.F_OK | constants.R_OK); -} catch { - log.error('server', 'Cannot locate `node_modules`, please install them'); - exit(1); -} - log.info('server', 'Running Node.js %s', versions.node); configureLogger(env[envVariables.debugLog]); const config = await loadConfig( @@ -73,14 +65,18 @@ declare module 'react-router' { interface AppLoadContext extends LoadContext {} } -export default await createHonoServer({ +export default createHonoServer({ useWebSocket: true, overrideGlobalObjects: true, port: config.server.port, hostname: config.server.host, - getLoadContext(c, { build, mode }) { - // This is the place where we can handle reverse proxy translation + // Only log in development mode + defaultLogger: import.meta.env.DEV, + getLoadContext() { + // TODO: This is the place where we can handle reverse proxy translation + // This is better than doing it in the OIDC client, since we can do it + // for all requests, not just OIDC ones. return appLoadContext; }, diff --git a/nix/package.nix b/nix/package.nix index 3eff01f..1afd3bb 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -29,20 +29,17 @@ stdenv.mkDerivation (finalAttrs: { buildPhase = '' runHook preBuild pnpm build - pnpm prune --prod runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/{bin,share/headplane} - cp -r {build,node_modules} $out/share/headplane/ - sed -i "s;$PWD;../..;" $out/share/headplane/build/headplane/server.js + cp -r build $out/share/headplane/ + sed -i "s;$PWD;../..;" $out/share/headplane/build/server/index.js makeWrapper ${lib.getExe nodejs_22} $out/bin/headplane \ --chdir $out/share/headplane \ - --set BUILD_PATH $out/share/headplane/build \ - --set NODE_ENV production \ - --add-flags $out/share/headplane/build/headplane/server.js + --add-flags $out/share/headplane/build/server/index.js runHook postInstall ''; }) diff --git a/react-router.config.ts b/react-router.config.ts index 869902c..e1b4c48 100644 --- a/react-router.config.ts +++ b/react-router.config.ts @@ -3,4 +3,8 @@ import type { Config } from '@react-router/dev/config'; export default { basename: '/admin/', ssr: true, + future: { + unstable_optimizeDeps: true, + unstable_splitRouteModules: 'enforce', + }, } satisfies Config; diff --git a/vite.config.ts b/vite.config.ts index 163b5b9..f8311a1 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -26,6 +26,10 @@ export default defineConfig({ plugins: [tailwindcss, autoprefixer], }, }, + ssr: { + target: 'node', + noExternal: true, + }, define: { __VERSION__: JSON.stringify(version), __PREFIX__: JSON.stringify(prefix),