feat: Finally support a docker compose files that works (#555)
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# ----------- Build Stage -----------
|
||||
FROM node:18.17.0-alpine AS builder
|
||||
|
||||
# Add build arguments
|
||||
ARG PUBLIC_SUPABASE_URL
|
||||
ARG PUBLIC_SUPABASE_ANON_KEY
|
||||
ARG PRIVATE_SUPABASE_SERVICE_ROLE
|
||||
ARG PRIVATE_APP_HOST
|
||||
ARG PRIVATE_APP_SUBDOMAINS
|
||||
ARG UNSPLASH_API_KEY
|
||||
ARG OPENAI_API_KEY
|
||||
ARG PUBLIC_SERVER_URL
|
||||
ARG PUBLIC_IP_REGISTRY_KEY
|
||||
|
||||
WORKDIR /cio
|
||||
|
||||
# Install pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||||
|
||||
# Copy monorepo files
|
||||
COPY pnpm-lock.yaml package.json pnpm-workspace.yaml ./
|
||||
COPY apps/dashboard/package.json apps/dashboard/
|
||||
COPY packages/tsconfig ./packages/tsconfig
|
||||
COPY packages/shared ./packages/shared
|
||||
|
||||
# Install all dependencies (monorepo context)
|
||||
RUN pnpm install
|
||||
|
||||
# Copy the rest of the dashboard app
|
||||
COPY apps/dashboard ./apps/dashboard
|
||||
|
||||
# Set env vars for SvelteKit to use Node adapter
|
||||
ENV IS_SELFHOSTED=true \
|
||||
DEPLOYMENT_PROVIDER=docker \
|
||||
PUBLIC_SUPABASE_URL=$PUBLIC_SUPABASE_URL \
|
||||
PUBLIC_SUPABASE_ANON_KEY=$PUBLIC_SUPABASE_ANON_KEY \
|
||||
PRIVATE_SUPABASE_SERVICE_ROLE=$PRIVATE_SUPABASE_SERVICE_ROLE \
|
||||
PRIVATE_APP_HOST=$PRIVATE_APP_HOST \
|
||||
PRIVATE_APP_SUBDOMAINS=$PRIVATE_APP_SUBDOMAINS \
|
||||
UNSPLASH_API_KEY=$UNSPLASH_API_KEY \
|
||||
OPENAI_API_KEY=$OPENAI_API_KEY \
|
||||
PUBLIC_SERVER_URL=$PUBLIC_SERVER_URL \
|
||||
PUBLIC_IP_REGISTRY_KEY=$PUBLIC_IP_REGISTRY_KEY
|
||||
|
||||
# Build the dashboard app
|
||||
WORKDIR /cio/apps/dashboard
|
||||
RUN pnpm install
|
||||
RUN NODE_OPTIONS=--max-old-space-size=4096 pnpm build
|
||||
|
||||
# ----------- Production Stage -----------
|
||||
FROM node:18.17.0-alpine AS runner
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install pnpm
|
||||
RUN corepack enable && corepack prepare pnpm@latest --activate
|
||||
|
||||
# Copy only production node_modules for dashboard
|
||||
COPY --from=builder ./cio/node_modules ./node_modules
|
||||
COPY --from=builder ./cio/package.json ./package.json
|
||||
COPY --from=builder ./cio/apps/dashboard/node_modules ./apps/dashboard/node_modules
|
||||
COPY --from=builder ./cio/apps/dashboard/package.json ./apps/dashboard/package.json
|
||||
COPY --from=builder ./cio/apps/dashboard/build ./apps/dashboard/build
|
||||
|
||||
# Expose the port (default for SvelteKit Node adapter)
|
||||
EXPOSE 3000
|
||||
|
||||
# Set environment variables for production
|
||||
ENV NODE_ENV=production \
|
||||
IS_SELFHOSTED=true \
|
||||
DEPLOYMENT_PROVIDER=docker \
|
||||
PUBLIC_SUPABASE_URL=$PUBLIC_SUPABASE_URL \
|
||||
PUBLIC_SUPABASE_ANON_KEY=$PUBLIC_SUPABASE_ANON_KEY \
|
||||
PRIVATE_SUPABASE_SERVICE_ROLE=$PRIVATE_SUPABASE_SERVICE_ROLE \
|
||||
PRIVATE_APP_HOST=$PRIVATE_APP_HOST \
|
||||
PRIVATE_APP_SUBDOMAINS=$PRIVATE_APP_SUBDOMAINS \
|
||||
UNSPLASH_API_KEY=$UNSPLASH_API_KEY \
|
||||
OPENAI_API_KEY=$OPENAI_API_KEY \
|
||||
PUBLIC_SERVER_URL=$PUBLIC_SERVER_URL \
|
||||
PUBLIC_IP_REGISTRY_KEY=$PUBLIC_IP_REGISTRY_KEY
|
||||
|
||||
# Start the app
|
||||
CMD ["pnpm", "dashboard:start"]
|
||||
@@ -1,42 +0,0 @@
|
||||
FROM node:18-alpine
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN npm install -g pnpm
|
||||
|
||||
COPY ./package.json ./
|
||||
COPY ./pnpm-lock.yaml ./
|
||||
|
||||
# Set environment variables
|
||||
ENV IS_SELFHOSTED=true
|
||||
ENV DEPLOYMENT_PROVIDER=docker
|
||||
ENV PUBLIC_SUPABASE_URL=$PUBLIC_SUPABASE_URL
|
||||
ENV PUBLIC_SUPABASE_ANON_KEY=$PUBLIC_SUPABASE_ANON_KEY
|
||||
ENV PRIVATE_SUPABASE_SERVICE_ROLE=$PRIVATE_SUPABASE_SERVICE_ROLE
|
||||
ENV PRIVATE_APP_HOST=$PRIVATE_APP_HOST
|
||||
ENV PRIVATE_APP_SUBDOMAINS=$PRIVATE_APP_SUBDOMAINS
|
||||
ENV UNSPLASH_API_KEY=$UNSPLASH_API_KEY
|
||||
ENV OPENAI_API_KEY=$OPENAI_API_KEY
|
||||
ENV PUBLIC_SERVER_URL=$PUBLIC_SERVER_URL
|
||||
ENV PUBLIC_IP_REGISTRY_KEY=$PUBLIC_IP_REGISTRY_KEY
|
||||
ENV NODE_OPTIONS="--max-old-space-size=8192"
|
||||
|
||||
RUN pnpm i
|
||||
|
||||
COPY . .
|
||||
|
||||
WORKDIR /app/apps/dashboard
|
||||
|
||||
RUN pnpm i
|
||||
RUN pnpm build
|
||||
RUN pnpm prune --production
|
||||
|
||||
EXPOSE 5000
|
||||
|
||||
ENV NODE_ENV=production
|
||||
CMD [ "node", "apps/dashboard/build" ]
|
||||
|
||||
# EXPOSE 5000
|
||||
|
||||
# CMD ["pnpm", "start"]
|
||||
# CMD [ "sh", "-c", "ls -la && cd apps/dashboard && pnpm build && pnpm start" ]
|
||||
@@ -1,55 +0,0 @@
|
||||
# FROM node:18-alpine
|
||||
|
||||
# WORKDIR /app
|
||||
|
||||
# RUN npm install -g pnpm
|
||||
|
||||
# COPY . .
|
||||
|
||||
|
||||
|
||||
# # Install dependencies and build
|
||||
# RUN pnpm install --frozen-lockfile && \
|
||||
# cd apps/dashboard && \
|
||||
# pnpm build || { echo "Build failed! Error output above."; exit 1; }
|
||||
|
||||
# EXPOSE 5004
|
||||
|
||||
# ENV NODE_ENV=production
|
||||
# CMD [ "pnpm", "dashboard:start" ]
|
||||
|
||||
FROM node:18-alpine AS builder
|
||||
WORKDIR /app
|
||||
RUN npm install -g pnpm
|
||||
COPY package.json .
|
||||
COPY pnpm-lock.yaml .
|
||||
RUN pnpm install --frozen-lockfile
|
||||
COPY . .
|
||||
|
||||
# Set environment variables
|
||||
ENV IS_SELFHOSTED=true
|
||||
ENV DEPLOYMENT_PROVIDER=docker
|
||||
ENV PUBLIC_SUPABASE_URL=$PUBLIC_SUPABASE_URL
|
||||
ENV PUBLIC_SUPABASE_ANON_KEY=$PUBLIC_SUPABASE_ANON_KEY
|
||||
ENV PRIVATE_SUPABASE_SERVICE_ROLE=$PRIVATE_SUPABASE_SERVICE_ROLE
|
||||
ENV PRIVATE_APP_HOST=$PRIVATE_APP_HOST
|
||||
ENV PRIVATE_APP_SUBDOMAINS=$PRIVATE_APP_SUBDOMAINS
|
||||
ENV UNSPLASH_API_KEY=$UNSPLASH_API_KEY
|
||||
ENV OPENAI_API_KEY=$OPENAI_API_KEY
|
||||
ENV PUBLIC_SERVER_URL=$PUBLIC_SERVER_URL
|
||||
ENV PUBLIC_IP_REGISTRY_KEY=$PUBLIC_IP_REGISTRY_KEY
|
||||
ENV NODE_OPTIONS="--max-old-space-size=10240"
|
||||
|
||||
WORKDIR /app/apps/dashboard
|
||||
RUN pnpm install --frozen-lockfile
|
||||
RUN IS_SELFHOSTED=true DEPLOYMENT_PROVIDER=docker pnpm build
|
||||
RUN pnpm prune --production
|
||||
|
||||
FROM node:18-alpine
|
||||
WORKDIR /app
|
||||
COPY --from=builder /app/apps/dashboard/build build/
|
||||
COPY --from=builder /app/apps/dashboard/node_modules node_modules/
|
||||
COPY package.json .
|
||||
EXPOSE 3004
|
||||
ENV NODE_ENV=production
|
||||
CMD [ "node", "build" ]
|
||||
@@ -23,9 +23,6 @@
|
||||
"@carbon/charts-svelte": "^1.13.6",
|
||||
"@lemonsqueezy/lemonsqueezy.js": "^2.2.0",
|
||||
"@polar-sh/sveltekit": "^0.2.1",
|
||||
"@sentry/browser": "^7.61.0",
|
||||
"@sentry/integrations": "^7.61.0",
|
||||
"@sentry/vite-plugin": "^2.6.2",
|
||||
"@supabase/supabase-js": "^2.31.0",
|
||||
"@sveltejs/adapter-auto": "^2.1.0",
|
||||
"@sveltejs/adapter-node": "^1.3.1",
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
import { dev } from '$app/environment';
|
||||
import * as Sentry from '@sentry/browser';
|
||||
import { CaptureConsole } from '@sentry/integrations';
|
||||
// import * as Sentry from '@sentry/browser';
|
||||
// import { CaptureConsole } from '@sentry/integrations';
|
||||
|
||||
export const initSentry = (): void => {
|
||||
if (dev) return;
|
||||
|
||||
Sentry.init({
|
||||
dsn: 'https://c966f7e8cb1d4306be20b26bb4f0cc96@o476906.ingest.sentry.io/5999999',
|
||||
integrations: [
|
||||
new CaptureConsole({
|
||||
levels: ['error']
|
||||
}),
|
||||
new Sentry.Replay()
|
||||
],
|
||||
environment: 'production',
|
||||
replaysSessionSampleRate: 0.5,
|
||||
replaysOnErrorSampleRate: 1.0
|
||||
});
|
||||
// Sentry.init({
|
||||
// dsn: 'https://c966f7e8cb1d4306be20b26bb4f0cc96@o476906.ingest.sentry.io/5999999',
|
||||
// integrations: [
|
||||
// new CaptureConsole({
|
||||
// levels: ['error']
|
||||
// }),
|
||||
// new Sentry.Replay()
|
||||
// ],
|
||||
// environment: 'production',
|
||||
// replaysSessionSampleRate: 0.5,
|
||||
// replaysOnErrorSampleRate: 1.0
|
||||
// });
|
||||
};
|
||||
|
||||
export const setSentryUser = (user: Record<string, any>): void => {
|
||||
if (dev) return;
|
||||
|
||||
Sentry.setUser(user);
|
||||
// Sentry.setUser(user);
|
||||
};
|
||||
|
||||
@@ -9,14 +9,14 @@ export default ({ mode }) => {
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
scss: {
|
||||
silenceDeprecations: ['legacy-js-api'],
|
||||
},
|
||||
},
|
||||
silenceDeprecations: ['legacy-js-api']
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: [sveltekit()],
|
||||
server: getServer(process.env),
|
||||
build: {
|
||||
sourcemap: true
|
||||
sourcemap: false
|
||||
},
|
||||
optimizeDeps: {
|
||||
entries: ['src/routes/**/+*.{js,ts,svelte}']
|
||||
|
||||
Reference in New Issue
Block a user