feat: optimize docker compose for dashboard and api (#578)
* chore: use turbo for build * fix docker compose file and remove backend * chore: update .dockerignore to include additional files and directories for improved build management * copy everything in both docke filed * refactor: streamline Dockerfile to copy entire dashboard app and remove unnecessary node_modules references * update api to use turbo to start * run ls la for docker files * update cmd commands * update cmds to use node * fix: add redis url to docker compose * fix: reduce memory allocation for dashboard build in Dockerfile * debug dashboard build * update api docker file * update dashboard * add tsconfig * chore: add echo to dockerfile * fix: change echo to run * chore: install pnpm before switching to non-root user in Dockerfile * refactor: update start commands in package.json and Dockerfiles to use pnpm * install turbo * use turbo 1.10.16 * update turbo config * fix: update CMD in Dockerfile to run the API directly using Node.js * change * add commands to turbo.json * copy over turbo * add workspace * fix: update start commands in package.json to specify ports for dashboard and API * publish docker images * add dev branch * update compose * build only for amd64 platform * refactor: update docker-compose to use pre-built images and remove build context * coolify-dockertest * point to latest * chore: update docker-compose to use specific version tags for API and dashboard images * remove envs for docker file * 0.1.3 * use dynamic env * 0.1.4 * add PUBLIC_IS_SELFHOSTED=true * chore: update docker-compose to use version 0.1.5 for API and dashboard images * use static for PUBLIC_IS_SELFHOSTED * disable cache for tag * use 0.1.7 * add PUBLIC_IS_SELFHOSTED=true * comment out caching * update docker-compose to use version 0.1.8 for API and dashboard images * update api port * use tag 0.1.9 * add cache * use latest tag in compose file
This commit is contained in:
@@ -1,81 +0,0 @@
|
||||
# ----------- Build Stage -----------
|
||||
FROM node:18.18.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 PUBLIC_IS_SELFHOSTED=true \
|
||||
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.18.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 \
|
||||
PUBLIC_IS_SELFHOSTED=true \
|
||||
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,8 +1,8 @@
|
||||
import { getSupabase, supabase } from '$lib/utils/functions/supabase';
|
||||
|
||||
import type { CurrentOrg } from '$lib/utils/types/org';
|
||||
import { PUBLIC_IS_SELFHOSTED } from '$env/static/public';
|
||||
import type { MetaTagsProps } from 'svelte-meta-tags';
|
||||
import { PUBLIC_IS_SELFHOSTED } from '$env/static/public';
|
||||
import { blockedSubdomain } from '$lib/utils/constants/app';
|
||||
import { dev } from '$app/environment';
|
||||
import { env } from '$env/dynamic/private';
|
||||
|
||||
Reference in New Issue
Block a user