Skip to content

Instantly share code, notes, and snippets.

@milisarge
Last active April 13, 2022 07:54
Show Gist options
  • Save milisarge/0d0dfd2fe76923b1dbf0b455e29d269d to your computer and use it in GitHub Desktop.
Save milisarge/0d0dfd2fe76923b1dbf0b455e29d269d to your computer and use it in GitHub Desktop.
Canvas-LMS Kurulum Notlar

İşletim Sistemi bilgileri

Debian Bullseye LXC

Ön-gerekler

apt install wget git lxc file
# file komutu Canvas koşuğunda gereklidir.

LXC kurulması

# Canvas koşuğu
# setting up GPG keyring sorun çıkarırsa --no-validate eklenebilir.
sudo lxc-create  -t download -n canvas-c1 -- -d debian -r bullseye -a amd64 --no-validate
# Veritabanı koşuğu
sudo lxc-create  -t download -n database-c1 -- -d alpine -r edge -a amd64 --no-validate
# Redis koşuğu
sudo lxc-create  -t download -n redis-c1 -- -d alpine -r edge -a amd64 --no-validate

Proxmox-Konteyner Kurulumu

# lxc template listeleme ve indirilmesi
pveam available
pveam download local alpine-3.15-default_20211202_amd64.tar.xz
pveam download local ubuntu-20.04-standard_20.04-1_amd64.tar.gz
pveam download local debian-11-standard_11.3-1_amd64.tar.zst
# Template indirildikten sonra arayüzde yeni konteyner eklerken indirilenler listeye düşecektir.
NFS erişim için canvas konteyner privileged modda olmalı.
Unprivileged ise backup alınıp privileged olarak restore edilmeli.

LXC-Nginx kurulması ve ayarları (Yönetim ve Yönlendirme)

# alpine linux
apk add openssh nano bash
# permitrootlogin -yes
rc-update add sshd
rc-service sshd start
setup-timezone -z Europe/Istanbul
apk add nginx
rc-update add nginx
rc-service nginx start
# canvas kurulumundan sonra upstream ve server ayarları yapılacak.

LXC-Veritabanı kurulması ve ayarları (Veritabanı)

# alpine linux
setup-timezone -z Europe/Istanbul
apk add postgresql
rc-update add postgresql
rc-service postgresql start
# root kullanıcı oluşturulacak
su postgres 
createuser root
psql -c "alter user root with superuser" postgres
# db şifre set edilecek
createuser canvas --no-createdb --no-superuser --no-createrole --pwprompt
createdb canvas_production --owner=canvas


# /etc/postgresql/pg_hba.conf
# içerik olmalı
host    all             all             127.0.0.1/32            md5
# remote açma
host all all 192.168.122.111/24 md5

# /etc/postgresql/postgresql.conf
listen_addresses = '*' 

Veritabanı kurulması ve ayarları (Veritabanı)

apt install postgresql
# root kullanıcı oluşturulacak
sudo -u postgres createuser root
sudo -u postgres psql -c "alter user root with superuser" postgres
# db şifre set edilecek
createuser canvas --no-createdb --no-superuser --no-createrole --pwprompt
createdb canvas_production --owner=canvas


#/etc/postgresql/12/main/pg_hba.conf
# içerik olmalı
host    all             all             127.0.0.1/32            md5
# remote açma
host all all 10.0.3.111/24 md5

Canvas kodunun indirilmesi-dışarı çıkarılması (Canvas)

#wget https://github.com/instructure/canvas-lms/archive/stable.tar.gz -O ~/canvas-lms-stable.tar.gz
export CANVAS_SOURCE_VERSION="2021-12-15.42"
wget https://github.com/instructure/canvas-lms/archive/release/${CANVAS_SOURCE_VERSION}.tar.gz -O ~/canvas-${CANVAS_SOURCE_VERSION}.tar.gz
cd /var
tar xf ~/canvas-${CANVAS_SOURCE_VERSION}.tar.gz
mv canvas-lms-release-${CANVAS_SOURCE_VERSION} canvas
cd canvas

Gerekler - Ruby 2.7 (Canvas)

apt install software-properties-common automake curl make g++
apt install git ruby2.7 ruby2.7-dev zlib1g-dev libxml2-dev libsqlite3-dev postgresql libpq-dev libxmlsec1-dev 

Gerekler - Nodejs (Canvas)

curl -sL https://deb.nodesource.com/setup_14.x | bash -
sudo apt install nodejs

Gerekler - Ruby Gems (Canvas)

cd /var/canvas
export bundler_version="2.2.19"
gem install bundler --version ${bundler_version}
bundle _${bundler_version}_ install --without pulsar --path vendor/bundle

Gerekler - Yarn (Canvas)

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

Gerekler - Redis

setup-timezone -z Europe/Istanbul
apk add bash nano openssh
# nano /etc/ssh/sshd_config permitrootlogin yes yapılır
rc-service sshd start

# depodaki
apk add redis
# nano /etc/redis.conf bind satırı yoruma alınarak tüm arayüzlerin dinlenmesi sağlanır.
rc-service redis start

