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:
Rotimi Best
2025-10-11 13:27:50 +01:00
committed by GitHub
parent 27ee51155e
commit 168866c81b
44 changed files with 848 additions and 2388 deletions
-81
View File
@@ -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 -1
View File
@@ -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';