Files
classroomio/docker-compose.yaml
T
Rotimi BestandIniubong Obonguko 82be557a42 chore: move backend to hono + typescript (#558)
* feat: setup secure presigned uploads and downloads

* clean up

* update lock

* Get presigned url finally working

* 557: Migrate backend to hono + ts

* chore: update Dockerfile and package.json for backend configuration

* add dev command

* remove unused packages

* Enhance backend API and frontend components for course management

- Updated CORS configuration in the backend to allow specific methods and headers.
- Refactored lesson download endpoint to use a new route for PDF downloads.
- Removed unused certificate download functionality from the lesson router.
- Updated frontend components to reflect changes in API endpoints and improve video upload functionality.
- Introduced new video upload component and adjusted video handling in lesson materials.
- Cleaned up unnecessary imports and optimized component structure for better performance.

* PR cleanups

* Enhance email configuration by adding SMTP_SENDER environment variable

- Updated docker-compose.yaml to include SMTP_SENDER.
- Modified Dockerfile to accept SMTP_SENDER as an argument.
- Updated environment schema in env.ts to define SMTP_SENDER as optional.
- Adjusted mail service to use SMTP_SENDER for the email 'from' field.
- Updated documentation to reflect the new SMTP_SENDER variable.

* Remove debug log statement from sendEmail function

---------

Co-authored-by: Iniubong Obonguko <[email protected]>
2025-06-09 01:38:57 +01:00

84 lines
3.1 KiB
YAML

# ClassroomIO
# Project: Self-hosted Backend and Dashboard
# Description: This docker-compose file sets up the backend and dashboard services for self-hosting.
# Author: rotimi-best
# Date: 2024-09-18
version: '3.8'
services:
backend:
build:
context: .
dockerfile: ./apps/backend/Dockerfile
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:
- '3002:3002'
volumes:
- /app/node_modules
- ./apps/backend:/app
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}
- CLOUDFLARE_BUCKET_ID=${CLOUDFLARE_BUCKET_ID}
# SMTP - Emails
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- SMTP_PORT=${SMTP_PORT}
- SMTP_SENDER=${SMTP_SENDER}
dashboard:
build:
context: .
dockerfile: ./apps/dashboard/Dockerfile
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}
ports:
- '3000:3000'
volumes:
- .:/app
- /app/node_modules
- /app/apps/dashboard/node_modules
environment:
- IS_SELFHOSTED=true
- DEPLOYMENT_PROVIDER=docker
# 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}
- PUBLIC_SERVER_URL=${PUBLIC_SERVER_URL} # this is the url to the backend service
- PUBLIC_IP_REGISTRY_KEY=${PUBLIC_IP_REGISTRY_KEY}
depends_on:
- backend