Debian Bullseye LXC
apt install wget git lxc file
# file komutu Canvas koşuğunda gereklidir.
# 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
# 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.
# 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.
# 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 = '*'
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
#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
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
curl -sL https://deb.nodesource.com/setup_14.x | bash -
sudo apt install nodejs
cd /var/canvas
export bundler_version="2.2.19"
gem install bundler --version ${bundler_version}
bundle _${bundler_version}_ install --without pulsar --path vendor/bundle
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
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
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
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
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
# 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
# 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.
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
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
# /var/canvas/Passengerfile.json
{
"environment":"production",
"daemonize":"yes",
}
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;
}
}
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;
...
# 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
#! /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
- 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.
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.
# 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"