Skip to content

Canvas-LMS-K8s provides a production-ready, modular, and scalable deployment setup for Instructure's Canvas LMS using Kubernetes. This setup enables institutions, educational startups, and individual researchers to host and manage their Canvas LMS instance β€” unlocking full admin capabilities and LTI 1.3 support (which is not available publicly)

Notifications You must be signed in to change notification settings

babz007/Canvas-LMS-K8s

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 

Repository files navigation

πŸŽ“ Canvas-LMS-K8s

Deploy Instructure Canvas LMS on Kubernetes β€” for developers, researchers, and educators who need full control, LTI 1.3 support, and scalable infrastructure.


🧠 Overview

Canvas-LMS-K8s provides a production-ready, modular, and scalable deployment setup for Instructure's Canvas LMS using Kubernetes.

This setup enables institutions, educational startups, and individual researchers to host and manage their own Canvas LMS instance β€” unlocking full admin capabilities and LTI 1.3 support (which is not available in public Canvas instances like instructure.com).

Whether you're:

  • πŸ§ͺ A researcher building LTI tools or collecting learning analytics
  • πŸŽ“ An educator or school admin managing coursework, assignments, or assessments
  • πŸ‘¨β€πŸ’» A developer testing LMS integrations
  • πŸ›οΈ A university team setting up internal infrastructure

This repo provides the manifests and instructions you need to self-host Canvas LMS on a Kubernetes cluster with production-level features.


πŸš€ Features

  • βœ… Multi-Container Kubernetes Architecture

    • PostgreSQL (Database)
    • Redis (Queue and Cache)
    • Jobs Worker (Background Tasks)
    • Canvas Web App (Rails + NGINX + Passenger)
    • NGINX Ingress Controller (Domain-based Routing)
  • βš™οΈ Helm/Kustomize Compatible Manifests

  • πŸ“¦ Docker images with optimized Dockerfile/Dockerfile.production

  • πŸ“ Persistent Volume setup for durable storage

  • πŸ” Support for Single Sign-On + LTI 1.3

  • πŸ”§ Troubleshooting and operational guides included


🌐 National & Educational Impact

πŸŽ“ Canvas LMS is used by over 6,000 institutions across the U.S., including major universities, community colleges, and K-12 schools. However, access to full admin features and advanced integrations (like LTI 1.3) is limited in public instances.

This project:

  • Empowers researchers and software engineers to build, test, and deploy LTI tools on real infrastructure
  • Enables educational institutions to run secure, compliant, and scalable LMS systems within their own cloud
  • Promotes open access to education technology by providing a blueprint for institutions nationwide

By containerizing and orchestrating Canvas LMS with Kubernetes, this project reduces infrastructure complexity, promotes portability, and unlocks full control over your learning ecosystem.


πŸ“¦ Project Structure

.
β”œβ”€β”€ deployments/              # Kubernetes Deployments
β”‚   β”œβ”€β”€ canvas-web.yaml
β”‚   β”œβ”€β”€ redis.yaml
β”‚   └── jobs.yaml
β”œβ”€β”€ services/                 # Services (LoadBalancer, ClusterIP)
β”‚   └── canvas-web-svc.yaml
β”œβ”€β”€ ingress/                  # NGINX Ingress Resources
β”‚   └── canvas-ingress.yaml
β”œβ”€β”€ pvc/                      # Persistent Volume Claims
β”‚   └── canvas-pvc.yaml
β”œβ”€β”€ docker/
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── Dockerfile.production
β”œβ”€β”€ config/                   # Canvas YAML configs (database.yml, etc.)
β”œβ”€β”€ scripts/                  # Utility setup scripts
└── README.md

⚑ Getting Started

1. Clone and Switch to prod Branch

git clone https://github.com/babz007/Canvas-LMS-K8s.git
cd Canvas-LMS-K8s

2. Customize Configs

Update environment variables in your deployment files and secret volumes (database.yml, outgoing_mail.yml, etc.).

3. Apply to Your Cluster

kubectl apply -f deployments/
kubectl apply -f services/
kubectl apply -f ingress/
kubectl apply -f pvc/

4. Access the Canvas LMS

After a few minutes (once pods are running), access your instance via the domain configured in your Ingress (e.g., https://canvas.example.edu).


πŸ§ͺ LTI 1.3 Testing Use Case

For LTI developers and tool providers, this deployment allows you to:

  • Build LTI 1.3 tools (Deep Linking, Assignment & Grades Services, etc.)
  • Register your tool as an LTI App in Canvas
  • Test OAuth2.0-based flows securely

πŸ› οΈ Troubleshooting Highlights

  • 502 / 503 Gateway Errors?
    • Check pod logs: kubectl logs <pod-name>
    • Validate service targetPort and ingress routing
  • Assets not loading?
    • Run bundle exec rake assets:precompile
  • Permissions errors during container build?
    • Update Dockerfile to chown volumes and protected paths
  • Jobs pod crashlooping?
    • Ensure correct environment variables and memory allocation

See docs/issues.md for full list of common issues and solutions.


πŸ“œ License

This project is built using Instructure's Canvas LMS (AGPL License).


🀝 Contributing

If you've used this setup to deploy Canvas successfully or added improvements, feel free to open a PR or issue!


πŸ’¬ Support

Open an issue here or connect with the author via LinkedIn or Twitter for collaboration or feedback.


Let me know if you'd like to include a visual architecture diagram, badge for DockerHub, or quickstart Helm chart example in the README too.

About

Canvas-LMS-K8s provides a production-ready, modular, and scalable deployment setup for Instructure's Canvas LMS using Kubernetes. This setup enables institutions, educational startups, and individual researchers to host and manage their Canvas LMS instance β€” unlocking full admin capabilities and LTI 1.3 support (which is not available publicly)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published