Canvas 产品部署手册

Canvas 产品部署手册

由于时间原因,部分内容机器翻译可能不准确,欢迎修改提出 issue,本文档处于动态更新中 ······

特别感谢为本篇文章提供了技术支持和bug修复的文章:

来自CSDN的博主提供的文章支持:Canvas LMS_geekfly的博客-CSDN博客

来自某位不知名的博主提供的文章支持:canvas-lms系统生产(productuon)环境安装(上)

安装前警告

  • 操作前小心谨慎,输入前请考虑后果,看清执行目录
  • 一定注意Linux的操作系统的版本,尽量不要想当然的尝试新的版本,而是使用最稳定的版本。
  • 仔细看清楚每一个安装包的版本号,某些步骤可能需要科学上网,服务器的科学上网请使用 P i g c h a Pigcha Pigcha 软件。
  • Github上的安装包有很多分支,某些分支可能不可用,或者无法正常安装,如果这样建议更换版本。
  • 仔细执行每一个步骤,并看清楚屏幕关注报错信息,而不是从头到尾像机器人一样的复制粘贴每一个命令。

本教程将引导您了解如何让 Instructure 公司开源的 Canvas LMS 产品就绪、实例运行,并为用户提供相关的服务。 如果您只想使用 Canvas 并尽可能运行最简单的服务器,请参阅快速入门页面。(注意:快速入门教程缺少一些基本的功能,例如电子邮件无法发送,延迟作业无法进行,没有正确的应用程序服务器,没有安装消息总线集成,总之不适合用作企业级产品)

如果你在安装 Canvas 或排除安装故障时需要帮助,最好的办法是加入社区邮件列表或 IRC 频道(请参阅 wiki)并在那里提出具体问题。 很可能其他人已经解决了同样的问题。

一、准备工作

  • 您至少要熟悉网站配置和管理 - 特别是 Apache 和基本的 Ruby on Rails 的设置。如果您对 Git, Postgres, and Passenger 还有一些基本的了解,这将会锦上添花。我们将在本教程中指出您可能需要了解这些组件的地方。

  • 其次,本教程针对基于 POSIX 的系统(如 Mac OS X 和 Linux)。本教程是使用 Ubuntu 14.04 和 16.04 LTS 编写和测试的。如果您有不同的系统,请考虑设置运行最新 Ubuntu LTS 的服务器或虚拟机。我们假设您已经这样做了,或者对这些工作部分足够熟悉,可以自己进行随机应变。

  • 最后,Canvas 比较占用内存。虽然它可以在较小的配置上运行,但我们建议您使用至少 8GB RAM 的服务器,尤其是当一切工作都在一台服务器上运行时。

二、选择您的服务器配置

  • 您可以选择在一个或多个服务器上运行Canvas,由数据库托管。您可以从一个Canvas托管的同一服务器上安装数据库,也可以单独安装它。无论您选择什么,您都需要确保所有Canvas实例都可以与您的数据库服务器进行通信。

  • 此外,您还需要一个Canvas App Server来运行自动作业。同样,这可以是您的Web服务器之一,或者它可以是专用节点。虽然与WebServer一起运行自动作业守护程序没有缺点,但如果您计划有很多流量,建议将作业流量和用户流量划分到不同的节点上以获得最佳性能。

  • 出于本教程的目的,我们将参考运行Canvas作为appServer的服务器(可能之一),而我们将指代运行数据库的服务器作为DBServer。 Appserver节点可以托管网站,处理自动作业或两者,具体取决于您是否设置了Web服务器或自动作业守护程序。

三、数据库安装与配置

a. 安装 Postgres 数据库.
  • Rails 是Canvas使用的库,支持许多数据库适配器,但我们主要使用Postgres和SQLite(用于测试)。 由于本教程用于设置生产环境,我们建议我们推荐Postgres。

  • 您可以在和运行 Canvas App 相同的一台服务器上运行 Postgres 数据库,或者数据库和 Canvas App 在两台服务器上分别运行,这都没有问题。 只需确保您正在运行 Canvas App 的服务器可以与 Postgres 数据库通讯正常。

  • 如果 Postgres 尚未在主机上,您计划在运行数据库时,如果主机是Debian / Ubuntu 系统,那么这也很容易安装:

    # Create the file repository configuration:
    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
    
    # Import the repository signing key:
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    
    # Update the package lists:
    sudo apt-get update
    
    # Install the latest version of PostgreSQL.
    # If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
    sudo apt-get -y install postgresql-12
    
  • 如果您正在运行MacOS X并使用 Homebrew 工具,那么您只能运行 Brew Install PostgreSQL 。 请注意,您需要 Xcode 才能可以。

  • 最后,确保您至少运行 Postgres 版本12。这一步至关重要!一定要检查版本号!