# elle derleme
# Depodaki Redis sürümünün desteklememe durumuna karşı elle derleme ve ayarlamalar yapılır.
# stable 6.2 elle derleme/kurulum
# derlemeler için
apk add musl-dev gcc make linux-headers
# jemalloc
wget -O - https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2 | tar -xj && cd jemalloc-5.2.1 
./configure && make && make install 
cd
wget https://download.redis.io/releases/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make && make PREFIX=/usr install
cp utils/systemd-redis_server.service /etc/systemd/system/redis-server.service
# redis-server.service dosyasında exec satırına ayar dosyası da eklenir!
mkdir -p /etc/redis && cp redis.conf /etc/redis/

# canvas ayarları
cd /var/canvas
cp config/cache_store.yml.example config/cache_store.yml
cp config/redis.yml.example config/redis.yml
vim config/redis.yml

# içerik

 production:
    - redis://x.x.x.x

Öntanımlı ayarlar (Canvas)

for config in amazon_s3 database delayed_jobs domain file_store outgoing_mail security external_migration dynamic_settings logging; do cp config/$config.yml.example config/$config.yml; done

# domain ayarları yapılır.
# domain ismi tüm koşuklarda aynı yapmaka gerekecek, canvas1, canvas2 e yönlenmemesi için - test edilecek
vim config/domain.yml

# örnek içerik
production:
  domain: "canvas.myhost"

# database ayarları(host, user, şifre)
vim config/database.yml

# loglama ayarları yapılır.
vim config/logging.yml

production:
  logger: rails
  log_level: error
  
# dosya kayıt yeri seçilir.
vim config/file_store.yml

production:
  storage: local
  path_prefix: tmp/files

# security ayarları yapılır.
vim config/security.yml

Assetlerin oluşturulması (Canvas)

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

# asset derlerken
export LC_ALL=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8

ln -s /usr/bin/python3 /usr/bin/python

yarn install
# 2021-12 sürümünde aşağıdaki komut gerek olmadı.
bundle install
# assetlerin derlenmesi
RAILS_ENV=production bundle exec rake canvas:compile_assets

Veritabanını ilkleme (Canvas)

export CANVAS_LMS_ADMIN_EMAIL="admin@hostname"
export CANVAS_LMS_ADMIN_PASSWORD="123456789"
export CANVAS_LMS_ACCOUNT_NAME="Universite"
export CANVAS_LMS_STATS_COLLECTION="opt_out"

RAILS_ENV=production bundle exec rake db:initial_setup

NFS sunucu kurulumu (Anayer)

# bu kurulum direk host sisteme nfs server kurulacaksa uygulanacaktır.
apt install nfs-kernel-server
mkdir -p /mnt/NFS
chown nobody:nogroup /mnt/NFS
chmod -R 777 /mnt/NFS
nano /etc/exports 
# aşağıdaki satır eklenir
/mnt/depo    xx.xx.xx.xx/24(rw,all_squash,subtree_check)
nano /etc/apparmor.d/lxc/lxc-default-cgns
# aşağıdaki satırlar yorumsuz profilin içinde olacak şekilde eklenir.
# mount fstype=nfs*,
# mount options=(rw, bind, ro),
exportfs -a
systemctl restart nfs-server

LXC-NFS sunucu kurulumu

# proxmox disk
- mp0 disk bağlanır. rootfs yanında
- konteyner privileged olmalıdır. unpriviliged nfs/cifs yetkisiz.
- arayüzden olmazsa /etc/pve/lxc/xxx.conf içinde ilgili satır aşağıdaki gibi güncellenir.
features: mount=nfs,nesting=1
unprivileged: 0
lxc.cap.drop:

# copy drop list from /usr/share/lxc/config/common.conf
lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio
# copy drop list from /usr/share/lxc/config/alpine.common.conf with setpcap commented
lxc.cap.drop = audit_write
lxc.cap.drop = ipc_owner
lxc.cap.drop = mknod
# lxc.cap.drop = setpcap
lxc.cap.drop = sys_nice
lxc.cap.drop = sys_pacct
lxc.cap.drop = sys_ptrace
lxc.cap.drop = sys_rawio
lxc.cap.drop = sys_resource
lxc.cap.drop = sys_tty_config
lxc.cap.drop = syslog
lxc.cap.drop = wake_alarm
# prox/apparmor ayarı
/etc/pve/lxc/xxx.conf içinde alt satıra aşağıdaki ayar eklenecek. nfs dosya sistemini tanıtmak için.
lxc.apparmor.profile: unconfined

# alpine linux
apk add openssh nano bash
# permitrootlogin -yes
rc-update add sshd
rc-service sshd start
setup-timezone -z Europe/Istanbul
apk add ntfs-utils
mkdir -p /mnt/depo
chown nobody:nogroup /mnt/depo
chmod -R 777 /mnt/depo
/etc/exports içinde aşağıdaki ayar eklenecek.
/mnt/depo    172.19.1.59/24(rw,sync,subtree_check)
rc-update add nfs
rc-service nfs start
# nfs kurulumundan sonra istemciler ayarlanacak.

