Difference between revisions of "Canvas Deployment"

From CMU ITSC Network
Line 183: Line 183:
 
== canvas lms build and deployment ==
 
== canvas lms build and deployment ==
 
=== on canvas lms server ===
 
=== on canvas lms server ===
 +
 +
* mount nfs file share edit file '''/etc/fstab'''
 +
<syntaxhighlight lang=bash>
 +
$ sudo apt-get install -y nfs-common
 +
$ sudo vim /etc/fstab
 +
</syntaxhighlight>
 +
 +
add line end of file like
 +
<syntaxhighlight lang=bash>
 +
10.110.60.239:/export/cnoc /home/cnoc/share nfs auto,noatime,nolock,bg,nfsvers=4,intr,tcp,actimeo=1800 0 0
 +
</syntaxhighlight>
 +
 +
create mount point
 +
<syntaxhighlight lang=bash>
 +
$ mkdir /home/cnoc/share
 +
</syntaxhighlight>
 +
 +
mount nfs file share
 +
<syntaxhighlight lang=bash>
 +
$ sudo mount -a
 +
</syntaxhighlight>
 +
 +
* clone canvas source code
 +
<syntaxhighlight lang=bash>
 +
$ git clone https://github.com/instructure/canvas-lms.git canvas
 +
$ cd canvas
 +
$ git checkout stable
 +
</syntaxhighlight>
 +
 +
* install ruby
 +
<syntaxhighlight lang=bash>
 +
$ sudo apt-get install software-properties-common
 +
$ sudo add-apt-repository ppa:brightbox/ruby-ng
 +
$ sudo apt-get update
 +
$ sudo apt-get install ruby2.4 ruby2.4-dev zlib1g-dev libxml2-dev \
 +
                      libsqlite3-dev libpq-dev \
 +
                      libxmlsec1-dev curl make g++
 +
</syntaxhighlight>
 +
 +
* install node.js
 +
<syntaxhighlight lang=bash>
 +
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
 +
$ sudo apt-get install nodejs
 +
</syntaxhighlight>
 +
 +
* install Bundler
 +
<syntaxhighlight lang=bash>
 +
$ sudo gem install bundler --version 1.13.6
 +
$ bundle _1.13.6_ install --path vendor/bundle
 +
</syntaxhighlight>
 +
 +
* install Yarn
 +
<syntaxhighlight lang=bash>
 +
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
 +
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
 +
$ sudo apt-get update && sudo apt-get install yarn=1.10.1-1
 +
 +
$ yarn install
 +
</syntaxhighlight>
 +
 +
* copy configuration file
 +
<syntaxhighlight lang=bash>
 +
$ 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
 +
</syntaxhighlight>
 +
 +
* Dynamic settings configuration
 +
<syntaxhighlight lang=bash>
 +
$ cp config/dynamic_settings.yml.example config/dynamic_settings.yml
 +
$ vim config/dynamic_settings.yml
 +
</syntaxhighlight>
 +
 +
add configuration on top of file
 +
<syntaxhighlight lang=bash>
 +
production:
 +
  config:
 +
    canvas:
 +
      canvas:
 +
        encryption-secret: "your secret on rce .env file"
 +
        signing-secret: "your secret on rce .env file"
 +
      rich-content-service:
 +
        app-host: "rce-canvas.cm.edu"
 +
</syntaxhighlight>

Revision as of 05:52, 23 July 2020

Diagram

Canvas.cm.edu.png

domain : canvas.cm.edu
rce domain : rce-canvas.cm.edu
nginx load balancer
- ip : 10.110.60.55
share file ip : 10.110.60.239
- server ubuntu 18.04 with docker, cpu 4, ram 8
- ip : 10.110.60.239
postgres :
- server : ubuntu 18.04 with docker, cpu 4, ram 8
- ip :10.110.60.209
canvas-lms
- server : ubuntu 16.04 cpu 8, ram 8
- ip : 10.110.60.215, 10.110.60.144

nfs share file configuration

on file share server

  • install nfs
$ sudo apt-get install -y nfs-kernel-server
  • create directory for file sharing
$ mkdir -p /home/cnoc/share
$ sudo mkdir -p /export/cnoc
$ sudo chown cnoc:cnoc /export/cnoc
  • bind mount filesystem edit file /etc/fstab
$ sudo vim /etc/fstab

add line end of file like