b. 运行 Postgres 数据库在另一台服务器上
  • 如果您要在运行 Canvas App 之外的另外一台服务器上面运行 Postgres 数据库,你需要确保 Postgres数据库正在监听来自外部客户端的连接,您可以通过编辑 postgresql.conf 以及 pg_hba.conf 文件,请参考链接的描述: the Postgres documentation.
c. 配置 Postgres 数据库
  • 如果您希望在Postgres内设置 Canvas 用户。 请注意,在下面的命令中,如果Canvas在不同的服务器上运行,则将使用服务器CANVAS的主机名替换LocalHost,如果在不同的服务器上运行,则在不同的服务器上运行。

    # createuser will prompt you for a password for database user
    sysadmin@dbserver:~$ sudo -u postgres createuser canvas --no-createdb \
       --no-superuser --no-createrole --pwprompt
    sysadmin@dbserver:~$ sudo -u postgres createdb canvas_production --owner=canvas
    # sudo systemctl start postgresql
    

四、获取源代码

a. 使用 Git(推荐用)
  1. 要安装 Git 在 Debian/Ubuntu 主机上,请执行命令:
sysadmin@appserver:~$ sudo apt-get install git git-core 
  1. 一旦你在系统上安装了 Git ,获取 Canvas的最新源代码非常简单,请执行下面的命令更新本地代码仓库:
sysadmin@appserver:~$ git clone -b stable/2021-11-10 https://github.com/instructure/canvas-lms.git /var/canvas
sysadmin@appserver:~$ cd canvas
# cd 到 /var目录下执行 
b. 使用压缩包(不要使用)

你可以根据链接,下载下面的文件:去

五、代码存储

  • 请将 Canvas 代码放在它将运行的位置。 在Unix机器上,选择以下的位置是一个不错的选择:

    /var/canvas
    
  • 确保将 Canvas 源代码的内容移动到您选择的目录,以便于您下载的文件(包括 App,Config,DB,Doc,Public 等文件)中的所有文件都存在。 所有这些都存在于您选择的新目录中。

  • 我们将引用/ var / canvas(或您选择的任何内容)作为你 Rails 应用程序的根目录。

    sysadmin@appserver:~$ sudo mkdir -p /var/canvas
    sysadmin@appserver:~$ sudo chown -R sysadmin /var/canvas
    sysadmin@appserver:~$ cd canvas
    sysadmin@appserver:~/canvas$ ls
    app     db   Gemfile  log     Rakefile  spec  tmp
    config  doc  lib      public  script    test  vendor
    sysadmin@appserver:~/canvas$ cp -av . /var/canvas
    sysadmin@appserver:~/canvas$ cd /var/canvas
    sysadmin@appserver:/var/canvas$ ls
    app     db   Gemfile  log     Rakefile  spec  tmp
    config  doc  lib      public  script    test  vendor
    sysadmin@appserver:/var/canvas$
    

四、安装依赖

1) 外部依赖项
a) Debian/Ubuntu系统

我们现在需要安装Canvas需要的Ruby库和软件包。 在Debian / Ubuntu上,您需要安装一些包。 如果您正在运行Ubuntu,则可能需要添加PPA才能使用以下命令获取所需的Ruby版本:

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:brightbox/ruby-ng
$ sudo apt-get update

现在,我们安装 Ruby 2.7 通过下面的命令:

$ sudo apt-get install ruby2.7 ruby2.7-dev zlib1g-dev libxml2-dev \
	libsqlite3-dev postgresql libpq-dev \
	libxmlsec1-dev curl make g++

安装 Node.js

$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt-get install nodejs
$ sudo npm install -g npm@latest

