2024-09-18 04:26:24 +01:00
|
|
|
# ClassroomIO
|
2025-09-21 19:35:41 +01:00
|
|
|
# Project: Self-hosted API and Dashboard
|
|
|
|
|
# Description: This docker-compose file sets up the api and dashboard services for self-hosting.
|
2024-09-18 04:26:24 +01:00
|
|
|
# Author: rotimi-best
|
|
|
|
|
# Date: 2024-09-18
|
|
|
|
|
|
2025-10-04 08:13:01 +01:00
|
|
|
version: "3.8"
|
2024-09-18 04:26:24 +01:00
|
|
|
|
|
|
|
|
services:
|
2025-09-21 19:35:41 +01:00
|
|
|
api:
|
2024-09-19 11:01:56 +01:00
|
|
|
build:
|
2025-09-21 19:35:41 +01:00
|
|
|
context: ./apps/api
|
2025-07-15 18:39:42 +01:00
|
|
|
dockerfile: Dockerfile
|
2025-05-20 01:37:58 +01:00
|
|
|
args:
|
|
|
|
|
- PUBLIC_SUPABASE_ANON_KEY=${PUBLIC_SUPABASE_ANON_KEY}
|
|
|
|
|
- PUBLIC_SUPABASE_URL=${PUBLIC_SUPABASE_URL}
|
|
|
|
|
- CLOUDFLARE_BUCKET_DOMAIN=${CLOUDFLARE_BUCKET_DOMAIN}
|
|
|
|
|
- CLOUDFLARE_ACCESS_KEY=${CLOUDFLARE_ACCESS_KEY}
|
|
|
|
|
- CLOUDFLARE_SECRET_ACCESS_KEY=${CLOUDFLARE_SECRET_ACCESS_KEY}
|
|
|
|
|
- CLOUDFLARE_ACCOUNT_ID=${CLOUDFLARE_ACCOUNT_ID}
|
|
|
|
|
- CLOUDFLARE_BUCKET_ID=${CLOUDFLARE_BUCKET_ID}
|
|
|
|
|
- SMTP_HOST=${SMTP_HOST}
|
|
|
|
|
- SMTP_USER=${SMTP_USER}
|
|
|
|
|
- SMTP_PASSWORD=${SMTP_PASSWORD}
|
|
|
|
|
- SMTP_PORT=${SMTP_PORT}
|
|
|
|
|
ports:
|
2025-10-04 08:13:01 +01:00
|
|
|
- "3002:3002"
|
2024-09-19 11:01:56 +01:00
|
|
|
volumes:
|
2025-07-29 00:03:37 +01:00
|
|
|
# Node modules (optional - for faster development)
|
2025-09-21 19:35:41 +01:00
|
|
|
- ./apps/api/node_modules:/app/node_modules
|
2025-07-29 00:03:37 +01:00
|
|
|
# Build output directory (if you want to access built files)
|
2025-09-21 19:35:41 +01:00
|
|
|
- ./apps/api/dist:/app/dist
|
2024-09-18 04:26:24 +01:00
|
|
|
environment:
|
|
|
|
|
- NODE_ENV=production
|
|
|
|
|
# Supabase - Database
|
|
|
|
|
- PUBLIC_SUPABASE_ANON_KEY=${PUBLIC_SUPABASE_ANON_KEY}
|
|
|
|
|
- PUBLIC_SUPABASE_URL=${PUBLIC_SUPABASE_URL}
|
|
|
|
|
# Cloudflare - Video upload
|
|
|
|
|
- CLOUDFLARE_BUCKET_DOMAIN=${CLOUDFLARE_BUCKET_DOMAIN}
|
|
|
|
|
- CLOUDFLARE_ACCESS_KEY=${CLOUDFLARE_ACCESS_KEY}
|
|
|
|
|
- CLOUDFLARE_SECRET_ACCESS_KEY=${CLOUDFLARE_SECRET_ACCESS_KEY}
|
|
|
|
|
- CLOUDFLARE_ACCOUNT_ID=${CLOUDFLARE_ACCOUNT_ID}
|
|
|
|
|
# SMTP - Emails
|
|
|
|
|
- SMTP_HOST=${SMTP_HOST}
|
|
|
|
|
- SMTP_USER=${SMTP_USER}
|
|
|
|
|
- SMTP_PASSWORD=${SMTP_PASSWORD}
|
|
|
|
|
- SMTP_PORT=${SMTP_PORT}
|
2025-06-09 01:38:57 +01:00
|
|
|
- SMTP_SENDER=${SMTP_SENDER}
|
2024-09-18 04:26:24 +01:00
|
|
|
|
|
|
|
|
dashboard:
|
2024-09-19 11:01:56 +01:00
|
|
|
build:
|
2025-05-20 01:37:58 +01:00
|
|
|
context: .
|
2024-09-19 11:01:56 +01:00
|
|
|
dockerfile: ./apps/dashboard/Dockerfile
|
2024-09-20 11:34:37 +01:00
|
|
|
args:
|
|
|
|
|
- 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}
|
2025-05-20 01:37:58 +01:00
|
|
|
ports:
|
2025-10-04 08:13:01 +01:00
|
|
|
- "3000:3000"
|
2024-09-20 09:10:05 +01:00
|
|
|
volumes:
|
|
|
|
|
- .:/app
|
|
|
|
|
- /app/node_modules
|
|
|
|
|
- /app/apps/dashboard/node_modules
|
2024-09-18 04:26:24 +01:00
|
|
|
environment:
|
2025-09-07 10:24:34 +01:00
|
|
|
- PUBLIC_IS_SELFHOSTED=true
|
2024-09-18 04:26:24 +01:00
|
|
|
# Supabase - Database
|
|
|
|
|
- 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} # yourdomain.com
|
|
|
|
|
- PRIVATE_APP_SUBDOMAINS=${PRIVATE_APP_SUBDOMAINS} # app (if you are using app.yourdomain.com for the dashboard)
|
|
|
|
|
- UNSPLASH_API_KEY=${UNSPLASH_API_KEY}
|
|
|
|
|
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
2025-09-21 19:35:41 +01:00
|
|
|
- PUBLIC_SERVER_URL=${PUBLIC_SERVER_URL} # this is the url to the api service
|
2024-09-18 04:26:24 +01:00
|
|
|
- PUBLIC_IP_REGISTRY_KEY=${PUBLIC_IP_REGISTRY_KEY}
|
|
|
|
|
depends_on:
|
2025-09-21 19:35:41 +01:00
|
|
|
- api
|