NFS istemci kurulumu (Canvas)

apt install nfs-common
mkdir -p /var/canvas/tmp/files
mount 192.168.122.1:/mnt/NFS /var/canvas/tmp/files
# nano /etc/fstab
# aşağıdaki içerik eklenir.
# 192.168.122.1:/mnt/NFS /var/canvas/tmp/files  nfs      defaults    0       0

Passenger ve Nginx

apt install nginx passenger 

apt install -y dirmngr gnupg
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
apt install -y apt-transport-https ca-certificates

echo "deb https://oss-binaries.phusionpassenger.com/apt/passenger stretch main" > /etc/apt/sources.list.d/passenger.list
apt update
apt install -y libnginx-mod-http-passenger

Passenger Ayarları

# /var/canvas/Passengerfile.json
{
 "environment":"production",
 "daemonize":"yes",
}

Nginx Ayarları (Anayer)

server  {
   listen 80;
   server_name debian-c2;
   #root /var/canvas/public;
   charset utf-8;
   include mime.types;
   default_type application/octet-stream;
   access_log /var/log/nginx/canvas.access.log;
   error_log /var/log/nginx/canvas.error.log;
   passenger_enabled on;
   rails_env production;
   # yüklü istek gövde boyutu - 413 error
   client_max_body_size 120M;
   location /{
     proxy_pass http://127.0.0.1:3000;
     proxy_set_header Host $host;
   }
}

Nginx Çoklu Canvas Ayarları (Anayer)

Alpine linux için /etc/nginx/http.d/default.conf dosyası içinde aşağıdaki ayarlar yapılır.

upstream puma_servers{
        server 192.168.122.240:3001 fail_timeout=0;
        server 192.168.122.241:3001 fail_timeout=0;
}
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        # yüklü istek gövde boyutu - 413 error
        client_max_body_size 120M;
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://puma_servers;
        }
        client_max_body_size 10M;
...

Canvas'ı Çalıştırma (Canvas)

# Statik assetlerin görülmesi için 
# config/environments/production.rb aşağıdaki ayar yapılmalı
config.public_file_server.enabled = true

# Canvas rails app çalıştırmak
RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3001

# Canvas rails app Nginx + Passenger çalıştırma
# yoksa bazı linkler 0.0.0.0 a gidiyor
# passenger nginx üzerinden canvas 
RAILS_ENV=production passenger start
# Passengerfile.json tanımlandıysa
passenger start/stop

# Diğer konsolda delayed_jobs çalıştırılmalı (sis_import işleri için)
RAILS_ENV=production script/delayed_job start

Canvas Servisi (Canvas)

#! /bin/sh
. /lib/lsb/init-functions
N=/etc/init.d/canvas
set -e
case "$1" in
  start)
        if [ -d /var/canvas ];then
          cd /var/canvas
          export RAILS_ENV=production
          bundle exec rails server -b 0.0.0.0 -p 3001 &
          script/delayed_job start &
          cd -
        else
          echo "canvas kurulu degil!"
        fi
        ;;
  stop|reload|restart|force-reload|status)
        ;;
  *)
        echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
        exit 1
        ;;
esac
exit 0
# Yukarıdaki betik /etc/init.d/canvas olarak kayıt edilerek aşağıdaki komut ile konteynerin açılışında başlaması sağlanır.
ln -s /etc/init.d/canvas /etc/rc5.d/S99canvas

Canvas Kopyalama (Clone)

  • Proxmox clone işlevi duran bir veya şablon canvas konteynerinden yapılır.
  • Çalıştırılmadan network ayarından IP güncellenir.
  • Canvas: domain.yml güncellenir.

Düzeltme

pulsar header hatası, Gemfile.d/pulsar.rb dsilinerek geçildi.

lib/tasks/brand_configs.rake içinde 10.satır else yerine elsif BrandConfig.table_exists? olarak düzeltilmeli. Alınan hata veritabanı ilklenmediğinden BrandConfig.clean_unused_from_db! işlemini yapmaya çalışıyor.

Yardımcı Komutlar

# Canvas rails konsol işlemleri
RAILS_ENV=production bundle exec rails console

# Canvas veritabanı silmek ve yeniden oluşturmak
sudo -u postgres psql
postgres=# drop database canvas_production;
postgres=# \q
sudo -u postgres createdb canvas_production --owner=canvas

# Veritabanı sahiplik güncelleme
psql old_name_db
old_name_db=# REASSIGN OWNED BY old_name TO new_name;

# Veritabanı dışarı düz çıktı alma
pg_dump --data-only --inserts -U postgres canvas_production > production_pq.tmp

# Sorgunun csv çıktısını almak
Copy (Select * From foo) To '/tmp/test.csv' With CSV DELIMITER ',' HEADER;

# lxc snapshot alma-yükleme
sudo lxc-snapshot -n container1  -c "yorum_bilgi"
sudo lxc-snapshot -n container1 -r snap0

# saat dilimi ayarlama
timedatectl set-timezone "Europe/Istanbul" 

Kaynak Linkler

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment