由于时间原因,部分内容机器翻译可能不准确,欢迎修改提出 issue,本文档处于动态更新中 ······
特别感谢为本篇文章提供了技术支持和bug修复的文章:
来自CSDN的博主提供的文章支持:Canvas LMS_geekfly的博客-CSDN博客
来自某位不知名的博主提供的文章支持:canvas-lms系统生产(productuon)环境安装(上)
本教程将引导您了解如何让 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服务器或自动作业守护程序。
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。这一步至关重要!一定要检查版本号!
postgresql.conf
以及 pg_hba.conf
文件,请参考链接的描述: the Postgres documentation.如果您希望在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
sysadmin@appserver:~$ sudo apt-get install git git-core
sysadmin@appserver:~$ git clone -b stable/2021-11-10 https://github.com/instructure/canvas-lms.git /var/canvas
sysadmin@appserver:~$ cd canvas
# cd 到 /var目录下执行
你可以根据链接,下载下面的文件:去
请将 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$
我们现在需要安装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
对于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
Canvas 依赖 Ruby Gems。 Ruby Gems是一个特定于 Ruby 的包管理系统,用于正交运行到操作系统包管理系统。
Canvas 使用 Bundler 作为附加在 Ruby Gem上层的版本管理依赖,执行下面的命令安装:
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
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,也是非常恶心的一步。
# 基本上这一步安装好了后面就不会因为网络寄了。
在我们在数据库中设置所有表之前,我们的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
如果您不想使用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
现在我们需要将数据库配置设置为指向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设置步骤中设置的其他任何东西。
对于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 的部分行。
在许多通知电子邮件中,以及其他一些未被 Web 请求触发的事件,Canvas需要知道它是从中可见的URL。 目前,这些都基于域名构建。 请将 config / Domain.yml
的 Production 部分编辑为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地址。
您必须在此文件中插入至少20个字符的随机字符串:
sysadmin@appserver:/var/canvas$ cp config/security.yml.example config/security.yml
sysadmin@appserver:/var/canvas$ nano config/security.yml
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 Variable | Value(s) supported |
---|---|
CANVAS_LMS_ADMIN_EMAIL | E-mail address used for default administrator login |
CANVAS_LMS_ADMIN_PASSWORD | Password for default administrator login |
CANVAS_LMS_ACCOUNT_NAME | Account name seen by users, usually your organization name |
CANVAS_LMS_STATS_COLLECTION | opt_in, opt_out, or anonymized |
设置或选择用户希望Canvas Rails应用程序运行。这可以与您的Web服务器(Debian / Ubuntu上的www-data),您的个人用户帐户或其他东西相同。选择或创建新用户后,您需要将应用程序root中的密钥文件的所有权更改为该用户。
sysadmin@appserver:/var/canvas$ sudo adduser --disabled-password --gecos canvas canvasuser
您的配置目录(/ var / canvas / config
)中有许多文件,其中包含密码,加密密钥和其他私人数据,如果它成为公有数据,则会损害Canvas安装的安全性。这些是Config Directory中的.yml文件,我们希望仅由 CanvasUser 用户读取它们。
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)。
首先,确保为您的 Apache 配置启用了 Passenger。在 Debian/Ubuntu 中,libapache2-mod-passenger 软件包应该将符号链接放在 */etc/apache2/mods-enabled/ 中,*称为 passenger.conf 和 passenger.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
接下来,我们需要确保您的 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
现在,我们需要告诉乘客您的特定 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
您会在上面的 Canvas 配置文件中注意到,我们向 SSLCertificateFile 和 SSLCertificateKeyFile 提供了指令。指定的文件是操作系统附带的自签名证书。
默认情况下,浏览器配置为不接受自签名证书而不会出现问题。这样做的原因是,否则使用自签名证书的服务器可能会面临所谓的中间人攻击的风险。
如果要为 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