Setting up the Canvas LMS system

Introduction

Canvas LMS is a popular open-source learning management system that supports educational institutions in creating and managing their courses online. While powerful, setting up Canvas LMS can sometimes be difficult exercise due to incomplete andunclear documentation. This blog post is designed to provide a clear, comprehensive guide to help you set up Canvas LMS on Linux and macOS systems. Note that Windows users should utilize the Windows Subsystem for Linux (WSL) with a Debian or Ubuntu-based image for optimal results. For detailed instructions, please refer to the Microsoft WSL Installation Guide.

Download and setup instructions for Canvas LMS

Step 1: Download the Canvas LMS Source Code

wget https://github.com/instructure/canvas-lms/archive/refs/heads/master.zip

Step 2: Unzip the Downloaded File

unzip master.zip

Step 3: Rename the extracted folder

mv canvas-lms-master canvas-lms

Step 4: Navigate to the Canvas LMS directory

cd canvas-lms

Step 5: Configure the Docker compose file

Open 'docker-compose.yml'

nano docker-compose.yml

Replace its content with:

# See doc/docker/README.md or https://github.com/instructure/canvas-lms/tree/master/doc/docker
version: '2.3'
services:
  web: &WEB
    build:
      context: .
    links:
      - postgres
      - redis
    ports:
      - "80"
    volumes:
      - .:/usr/src/app
      - api_docs:/usr/src/app/public/doc/api
      - brandable_css_brands:/usr/src/app/app/stylesheets/brandable_css_brands
      - bundler:/home/docker/.bundle/
      - canvas-docker-gems:/home/docker/.gem/
      - js-utils_es:/usr/src/app/packages/js-utils/es
      - js-utils_lib:/usr/src/app/packages/js-utils/lib
      - js-utils_node_modules:/usr/src/app/packages/js-utils/node_modules
      - locales:/usr/src/app/config/locales/generated
      - log:/usr/src/app/log
      - node_modules:/usr/src/app/node_modules
      - pacts:/usr/src/app/pacts
      - public_dist:/usr/src/app/public/dist
      - reports:/usr/src/app/reports
      - styleguide:/usr/src/app/app/views/info
      - tmp:/usr/src/app/tmp
      - translations:/usr/src/app/public/javascripts/translations
      - yardoc:/usr/src/app/.yardoc
      - yarn-cache:/home/docker/.cache/yarn
    environment:
      POSTGRES_PASSWORD: sekret
      ENCRYPTION_KEY: facdd3a131ddd8988b14f6e4e01039c93cfa0160
      RAILS_ENV: development

  jobs:
    <<: *WEB
    command: bundle exec script/delayed_job run

  postgres:
    build: ./docker-compose/postgres
    environment:
      POSTGRES_PASSWORD: sekret

  redis:
    image: redis:alpine

volumes:
  api_docs: {}
  brandable_css_brands: {}
  bundler: {}
  canvas-docker-gems: {}
  i18nliner_node_modules: {}
  js-utils_es: {}
  js-utils_lib: {}
  js-utils_node_modules: {}
  k5uploader_es: {}
  k5uploader_lib: {}
  k5uploader_node_modules: {}
  locales: {}
  log: {}
  node_modules: {}
  pg_data: {}
  pacts: {}
  public_dist: {}
  reports: {}
  styleguide: {}
  tmp: {}
  translations: {}
  yardoc: {}
  yarn-cache: {}

Step 6: Remove unnecessary configuration files

rm config/dynamic_settings.yml

Step 7: Copy configuration files

cp docker-compose/config/*.yml config/

Step 8: Build Docker images

docker-compose build --pull

Step 9: Create Docker containers

docker-compose up --no-start web

Step 10: Install necessary assets

docker-compose run --rm web ./script/install_assets.sh

Step 11: Initialize the database

docker-compose run --rm web bundle exec rake db:create db:initial_setup

Step 12: Migrate the database for testing

docker-compose run --rm web bundle exec rake db:migrate RAILS_ENV=test

Step 13: Start all services

docker-compose up -d

Step 14: Verify that the services are running

docker ps

Look for the 'web' service in the output. Note the port mapped to port 80.