安装、配置 Canvas LMS
官方使用指南:
https://guides.instructure.com
1.1 创建系统用户
$ sudo adduser canvas
1.2 修改 canvas 用户 sudo 权限
root@canvas-demo:~# visudo
root@canvas-demo:~# su canvas
1.3 创建工作区目录
canvas@canvas-demo:/root$ sudo mkdir -p /data
canvas@canvas-demo:/root$ sudo chown canvas:canvas /data
1.4 切换至工作区目录:
canvas@canvas-demo:/root$ cd /data
2. 安装及配置 PostgreSQL 数据库
2.1 安装
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
2.4 设置超级用户(正常安装可跳过)
$ sudo -u postgres createuser $USER
$ sudo -u postgres psql -c "alter user $USER with superuser" postgres
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. 安装依赖
5.1 安装 Ruby
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:brightbox/ruby-ng #此步骤需要回车确认
$ sudo apt update
$ sudo apt install ruby2.7 ruby2.7-dev zlib1g-dev libxml2-dev libsqlite3-dev libpq-dev libxmlsec1-dev libidn11-dev curl make g++
********************************************************************
尝试安装 ruby2.7 时,但 Bundler 在 Canvas init 时 会报错
$ sudo apt-get install ruby ruby-dev zlib1g-dev libxml2-dev libsqlite3-dev libpq-dev libxmlsec1-dev curl make g++
Ubuntu 20.04 在安装 libxmlsec1-dev 时遇到错误:
尝试:
$ sudo apt install libssl1.1=1.1.1f-1ubuntu2
再次安装:$ sudo apt install libxmlsec1-dev
否则 bundle _2.2.19_ install 报错
********************************************************************
5.2 安装 Node.js
$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
$ sudo apt -y install nodejs
切换至国内 NPM 镜像:(原始地址:https://registry.npmjs.org/)
$ npm config set registry https://r.npm.taobao.org
验证 NPM 镜像地址:
$ npm config get registry
5.3 安装 NPM
$ sudo npm install -g npm@latest
6 安装 bundler 包管理器
$ sudo gem install bundler --version 2.3.26
6.1 通过 bundler 管理器安装 bundle
$ bundle config set --local path vendor/bundle
$ bundle install
6.2 默认安装后,如果 cat -n /var/log/apache2/error.log 中出现 strscan 版本报错,可尝试通过更新解决:
$ sudo gem update strscan
7.安装 Yarn
7.1 Ubuntu Server 20.04
canvas@canvas-demo:/data/canvas$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
canvas@canvas-demo:/data/canvas$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
canvas@canvas-demo:/data/canvas$ sudo apt-get update && sudo apt-get install yarn=1.19.1-1
如需切换 Yarn 镜像,可安装 yrm 切换镜像,具体可参考其他网站资料
Yarn 防超时执行参数:yarn install --network-timeout 600000
7.2 Ubuntu Server 22.04
$ curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt update && sudo apt install yarn
8. 安装 Python
contextify 包需要用到 Python,通过 apt 安装:
canvas@canvas-demo:/data/canvas$ sudo apt install python
9. 通过 Yarn 安装依赖
因为 Canvas 使用了大量的 Javascript 开源库资源,执行 yarn install
之前,建议首先执行 npx browserslist@latest --update-db
canvas@canvas-demo:/data/canvas$ yarn install
10. Canvas 配置文件
canvas@canvas-demo:/data/canvas$ for config in amazon_s3 database delayed_jobs domain file_store outgoing_mail security external_migration; do cp config/$config.yml.example config/$config.yml; done
10.1 动态配置文件
canvas@canvas-demo:/data/canvas$ cp config/dynamic_settings.yml.example config/dynamic_settings.yml
canvas@canvas-demo:/data/canvas$ nano config/dynamic_settings.yml
10.2 数据库配置文件
canvas@canvas-demo:/data/canvas$ cp config/database.yml.example config/database.yml
canvas@canvas-demo:/data/canvas$ nano config/database.yml
10.3 发送邮件配置文件
canvas@canvas-demo:/data/canvas$ cp config/outgoing_mail.yml.example config/outgoing_mail.yml
canvas@canvas-demo:/data/canvas$ nano config/outgoing_mail.yml
10.4 URL 配置文件
canvas@canvas-demo:/data/canvas$ cp config/domain.yml.example config/domain.yml
canvas@canvas-demo:/data/canvas$ nano config/domain.yml
10.5 安全配置文件
canvas@canvas-demo:/data/canvas$ cp config/security.yml.example config/security.yml
修改 security.yml 文件,替换加密密钥,长度为至少20个字符随机字符串
canvas@canvas-demo:/data/canvas$ nano config/security.yml
11. 初始化数据库
$ yarn gulp rev
$ RAILS_ENV=production bundle exec rake db:initial_setup
11.1 数据库初始化出错:
2022-AUG-04 版本后,执行 db:initial_setup 报错,可尝试如下步骤:
$ su canvas
$ cd /data/canvas
$ 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
12. 生成素材库
$ 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
$ RAILS_ENV=production bundle exec rake canvas:compile_assets
13. 修改配置文件权限
canvas@canvas-demo:/data/canvas$ sudo chmod 400 config/*.yml
14. 安装 Apache 和 Passenger
14.1 安装
canvas@canvas-demo:/data/canvas$ sudo apt install passenger libapache2-mod-passenger apache2
如 Passenger 遇阻,可尝试 Passenger 安装:
$ sudo apt-get install -y dirmngr gnupg
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
$ sudo apt-get install -y apt-transport-https ca-certificates
# Add our APT repository
$ sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list'
$ sudo apt-get update
# Install Passenger + Apache module
$ sudo apt-get install -y libapache2-mod-passenger
启用 Apache 相关模块:
canvas@canvas-demo:/data/canvas$ sudo a2enmod rewrite
canvas@canvas-demo:/data/canvas$ sudo a2enmod passenger
canvas@canvas-demo:/data/canvas$ sudo a2enmod ssl
编辑 Passenger 模块配置文件:
canvas@canvas-demo:/data/canvas$ 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
PassengerDefaultUser canvas
14.2 安装XSendFile
$ sudo apt-get install libapache2-mod-xsendfile
开启 XSendFile 模块:
$ sudo a2enmod xsendfile
为了避免今后更新 Canvas 程序时覆盖环境配置,可创建另外一个 production-local.rb 增加 Canvas 环境配置:
canvas@canvas-demo:/data/canvas$ nano ./config/environments/production-local.rb
添加一行:config.action_dispatch.x_sendfile_header = 'X-Sendfile'
保存,退出编辑。
配置 VHOST
ServerName canvas.example.com
ServerAlias canvasfiles.example.com
ServerAdmin youremail@example.com
DocumentRoot /var/canvas/public
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteCond %{REQUEST_URI} !^/health_check
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
ErrorLog /var/log/apache2/canvas_errors.log
LogLevel warn
CustomLog /var/log/apache2/canvas_access.log combined
SetEnv RAILS_ENV production
Options All
AllowOverride All
Require all granted
If you are only serving HTTP behind a HTTPS-terminating load balancer, skip the next VirtualHost
ServerName canvas.example.com
ServerAlias canvasfiles.example.com
ServerAdmin youremail@example.com
DocumentRoot /var/canvas/public
ErrorLog /var/log/apache2/canvas_errors.log
LogLevel warn
CustomLog /var/log/apache2/canvas_ssl_access.log combined
SSLEngine on
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
the following ssl certificate files are generated for you from the ssl-cert package.
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SetEnv RAILS_ENV production
Options All
AllowOverride All
Require all granted
安装 Redis 缓存服务
$ sudo add-apt-repository ppa:chris-lea/redis-server
$ sudo apt-get update
$ sudo apt-get install -y redis-server
$ sudo nano /etc/redis/redis.conf
$ sudo systemctl enable redis-server
$ sudo systemctl start redis.service
$ cd /data/canvas/
增加缓存存储配置文件:
canvas@canvas-demo:/data/canvas$ cp config/cache_store.yml.example config/cache_store.yml
canvas@canvas-demo:/data/canvas$ nano config/cache_store.yml
写入:
production:
cache_store: redis_cache_store
url:
- localhost
db: 0
保存退出编辑后,修改cache_store.yml 所有者及权限:
canvas@canvas-demo:/data/canvas$ sudo chmod 400 config/cache_store.yml
增加 Canvas 缓存配置文件:(新版本可跳过)
canvas@canvas-demo:/data/canvas$ cp config/redis.yml.example config/redis.yml
canvas@canvas-demo:/data/canvas$ nano config/redis.yml
写入:
production:
servers:
- redis://password@localhost
db: 1
修改 redis.yml 权限:
canvas@canvas-demo:/data/canvas$ sudo chown canvas:canvas config/redis.yml
canvas@canvas-demo:/data/canvas$ sudo chmod 400 config/redis.yml
配置 Canvas 自动化任务
canvas@canvas-demo:/data/canvas$ sudo ln -s /data/canvas/script/canvas_init /etc/init.d/canvas_init
canvas@canvas-demo:/data/canvas$ sudo update-rc.d canvas_init defaults
canvas@canvas-demo:/data/canvas$ sudo /etc/init.d/canvas_init start
返回:Daemonizing... 表示成功!
重启 Canvas
$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/canvas_init restart
$ /data/canvas/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 会自动识别并开启该插件。