安装Postgres后,您需要将系统用户名设置为Postgres超级用户。 您可以通过运行以下命令来执行此操作:

sudo -u postgres createuser $USER
sudo -u postgres psql -c "alter user $USER with superuser" postgres
b) Mac OS 系统

对于Mac OS,您需要安装 Command Line Tools for Xcode, and并且确保你已经安装好 Ruby 2.7。要检查当前机器上运行的 ruby 版本,请执行下面的命令:

$ ruby -v

你还需要安装 Postgres 以及 xmlsec library 。最简单的办法是通过 homebrew. 俺安装好homebrew后,请运行:

$ brew install postgresql@12 nodejs@14 xmlsec1
2) Ruby Gems

Canvas 依赖 Ruby Gems。 Ruby Gems是一个特定于 Ruby 的包管理系统,用于正交运行到操作系统包管理系统。

3) Bundler和Canvas依赖项

Canvas 使用 Bundler 作为附加在 Ruby Gem上层的版本管理依赖,执行下面的命令安装:

  • Ubuntu 系统
sysadmin@appserver:/var/canvas$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l
sysadmin@appserver:/var/canvas$ sudo gem install bundler --version 2.2.19
sysadmin@appserver:/var/canvas$ bundle config mirror.https://rubygems.org https://gems.ruby-china.com
sysadmin@appserver:/var/canvas$ bundle _2.2.19_ install --path vendor/bundle

# 第二步的速度可能会有点慢,如果断开了的化,就去把缓存文件删除然后再多尝试几次
# 控制台上出现连续的 Fetching 才是对的,中间断开只要是黄色提示符也没问题,会自重连
# 最后会出现一些绿色的滚动条目,这样才是正常的
# 此步骤可能需要科学上网,这是一步很头疼的步骤,做完后请创建虚拟机备份快照
# 这一步骤建议重复执行一次,会提示安装包数量

# 这一步可能会出错,说什么pulsar的编译错误,请执行下面的命令!
# include <pulsar/Client.h>
# ^~~~~~~~~~~~~~~~~

export PULSAR_VERSION=2.6.1
export PULSAR_CLIENT_SHA512=90fdb6e3ad85c9204f2b20a9077684f667f84be32df0952f8823ccee501c9d64a4c8131cab38a295a4cb66e2b63211afcc24f32130ded47e9da8f334ec6053f5
export PULSAR_CLIENT_DEV_SHA512=d0cc58c0032cb35d4325769ab35018b5ed823bc9294d75edfb56e62a96861be4194d6546107af0d5f541a778cdc26274aac9cb7b5ced110521467f89696b2209

cd "$(mktemp -d)" && \
    curl -SLO 'http://archive.apache.org/dist/pulsar/pulsar-'$PULSAR_VERSION'/DEB/apache-pulsar-client.deb' && \
    curl -SLO 'http://archive.apache.org/dist/pulsar/pulsar-'$PULSAR_VERSION'/DEB/apache-pulsar-client-dev.deb' && \
    echo $PULSAR_CLIENT_SHA512 '*apache-pulsar-client.deb' | shasum -a 512 -c -s - && \
    echo $PULSAR_CLIENT_DEV_SHA512 '*apache-pulsar-client-dev.deb' | shasum -a 512 -c -s - && \
    apt install ./apache-pulsar-client*.deb && \
    rm ./apache-pulsar-client*.deb && \
    rm /usr/lib/libpulsarnossl.so* && \
    rm /usr/lib/libpulsar.a && \
    rm /usr/lib/libpulsarwithdeps.a


# 其余的错误基本上都是网络不好,多执行几次就好
# 如果其实要确保某个命令可以执行,您可以自己执行一遍那个命令,总之,最后会出现一些绿色的滚动条目,这样才是正常的
# 其余情况都有bug!建议重开!
  • Mac OS X

    如果您在Mac OS X Mavericks上,由于有关 Xcode 的bug,Thrift Gem可能无法构建。 可以通过运行以下内容来解决此问题:

sysadmin@appserver:/var/canvas$ sudo gem install bundler --version 1.13.6
sysadmin@appserver:/var/canvas$ bundle config build.thrift --with-cppflags='-D_FORTIFY_SOURCE=0'
sysadmin@appserver:/var/canvas$ bundle _1.13.6_ install --path vendor/bundle
4) Yarn 安装

