* 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
5.4 KiB
5.4 KiB
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