Canvas LMS 安装攻略

发布于: 21 September, 2021
分享:

Canvas LMS 是一款功能强大,可全方位覆盖 K-12 学习资源管理,其安装过程比较复杂,特此全程记录并分享给大家。

安装、配置 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 $USER --no-createdb \
   --no-superuser --no-createrole --pwprompt
$ sudo -u postgres psql -c "alter user $USER with superuser" postgres   

输入 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.3 ruby3.3-dev zlib1g-dev libxml2-dev \
                       libsqlite3-dev libxmlsec1-dev libyaml-dev  \
                       libidn11-dev curl make g++

 

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.5.10

 

5.4 通过 bundler 管理器安装 bundle

$ bundle config set --local path vendor/bundle
$ bundle _2.5.10_ 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 开源库资源

$ yarn install
$ npx update-browserslist-db@latest

 

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

<VirtualHost *:80>
  ServerName your_domain_here
  ServerAdmin your_email@domain
  DocumentRoot /data/canvas/public
  RewriteEngine On
  RewriteCond %{HTTP:X-Forwarded-Proto} !=https
  RewriteCond %{REQUEST_URI} !^/health_check
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
  # Block /external_content/retrieve/oembed
  RewriteCond %{REQUEST_URI} ^/external_content/retrieve/oembed
  RewriteRule ^ - [F]
	
  LogLevel warn
  ErrorLog ${APACHE_LOG_DIR}/canvas_errors.log
  CustomLog ${APACHE_LOG_DIR}/canvas_access.log combined
  SetEnv RAILS_ENV production
  #XSendFile On
  #XSendFilePath /data/canvas
  
  <Directory /data/canvas/public>
    Options All
    AllowOverride All
    Require all granted
  </Directory>
  
  #Reverse Proxy for RCE
  ProxyPass /rce/ http://127.0.0.1:3000/
</VirtualHost>

<VirtualHost *:443>
  ServerName your_domain_here
  ServerAdmin your_email@domain
  
  DocumentRoot /data/canvas/public
  LogLevel warn
  ErrorLog ${APACHE_LOG_DIR}/canvas_errors.log
  CustomLog ${APACHE_LOG_DIR}/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 /data/cert/certificate.crt
  SSLCertificateKeyFile /data/cert/certificate.key
  SSLCertificateChainFile /data/cert/chain.crt
  SSLOpenSSLConfCmd DHParameters "/data/cert/dhparam.pem"
  SetEnv RAILS_ENV production
  #XSendFile On
  #XSendFilePath /data/canvas/public
  # Block /external_content/retrieve/oembed
  RewriteEngine On
  RewriteCond %{REQUEST_URI} ^/external_content/retrieve/oembed
  RewriteRule ^ - [F]
  
  <Directory /data/canvas/public>
    Options All
    AllowOverride All
    Require all granted
  </Directory>
  
  #Reverse Proxy for RCE
  ProxyPass /rce/ http://127.0.0.1:3000/
</VirtualHost>

 

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 会自动识别并开启该插件。

 

 

0 留言

留言

您的留言将被人工审核,请勿发表色情、反动言论。

您可能感兴趣

Canvas LMS 安装攻略

Canvas LMS 是一款功能强大,可全方位覆盖 K-12 学习资源管理,其安装过程比较复杂,特此全程记录并分享给...