Nodejs 版本:12.0 以上
Github Repository: https://github.com/instructure/canvas-rce-api
克隆代码
$ cd /data
$ git clone https://github.com/instructure/canvas-rce-api.git canvas-rce
安装 Node 依赖
$ cd canvas-rce
$ npm install --production
如提示权限问题,可尝试:
$ npm install --unsafe-perm=true --allow-root
安装 nodemon
$ sudo npm install -g nodemon
RCE 配置文件
$ cp .env.example .env
编辑配置文件
$ nano .env
参考配置如下:
PORT=3000
NODE_ENV=production
STATSD_HOST=127.0.0.1
STATSD_PORT=8125
ECOSYSTEM_SECRET=astringthatisactually32byteslong
ECOSYSTEM_KEY=astringthatisactually32byteslong
#CIPHER_PASSWORD=TEMP_PASSWORD
#FLICKR_API_KEY=fake_key
#UNSPLASH_APP_NAME=canvas-rce-api-dev
#UNSPLASH_APP_ID=fake_app_id
#UNSPLASH_SECRET=fake_secret
#YOUTUBE_API_KEY=fake_key
其中 ECOSYSTEM_SECRET 等效于 canvas/config/dynamic_settings.yml 文件中的 signing-secret,而 ECOSYSTEM_KEY 等效于 encryption-secret,对照 Canvas 配置文件目录 config 下面的 dynamic_settings.yml 中设置的两串密钥,同时将 NODE_ENV 修改为 production
修改 Apache 虚拟主机配置文件
$ sudo nano /etc/apache2/sites-available/canvas.conf
80 和 443 节点末尾都添加:ProxyPass /rce/ http://127.0.0.1:3000/
注意端口号3000后面的 "/"
修改 Canvas 配置文件:
$ nano config/dynamic_settings.yml
将 app-host 修改为代理地址:
rich-content-service:
app-host: "https://xxxxxxx.com/rce"
执行如下命令,启用 Apache 相关模块:
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo a2enmod proxy_balancer
$ sudo a2enmod lbmethod_byrequests
如果后期 RCE 单独运行在另外一台独立服务器,可执行如下命令,禁用 Apache 相关模块(注意顺序):
$ sudo a2dismod lbmethod_byrequests
$ sudo a2dismod proxy_balancer
$ sudo a2dismod proxy_http
$ sudo a2dismod proxy
修改 apache.conf
$ sudo nano /etc/apache2/apache2.conf
修改:
ServerName localhost
重启 Apache 服务
$ sudo service apache2 restart
启动 Nodejs App
$ npm run start:dev
浏览器打开:https://xxxx.xxxxxx.com/rce/ (注意路径 rce 后面的 "/" 不可省略)页面返回: Hello, from RCE Service
开机自动启动
$ sudo npm install pm2@latest -g
Canvas LMS 开启 RCE 增强:
打开:https://canvas.xxxxxx.com/accounts/site_admin/settings
安装 PM2 随机启动
$ sudo npm i -g pm2
开启开机自启动,顺序不要错:
# 启动项目
$ pm2 start /data/rce/app.js
# 保存当前进程状态
$ pm2 save
# 生成开机自启动服务
$ pm2 startup
#开机服务
$ systemctl enable pm2-root
#重启测试
$ sudo reboot