Canvas 比起 npm 更兼容 yarn 。 (注意,截至2018年9月15日,所需的 yarn 版本为1.19.1: sudo apt-get update && sudo apt-get install yarn=1.19.1-1

sysadmin@appserver:/var/canvas$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sysadmin@appserver:/var/canvas$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sysadmin@appserver:/var/canvas$ sudo apt-get update && sudo apt-get install yarn=1.19.1-1

此外,确保 python 已经安装(Contexify包所需)

sysadmin@appserver:/var/canvas$ sudo apt-get install python

然后再Canvas App的目录下执行命令安装 yarn

sysadmin@appserver:/var/canvas$ sudo yarn install
# 特别恶心的一步,时间巨长,而且要连接科学网络。
# 注意关注最后一行 done in XX s才是成功的结果。
# 这一步可能会出现EXIT CODE 128,也是非常恶心的一步。
# 基本上这一步安装好了后面就不会因为网络寄了。

五、Canvas 默认配置

在我们在数据库中设置所有表之前,我们的Rails代码取决于少数配置文件,其中包含良好的示例设置,所以,我们希望快速设置这些文件。 我们将更快地检查它们。 从Canvas App的根目录,您可以拉取到默认配置的值,如下所示:

sysadmin@appserver:/var/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
1、动态设置配置

如果您不想使用Canvas运行Condul群集,则此配置文件很有用。 只需提供您希望为Dynamicetings类查找的配置数据,并且只要发出Consul数据时,它将使用它。 数据应该像下面的例子一样,有关相关的数据集的一个键,以及钥匙/值对的哈希(无嵌套)

sysadmin@appserver:/var/canvas$ cp config/dynamic_settings.yml.example config/dynamic_settings.yml
sysadmin@appserver:/var/canvas$ nano config/dynamic_settings.yml
2、数据库配置

现在我们需要将数据库配置设置为指向Postgres服务器和生产数据库。 打开文件配置/ database.yml,并找到“生产环境” $production environment $ 部分。 您可以使用这样的编辑器打开此文件:

sysadmin@appserver:/var/canvas$ cp config/database.yml.example config/database.yml
sysadmin@appserver:/var/canvas$ nano config/database.yml

更新本节以反映您的Postgres服务器的位置和身份验证凭据。 这是您将密码和数据库名称的地方以及从Postgres设置步骤中设置的其他任何东西。

3、邮件系统配置

对于Canvas正常工作,您需要一个传出的SMTP邮件服务器。 您需要做的就是获取有效的传出SMTP设置。 打开config / outging_mail.yml

sysadmin@appserver:/var/canvas$ cp config/outgoing_mail.yml.example config/outgoing_mail.yml
sysadmin@appserver:/var/canvas$ nano config/outgoing_mail.yml

找到 Production 部分并配置它以匹配您的 SMTP 提供程序的设置。 请注意, d o m a i n domain domain O U T G O O N G _ A D D R E S S OUTGOONG\_ADDRESS OUTGOONG_ADDRESS 字段不适用于SMTP,而是适用于 Canvas App。 d o m a i n domain domain 是必需的,并且是预计传出电子邮件的域名。 O U T G O O N G _ A D D R E S S OUTGOONG\_ADDRESS OUTGOONG_ADDRESS可选的,如果提供的话,将显示为“来自*”电子邮件“字段中 *的地址。

如果您不想使用身份验证,只需注释出 user_name, password, 还有 authentication 的部分行。

4、URL配置

在许多通知电子邮件中,以及其他一些未被 Web 请求触发的事件,Canvas需要知道它是从中可见的URL。 目前,这些都基于域名构建。 请将 config / Domain.ymlProduction 部分编辑为Canvas安装的相应域名。 对于域字段,这将是http://和下一个/的部分。 指导使用canvas.instructure.com

sysadmin@appserver:/var/canvas$ cp config/domain.yml.example config/domain.yml
sysadmin@appserver:/var/canvas$ nano config/domain.yml

请注意,如果您计划托管用户上传的文件并希望安全,或者您想在自定义主题中允许自定义JavaScript,则需要可选的Files_Domain字段。 Files_Domain必须是浏览器透视图的不同主机名,即使它可以是相同的Apache服务器,甚至是相同的IP地址。

5、安全配置

您必须在此文件中插入至少20个字符的随机字符串:

 sysadmin@appserver:/var/canvas$ cp config/security.yml.example config/security.yml
 sysadmin@appserver:/var/canvas$ nano config/security.yml

六、产生Assets文件

Canvas 需要在正常工作之前建立许多Assets文件。 首先,创建将要存储生成的文件的目录。 请参阅下面的Canvas所有权部分,以防您想要计划为CanvasUser分配所有权,并且用户尚不存在。

sysadmin@appserver:~$ cd /var/canvas
sysadmin@appserver:/var/canvas$ mkdir -p log tmp/pids public/assets app/stylesheets/brandable_css_brands
sysadmin@appserver:/var/canvas$ touch app/stylesheets/_brandable_variables_defaults_autogenerated.scss
sysadmin@appserver:/var/canvas$ touch Gemfile.lock
sysadmin@appserver:/var/canvas$ touch log/production.log
sysadmin@appserver:/var/canvas$ sudo chown -R canvasuser config/environment.rb log tmp public/assets \
                              app/stylesheets/_brandable_variables_defaults_autogenerated.scss \
                              app/stylesheets/brandable_css_brands Gemfile.lock config.ru       

然后需要运行:

sysadmin@appserver:/var/canvas$ sudo yarn install
# 第一次安装的时候要下载,所以很慢,后来就很快了。
# 还是尽量要看看有没有错误,不过不管怎么样,最后都是要过下面的这一关!!!

sysadmin@appserver:/var/canvas$ sudo RAILS_ENV=production bundle exec rake canvas:compile_assets
# 最恶心的一步,没有之一!!!
# 很容易出错!!!检验你之前的部署有没有问题!!!
# 一定不能出现rake aborted,一般出现了都是因为前面的安装不当或者版本不对导致的
sysadmin@appserver:/var/canvas$ sudo chown -R canvas public/dist/brandable_css

如果您正在更新代码,并且您运行Canvas:Compile_assets没有数据库连接,那么一旦到位代码并且存在活动DB连接,您也希望运行以下操作。以完全更新现有的代码:

sysadmin@appserver:/var/canvas$ sudo RAILS_ENV=production bundle exec rake brand_configs:generate_and_upload_all

七、产生数据库

配置数据库后,我们assets也被安装好,我们需要使用表和初始数据填充数据库。 您可以通过从应用程序的 root 运行我们的 rake 迁移和初始化任务来执行此操作:

sysadmin@appserver:/var/canvas$ RAILS_ENV=production bundle exec rake db:initial_setup
# 注意,这一步会有一个交互的页面,提示用户输入管理员的账户(邮箱),还有管理员的密码。

请注意,此初始设置将交互式提示您创建管理员帐户,默认帐户的名称,以及是否将使用数据提交给引导程序。 通过设置以下环境变量,提示可以“预先填充”:

Environment VariableValue(s) supported
CANVAS_LMS_ADMIN_EMAILE-mail address used for default administrator login
CANVAS_LMS_ADMIN_PASSWORDPassword for default administrator login
CANVAS_LMS_ACCOUNT_NAMEAccount name seen by users, usually your organization name
CANVAS_LMS_STATS_COLLECTIONopt_in, opt_out, or anonymized

八、Canvas所有权

  • 确保Canvas不能写入过多的文件。

设置或选择用户希望Canvas Rails应用程序运行。这可以与您的Web服务器(Debian / Ubuntu上的www-data),您的个人用户帐户或其他东西相同。选择或创建新用户后,您需要将应用程序root中的密钥文件的所有权更改为该用户。

sysadmin@appserver:/var/canvas$ sudo adduser --disabled-password --gecos canvas canvasuser
  • 确保Canvas其他用户不能读取Canvas私有文件

您的配置目录(/ var / canvas / config)中有许多文件,其中包含密码,加密密钥和其他私人数据,如果它成为公有数据,则会损害Canvas安装的安全性。这些是Config Directory中的.yml文件,我们希望仅由 CanvasUser 用户读取它们。

  • 确保Canvas使用最严格的权限许可

Passenger 将根据 config/environment.rb 的所有权设置选择用户来运行应用程序(您可以通过命令查看所有权设置)。请注意,明智的做法可能是确保除上面设置了权限的文件之外的所有其他文件的所有权设置是限制性的,并且仅允许您的 canvasuser 用户帐户读取其余文件。ls -l

九、阿帕奇服务器

一、安装
# 添加到仓库的代码
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

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

# 随着时间推移可能不可用,所以您参考官网为准!

# 原始的安装阿帕奇代码
sudo apt-get install passenger libapache2-mod-passenger apache2

我们将使用mod_rewrite,因此您需要启用此功能。

sysadmin@appserver:/var/canvas$ sudo a2enmod rewrite

然后会提示重启阿帕奇,执行:

sysadmin@appserver:systemctl restart apache2

在 Mac OS X 上,您只需使用:

sysadmin@appserver:/var/canvas$ brew install passenger

,然后按照说明操作。

一旦你安装了Apache和Passenger,我们将需要设置Apache,Passenger和你的Rails应用程序,以便彼此了解。这将是一个简短的概述,有关更多详细信息,您应该查看[有关设置Apache的乘客文档](http://www.modrails.com/documentation/Users guide Apache.html)。

二、配置Passenger

首先,确保为您的 Apache 配置启用了 Passenger。在 Debian/Ubuntu 中,libapache2-mod-passenger 软件包应该将符号链接放在 */etc/apache2/mods-enabled/ 中,*称为 passenger.confpassenger.load。如果没有,或者它们以某种方式被禁用,则可以通过运行以下命令来启用 passenger:

sysadmin@appserver:/var/canvas$ sudo a2enmod passenger

会要求重启阿帕奇服务器,同理。

sysadmin@appserver:systemctl restart apache2

在其他设置中,您只需要确保将以下行添加到Apache配置中,并在必要时将路径更改为适当的值:


LoadModule passenger_module /usr/lib/apache2/modules/mod_passenger.so
PassengerRoot /usr
PassengerRuby /usr/bin/ruby

如果您由于权限问题而无法启动应用程序,则可能需要将此行添加到 passenger.conf、站点配置文件或 httpd.conf(其中 canvasuser 是 Canvas 运行的用户,例如 Debian/Ubuntu 系统上的 www-data):

# 文件内容 passenger.conf
### Begin automatically installed Phusion Passenger config snippet ###
<IfModule mod_passenger.c>
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultUser canvasuser
  PassengerDefaultRuby /usr/bin/passenger_free_ruby
</IfModule>
### End automatically installed Phusion Passenger config snippet ###
# passenger.load的文件内容 ,修改为下面的内容

LoadModule passenger_module /usr/lib/apache2/modules/mod_passenger.so
PassengerRoot /usr
PassengerRuby /usr/bin/ruby
三、使用阿帕奇配置SSL

接下来,我们需要确保您的 Apache 配置支持 SSL。Debian/Ubuntu 不会在默认情况下启用 SSL 模块的情况下发布 Apache,因此您需要创建适当的符号链接来启用它。

sysadmin@appserver:/var/canvas$ sudo a2enmod ssl
# 之后也要 systemctl restart apache2

在其他系统上,您需要确保配置中包含如下内容:

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLRandomSeed startup builtin
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect builtin
SSLRandomSeed connect file:/dev/urandom 512
SSLSessionCache        shmcb:/var/run/apache2/ssl_scache(512000)
SSLSessionCacheTimeout  300
SSLMutex  file:/var/run/apache2/ssl_mutex
SSLCipherSuite HIGH:MEDIUM:!ADH
SSLProtocol all -SSLv2
四、使用 Apache 配置 Canvas

现在,我们需要告诉乘客您的特定 Rails 应用程序。首先,禁用任何您不想运行的Apache VirtualHosts。在 Debian/Ubuntu 上,你可以简单地取消链接你不感兴趣的 /etc/apache2/sites 启用子目录中的任何符号链接。在其他设置中,您可以删除或注释掉不需要的虚拟主机。

sysadmin@appserver:/var/canvas$ sudo unlink /etc/apache2/sites-enabled/000-default.conf

现在,我们需要为您的应用程序创建一个VirtualHost。在 Debian/Ubuntu 上,我们需要制作一个名为 /etc/apache2/sites-available/canvas 的新文件。在其他设置中,找到放置 VirtualHosts 定义的位置。您可以像这样打开此文件:

sysadmin@appserver:/etc/apache2/sites-enabled$ sudo nano /etc/apache2/sites-available/canvas.conf

在新文件或新位置(视情况而定)中,您希望放置以下代码段。您将需要修改指定的行 ServerName(2)、ServerAdmin(2)、DocumentRoot(2)、SetEnv(2)、Directory(2),可能还有 SSLCertificateFile(1) 和 SSLCertificateKeyFile(1),下面在“关于 SSL 证书的说明”中讨论。

<VirtualHost *:80>
  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
  <Directory /var/canvas/public>
    Allow from all
    Options -MultiViews
  </Directory>
</VirtualHost>
<VirtualHost *:443>
  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
  <Directory /var/canvas/public>
    Allow from all
    Options -MultiViews
  </Directory>
</VirtualHost>

**警告:Apache 2.4 用户要修改:**Apache 2.4 中的允许/选项配置已更改。你可能会想要这样的东西:<Directory /var/canvas/public>

  # 之前的是
  <Directory /var/canvas/public>
    Allow from all
    Options -MultiViews
  </Directory>
  
  # 应该的是:
  <Directory /var/canvas/public>
    Options All
    AllowOverride All
    Require all granted
  </Directory>
  
  # 我两个都改了

最后,如果您将其创建为 /etc/apache2/sites-available 中自己的文件,我们需要将其设置为启用的站点。

sysadmin@appserver:/etc/apache2/sites-enabled$ sudo a2ensite canvas
五、关于SSL证书的说明

您会在上面的 Canvas 配置文件中注意到,我们向 SSLCertificateFileSSLCertificateKeyFile 提供了指令。指定的文件是操作系统附带的自签名证书。

默认情况下,浏览器配置为不接受自签名证书而不会出现问题。这样做的原因是,否则使用自签名证书的服务器可能会面临所谓的中间人攻击的风险。

如果要为 Canvas 安装获取用户浏览器自动接受的证书,则需要联系证书颁发机构并生成一个证书颁发机构。举个例子,Digicert(付费)和Let’s Encrypt(免费)是常用的证书颁发机构。

有关使用 SSL 设置 Apache 的更多信息,请参阅 O’Reilly OnLamp.com的说明、Apache 的官方 SSL 文档众多证书颁发机构网站中的任何一个。

六、优化文件的下载

如果您将上传的文件存储在本地,而不是存储在 S3 中,则可以使用 X-Sendfile 标头(nginx 中的 X-Accel-Redirect)优化文件的下载。首先确保 apache 已安装并启用mod_xsendfile。对于UBUNTU,这可以通过以下命令来完成:

sysadmin@appserver:/var/canvas$ sudo apt-get install libapache2-mod-xsendfile

此命令安装并启用模块。为确保模块正常运行,您可以使用:

sysadmin@appserver:/var/canvas$ sudo apachectl -M | sort

模块**xsendfile_module(共享)**应在列表中。

在下面的文件中,您将找到一些必要的行,但已注释掉。我们建议您创建一个文件,并将未注释的行添加到该文件中,以避免将来发生合并冲突。

config/environments/production.rb
config.action_dispatch.x_sendfile_header
config/environments/production-local.rb

/etc/apache2/sites-available/canvas.conf 的Canvas虚拟主机中,添加以下两个指令:

    XSendFile On
    XSendFilePath /var/canvas

十、缓存配置

Canvas 支持两种不同的缓存方法:Memcache 和 redis。但是,Canvas 的某些功能需要 redis 才能使用,例如 OAuth2,因此建议您也使用 redis 进行缓存,以保持简单。以下是设置 redis 的说明。

如果您在 Mac OS X 上使用 Homebrew,则可以通过运行命令来安装 redis:。brew install redis

对于 Ubuntu,您可以使用 redis-server 软件包。但是,在可信度上,它不够新,因此您需要使用向后附加PPA来提供它:https://launchpad.net/~chris-lea/+archive/redis-server。

sysadmin@appserver:/var/canvas$ sudo add-apt-repository ppa:chris-lea/redis-server
sysadmin@appserver:/var/canvas$ sudo apt-get update
sysadmin@appserver:/var/canvas$ sudo apt-get install redis-server

安装 redis 后,启动服务器。有多种方法可以执行此操作。您可以将其设置为在服务器引导时自动运行,也可以手动运行它。

要从 Homebrew 安装中手动运行它,请运行命令:。redis-server /usr/local/etc/redis.conf

现在,我们需要返回到 canvas-lms 目录并编辑配置。在配置文件夹中,我们将复制cache_store.yml.example并对其进行编辑:

sysadmin@appserver:/var/canvas$ cd /var/canvas/
sysadmin@appserver:/var/canvas$ sudo cp config/cache_store.yml.example config/cache_store.yml
sysadmin@appserver:/var/canvas$ sudo nano config/cache_store.yml
sysadmin@appserver:/var/canvas$ sudo chown canvasuser config/cache_store.yml
sysadmin@appserver:/var/canvas$ sudo chmod 400 config/cache_store.yml

该文件可能以注释掉的所有缓存方法开头。将您的配置文件与以下条目匹配:

test:
  cache_store: redis_store
development:
  cache_store: redis_store
production:
  cache_store: redis_store

然后,通过应对和编辑 redis.yml.example 在 中指定 redis 实例信息:redis.yml

sysadmin@appserver:/var/canvas$ cd /var/canvas/
sysadmin@appserver:/var/canvas$ sudo cp config/redis.yml.example config/redis.yml
sysadmin@appserver:/var/canvas$ sudo nano config/redis.yml
sysadmin@appserver:/var/canvas$ sudo chown canvasuser config/redis.yml
sysadmin@appserver:/var/canvas$ sudo chmod 400 config/redis.yml
production:
  servers:
    - redis://localhost

在我们的示例中,redis 与 Canvas 运行在同一台服务器上。这在生产环境中并不理想,因为Rails和redis都占用大量内存。只需将“localhost”更改为 redis 实例服务器的地址即可。

Canvas 可以选择对缓存和其他数据使用不同的 redis 实例。最简单的选择是对两者使用相同的 redis 实例。如果要拆分它们,请保留用于数据 redis 的 redis.yml 配置,但将另一个单独的服务器列表添加到 cache_store.yml 以指定用于缓存的实例。

保存文件并重新启动 Canvas。

十一、自动化作业运行

如果你在 Debian/Ubuntu 上,你可以非常轻松地安装这个守护进程,首先通过从 /var/canvas/script/canvas_init/etc/init.d/canvas_init 创建一个符号链接,然后通过配置这个脚本以在有效的运行级别运行(可能很快就是 upstart 代替原来的 start ):

sysadmin@appserver:/var/canvas$ sudo ln -s /var/canvas/script/canvas_init /etc/init.d/canvas_init
sysadmin@appserver:/var/canvas$ sudo update-rc.d canvas_init defaults
sysadmin@appserver:/var/canvas$ sudo /etc/init.d/canvas_init start

十二、开启服务器

  • 开始你的旅程~
sudo /etc/init.d/apache2 restart

和redis都占用大量内存。只需将“localhost”更改为 redis 实例服务器的地址即可。

Canvas 可以选择对缓存和其他数据使用不同的 redis 实例。最简单的选择是对两者使用相同的 redis 实例。如果要拆分它们,请保留用于数据 redis 的 redis.yml 配置,但将另一个单独的服务器列表添加到 cache_store.yml 以指定用于缓存的实例。

保存文件并重新启动 Canvas。

十一、自动化作业运行

如果你在 Debian/Ubuntu 上,你可以非常轻松地安装这个守护进程,首先通过从 /var/canvas/script/canvas_init/etc/init.d/canvas_init 创建一个符号链接,然后通过配置这个脚本以在有效的运行级别运行(可能很快就是 upstart 代替原来的 start ):

sysadmin@appserver:/var/canvas$ sudo ln -s /var/canvas/script/canvas_init /etc/init.d/canvas_init
sysadmin@appserver:/var/canvas$ sudo update-rc.d canvas_init defaults
sysadmin@appserver:/var/canvas$ sudo /etc/init.d/canvas_init start

十二、开启服务器

  • 开始你的旅程~
sudo /etc/init.d/apache2 restart
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值