* 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
Publishing ClassroomIO Docker Images to Docker Hub
This guide explains how to publish the ClassroomIO API and Dashboard Docker images to Docker Hub.
Prerequisites
- Docker Hub Account: Create an account at https://hub.docker.com if you don't have one
- Docker Installed: Make sure Docker is installed and running on your machine
- Docker Hub Access Token: Create a personal access token at https://hub.docker.com/settings/security
Method 1: Manual Publishing (Local)
Step 1: Login to Docker Hub
docker login
# Enter your Docker Hub username and password/token when prompted
Step 2: Build and Push Images
Use the provided script to build and push both images:
# Default (uses 'classroomio' as username and 'latest' as version)
./docker/docker-push.sh
# Custom username
DOCKERHUB_USERNAME=your-username ./docker/docker-push.sh
# Specific version
VERSION=v0.1.0 ./docker/docker-push.sh
# Both custom username and version
DOCKERHUB_USERNAME=classroomio VERSION=v0.1.0 ./docker/docker-push.sh
Step 3: Verify Images
Check your Docker Hub repository at:
Method 2: GitHub Actions (Automated)
Setup (One-time)
-
Add Docker Hub Secrets to GitHub:
- Go to your GitHub repository → Settings → Secrets and variables → Actions
- Add two secrets:
DOCKERHUB_USERNAME: Your Docker Hub usernameDOCKERHUB_TOKEN: Your Docker Hub access token
-
Push the workflow file (already created at
.github/workflows/docker-publish.yml)
Publishing via GitHub Actions
The workflow will automatically publish images when:
- Push to main/master branch: Creates a
latesttag - Create a version tag: Creates versioned tags
- Manual trigger: Use the Actions tab in GitHub
Create a version tag and push:
git tag v0.1.0
git push origin v0.1.0
Manual trigger from GitHub:
- Go to Actions tab in your repository
- Select "Publish Docker Images" workflow
- Click "Run workflow"
- Enter optional version tag (or leave default 'latest')
Method 3: Individual Image Building
Build API Image
docker build -f docker/Dockerfile.api -t classroomio/api:latest .
docker push classroomio/api:latest
Build Dashboard Image
docker build -f docker/Dockerfile.dashboard -t classroomio/dashboard:latest .
docker push classroomio/dashboard:latest
Using Published Images
Pull Images
docker pull classroomio/api:latest
docker pull classroomio/dashboard:latest
Update docker-compose.yml
Instead of building locally, use the published images:
services:
api:
image: classroomio/api:latest
# Remove the 'build' section
ports:
- "3081:3081"
environment:
# ... your environment variables
dashboard:
image: classroomio/dashboard:latest
# Remove the 'build' section
ports:
- "3082:3082"
environment:
# ... your environment variables
Versioning Strategy
Recommended Tags:
latest: Most recent stable buildv0.1.0: Specific semantic versionv1.0: Minor versionv1: Major versionmain: Latest main branch builddev: Development builds
Example: Publishing a new version
# Build with multiple tags
docker build -f docker/Dockerfile.api \
-t classroomio/api:latest \
-t classroomio/api:v1.2.0 \
-t classroomio/api:v1.2 \
-t classroomio/api:v1 \
.
# Push all tags
docker push classroomio/api:latest
docker push classroomio/api:v1.2.0
docker push classroomio/api:v1.2
docker push classroomio/api:v1
Image Sizes and Build Times
- API Image: ~400-600 MB (Node.js Alpine + dependencies)
- Dashboard Image: ~600-800 MB (Node.js Alpine + SvelteKit build)
- Build Time: 5-10 minutes per image (depending on your machine)
Multi-Architecture Support
The GitHub Actions workflow builds for both linux/amd64 and linux/arm64 platforms, making the images compatible with:
- x86_64 servers
- ARM-based servers (like AWS Graviton)
- Apple Silicon Macs (M1/M2/M3)
Troubleshooting
"unauthorized: authentication required"
- Run
docker loginagain - Check your Docker Hub token hasn't expired
"denied: requested access to the resource is denied"
- Make sure you're pushing to your own username
- Repository might need to be created first on Docker Hub
Build failures
- Check Dockerfile syntax
- Ensure all build arguments are provided
- Check available disk space:
docker system df
Clean up old images
# Remove dangling images
docker image prune
# Remove all unused images
docker image prune -a
Security Best Practices
- Never commit secrets to the repository
- Use Docker Hub access tokens instead of passwords
- Enable 2FA on your Docker Hub account
- Scan images for vulnerabilities:
docker scan classroomio/api:latest - Use specific version tags in production, not
latest
Support
For issues with publishing, please check:
- Docker Hub status: https://status.docker.com
- GitHub Actions logs in your repository
- Docker daemon logs:
docker info