安装、配置 Canvas LMS
官方使用指南:
https://guides.instructure.com
1. 操作系统
1.1 创建系统用户
$ sudo adduser canvas
1.2 修改 canvas 用户 sudo 权限
$ visudo
$ su canvas
1.3 创建工作区目录
$ sudo mkdir -p /data
$ sudo chown canvas:canvas /data
1.4 切换至工作区目录:
$ cd /data
2. 安装及配置 PostgreSQL 数据库
2.1 安装 PostgreSQL
2.2 创建一个 PostgreSQL 数据库用户:
$ sudo -u postgres createuser canvas --no-createdb --no-superuser --no-createrole --pwprompt
输入 2 次数据库用户密码
2.3 创建 Canvas 数据库:
$ sudo -u postgres createdb canvas_production --owner=canvas
3. 安装 Git:
$ sudo apt install git
4. 克隆 Canvas LMS:
$ git clone https://github.com/instructure/canvas-lms.git canvas
$ cd canvas
$ git checkout prod
4.1 修改 canvas 文件夹权限:
$ sudo chown -R canvas /data/canvas
4.2 再次确认切换至 canvas 安装目录:
$ cd /data/canvas
5. 安装 Ruby
5.1.1 安装依赖
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:instructure/ruby
$ sudo apt update
$ sudo apt install -y ruby3.1 ruby3.1-dev zlib1g-dev libxml2-dev \
libsqlite3-dev libxmlsec1-dev libyaml-dev \
libidn11-dev curl make g++
5.1.2 Ubuntu Server 22.04 (手动安装 Ruby 3.1 仅限开发者)
这里需要注意,网络上常见的通过添加 brightbox 源的方法,因为 Ruby 2.7 已经停止维护,并且和 Ubuntu 22.04 OpenSSL 版本冲突,无法安装 Ruby 2.7,更多 Ruby 版本查看官网
$ curl -O https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.4.tar.gz
$ tar -xzvf ruby-3.1.4.tar.gz
$ cd ruby-3.1.4
$ ./configure
$ make
$ make install
5.2 安装 Node.js
NodeJS 官方声明,之前常用的 curl 调用安装脚本方法将废止。本文适用方法请参考:传送门
如果不确定当前操作系统是否可以满足 NodeJS 版本,可以通过:
$ apt show nodejs
查看当前系统所适配的 NodeJS 版本,再决定是否通过添加外部源的方式安装。
5.3 安装 bundler 包管理器
$ cd /data/canvas
$ rm -f Gemfile.lock # 防止版本干扰
$ sudo gem install bundler --version 2.4.19
5.4 通过 bundler 管理器安装 bundle
$ bundle config set --local path vendor/bundle
$ bundle install
默认安装后,如果 cat -n /var/log/apache2/error.log 中出现 strscan 版本报错,可尝试通过更新解决:
$ sudo gem update strscan
5.5 安装 Yarn
$ sudo npm -g install yarn
5.6 通过 Yarn 安装依赖
Canvas 使用了大量的 JS 开源库资源
$ npx update-browserslist-db@latest
$ yarn install
6. Canvas 配置文件
批量复制默认配置文件样本:
$ for config in amazon_s3 database delayed_jobs domain dynamic_settings file_store outgoing_mail security external_migration; do cp config/$config.yml.example config/$config.yml; done
6.1 动态配置文件
$ nano config/dynamic_settings.yml
6.2 数据库配置文件
$ nano config/database.yml
6.3 发送邮件配置文件
$ nano config/outgoing_mail.yml
6.4 URL 配置文件
$ nano config/domain.yml
6.5 安全配置文件
修改 security.yml 文件,替换加密密钥,长度为至少20个字符随机字符串
$ nano config/security.yml
7. 初始化数据库
$ yarn gulp rev
$ RAILS_ENV=production bundle exec rake db:initial_setup
7.1 数据库初始化出错:
2022-AUG-04 版本后,执行 db:initial_setup 报错,可尝试如下步骤:
$ mv db/migrate/20210823222355_change_immersive_reader_allowed_on_to_on.rb .
$ mv db/migrate/20210812210129_add_singleton_column.rb db/migrate/20111111214311_add_singleton_column.rb
$ RAILS_ENV=production bundle exec rake db:initial_setup
$ mv 20210823222355_change_immersive_reader_allowed_on_to_on.rb db/migrate/.
$ RAILS_ENV=production bundle exec rake db:migrate
8. 生成素材库
$ mkdir -p log tmp/pids public/assets app/stylesheets/brandable_css_brands
$ touch app/stylesheets/_brandable_variables_defaults_autogenerated.scss
$ touch Gemfile.lock
$ touch log/production.log
$ sudo chown -R canvas config/environment.rb log tmp public/assets app/stylesheets/_brandable_variables_defaults_autogenerated.scss app/stylesheets/brandable_css_brands Gemfile.lock config.ru
开始打包素材:
如果使用 Node 18 以上版本,会报错
$ RAILS_ENV=production bundle exec rake canvas:compile_assets
9. 修改配置文件权限
$ sudo chmod 400 config/*.yml
10. 安装 Apache 和 Passenger
10.1 安装
$ sudo apt-get install -y dirmngr gnupg apt-transport-https ca-certificates curl
$ 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
启用 Apache 相关模块:
$ sudo a2enmod rewrite
$ sudo a2enmod passenger
$ sudo a2enmod ssl
编辑 Passenger 模块配置文件:
$ sudo nano /etc/apache2/mods-enabled/passenger.conf
添加 PassengerDefaultUser canvas,如下:
PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
PassengerDefaultRuby /usr/bin/passenger_free_ruby
PassengerInstanceRegistryDir /var/run/passenger-instreg
PassengerDefaultUser canvas
10.2 安装XSendFile
$ sudo apt-get install libapache2-mod-xsendfile
开启 XSendFile 模块:
$ sudo a2enmod xsendfile
为了避免今后更新 Canvas 程序时覆盖环境配置,可创建另外一个 production-local.rb 增加 Canvas 环境配置:
$ nano ./config/environments/production-local.rb
添加一行:config.action_dispatch.x_sendfile_header = 'X-Sendfile'
保存,退出编辑。
10.3 准备证书
$ mkdir -p /data/cert
$ cd /data/cert
$ sudo openssl dhparam -out dhparam.pem 4096
11. 配置 VHOST
12. 安装 Redis 缓存服务
$ sudo apt-get install -y redis-server
$ sudo nano /etc/redis/redis.conf
$ sudo systemctl enable redis-server
$ sudo systemctl start redis.service
缓存配置文件:
$ cp config/cache_store.yml.example config/cache_store.yml
$ nano config/cache_store.yml
写入:
production:
cache_store: redis_cache_store
Redis 配置文件:
$ cp config/redis.yml.example config/redis.yml
$ nano config/redis.yml
写入:
production:
servers:
- redis://password@localhost
db: 1
修改 redis.yml 权限:
$ sudo chown canvas:canvas config/redis.yml
$ sudo chmod 400 config/redis.yml
13. 配置 Canvas 自动化任务
$ sudo ln -s /data/canvas/script/canvas_init /etc/init.d/canvas_init
$ sudo update-rc.d canvas_init defaults
$ sudo /etc/init.d/canvas_init start
返回:Daemonizing... 表示成功!
14. 重启 Canvas
$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/canvas_init restart
$ cd /data/canvas/ && RAILS_ENV=production script/delayed_job restart
安装 QTI Migration Tool
当用户操作复制、导入测验(Quiz)内容时,需要 QTI Migration Tool 支持,具体安装步骤如下:
安装 Python 3 和依赖:
$ pip3 install lxml
克隆 QTIMigration Tool
$ cd /data/canvas/vendor
$ git clone https://github.com/instructure/QTIMigrationTool.git QTIMigrationTool
$ cd QTIMigrationTool
$ chmod +x migrate.py
完成上述步骤后,重启 delayed_job:
$ cd /data/canvas
$ script/delayed_job restart
安装完成后,Site Admin -> Plugins -> QTI Converter 开启支持,如果 QTI Migration 工具安装成功,Canvas 会自动识别并开启该插件。