UUID=702da501-ff9a-11e9-a6a6-506b8dc215cd / ext4 defaults 0 0
UUID=702da500-ff9a-11e9-a6a6-506b8dc215cd /boot ext4 defaults 0 0
/swap.img       none    swap    sw      0       0
/home/cnoc/share /export/cnoc none bind 0 0

mount filesystem

$ sudo mount -a
  • export fs configuration
$ sudo vim /etc/exports

add line end of file like this allow canvas lms use nfs exports if add canvas-lms server you have to add new server ip address here

/export/cnoc 10.110.60.215(rw,sync,no_root_squash,no_subtree_check)
/export/cnoc 10.110.60.144(rw,sync,no_root_squash,no_subtree_check)

restart nfs service

$ sudo service nfs-kernel-server restart

postgres database deployment

on postgres server

  • create dokcer-compose.yml for deploy postgres database
$ mkdir postgres
$ cd postgres
$ vim docker-compose.yml

add line in docker-compose.yml like

version: '3'
services:
        pg:
                image: postgres:12.3
                container_name: postgres
                restart: always
                environment:
                        POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
                        POSTGRES_DB: ${POSTGRES_DB}
                volumes:
                        - ./data:/var/lib/postgresql/data
                ports:
                        - 5432:5432
        adminer:
                image: adminer
                restart: always
                ports:
                        - 8080:8080
  • create .env file for environment variables use in container
$ vim .env

add line in .env file like

POSTGRES_PASSWORD=<your password>
POSTGRES_DB=canvas
  • deploy postgres
$ docker-compose up -d


redis cache deployment

on file share server

  • create docker-compose.yml for deploy redis
$ mkdir redis
$ cd redis
$ vim docker-compose.yml

add line in docker-compose.yml like

version: '3'
services:
        redis:
                container_name: redis
                image: redis:6.0.4
                ports:
                        - 6379:6379
                restart: always
  • deploy redis
$ docker-compose up -d

canvas rce api deployment

on file share server

  • create docker-compose.yml for deployment
$ mkdir canvas-rce-api
$ cd redis
$ vim docker-compose.yml

add line in docker-compose.yml like

version: '3'
services:
        canvas-rce-api:
                container_name: canvas-rce-api
                image: instructure/canvas-rce-api
                ports:
                        - 80:80
                environment:
                        ECOSYSTEM_KEY: ${ECOSYSTEM_KEY}
                        ECOSYSTEM_SECRET: ${ECOSYSTEM_SECRET}
                        NODE_ENV: production
                        STATSD_HOST: statsd
                        STATSD_PORT: 1825
                restart: always
                extra_hosts:
                        - "canvas.cm.edu:10.110.60.55"
        statsd:
                container_name: statsd
                image: statsd/statsd
                restart: always
  • create .env file for environment variables use in container
$ vim .env

add line in .env like

ECOSYSTEM_KEY="astringthatisactually32byteslong"
ECOSYSTEM_SECRET="astringthatisactually32byteslong"
  • deploy canvas rce api
$ docker-compose up -d

canvas lms build and deployment

on canvas lms server

  • mount nfs file share edit file /etc/fstab
$ sudo apt-get install -y nfs-common
$ sudo vim /etc/fstab

add line end of file like

10.110.60.239:/export/cnoc /home/cnoc/share nfs auto,noatime,nolock,bg,nfsvers=4,intr,tcp,actimeo=1800 0 0

create mount point

$ mkdir /home/cnoc/share

mount nfs file share

$ sudo mount -a
  • clone canvas source code
$ git clone https://github.com/instructure/canvas-lms.git canvas
$ cd canvas
$ git checkout stable
  • install ruby
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:brightbox/ruby-ng
$ sudo apt-get update
$ sudo apt-get install ruby2.4 ruby2.4-dev zlib1g-dev libxml2-dev \
                       libsqlite3-dev libpq-dev \
                       libxmlsec1-dev curl make g++
  • install node.js
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install nodejs
  • install Bundler
$ sudo gem install bundler --version 1.13.6
$ bundle _1.13.6_ install --path vendor/bundle
  • install Yarn
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt-get update && sudo apt-get install yarn=1.10.1-1

$ yarn install
  • copy configuration file
$ 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
  • Dynamic settings configuration
$ cp config/dynamic_settings.yml.example config/dynamic_settings.yml
$ vim config/dynamic_settings.yml

add configuration on top of file

production:
  config:
    canvas:
      canvas:
        encryption-secret: "your secret on rce .env file"
        signing-secret: "your secret on rce .env file"
      rich-content-service:
        app-host: "rce-canvas.cm.edu"