Canvas LMS

Install Canvas via Docker

Pull Canvas Docker

Canvas LMS has a release on Docker Hub here. But it might be outdated already.

$ sudo docker pull instructure/canvas-lms:stable

Install via Dockerfile

version: '3.8'

services:
  canvas:
    image: instructure/canvas-lms:latest
    container_name: canvas-lms
    restart: always
    environment:
      RAILS_ENV: production
      POSTGRES_HOST: canvas-postgres
      POSTGRES_USER: canvas
      POSTGRES_PASSWORD: <DB_PASSWORD>
      POSTGRES_DB: canvas_production
      REDIS_HOST: canvas-redis
      REDIS_PORT: 6379
      DOMAIN_NAME: localhost
      CANVAS_LMS_ADMIN_EMAIL: admin@example.com
      CANVAS_LMS_ADMIN_PASSWORD: adminpassword
    ports:
      - "80:3000"
    depends_on:
      - canvas-postgres
      - canvas-redis

  canvas-postgres:
    image: postgres:16
    container_name: canvas-postgres
    restart: always
    environment:
      POSTGRES_USER: canvas
      POSTGRES_PASSWORD: canvaspassword
      POSTGRES_DB: canvas_production
    volumes:
      - canvas_db_data:/var/lib/postgresql/data

  canvas-redis:
    image: redis:latest
    container_name: canvas-redis
    restart: always

volumes:
  canvas_db_data:

Start Canvas LMS

  1. Run the following command to start all containers:
$ docker-compose up -d
  1. Run Database Migrations

After starting the containers, you need to run database migrations:

$ docker exec -it canvas-lms bash

Then, inside the container:

$ bundle exec rake db:initial_setup

Dependencies with Docker

PostgreSQL Database

$ sudo docker pull postgres:16
$ sudo docker run -d --name canvas-postgres \
  -e POSTGRES_USER=canvas -e POSTGRES_PASSWORD=<DB_PASSWORD> \
  -e POSTGRES_DB=canvas_production -p 5432:5432 postgres:16

You can run this following command to check PostgreSQL database status:

$ sudo docker logs canvas-postgres

Access PostgreSQL in Docker

If you want to manually check the database inside the container, run:

$ sudo docker exec -it canvas-postgres psql -U canvas -d canvas_production

Set Up Redis

$ sudo docker run -d --name canvas-redis -p 6379:6379 redis:latest

Ensure the Container is Running:

$ docker ps

Install Canvas inside a Docker

Pull Docker Image

$ docker pull ubuntu:22.04
$ apt install sudo -y

PostgreSQL Database

$ apt update
$ apt install postgresql postgresql-contrib libpq-dev
$ service postgresql start # Can not use systemctl
$ su - postgres
$ createuser $USER --no-createdb --no-superuser --no-createrole --pwprompt

Git

$ apt install git

Apache 2 & Passenger

$ apt install -y dirmngr gnupg apt-transport-https ca-certificates curl -y
$ curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt \
  | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/phusion.gpg >/dev/null
$ sudo sh -c \
  'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger $(lsb_release -cs) \
  main > /etc/apt/sources.list.d/passenger.list'
$ sudo apt update
$ sudo apt install passenger libapache2-mod-passenger apache2
$ sudo service apache2 start # must use sudo

Redis

$ sudo nano /etc/redis/redis.conf

Change to systemd

$ sudo redis-server /etc/redis/redis.conf --daemonize yes
Previous
Installation