This guide helps you install Canvas LMS on an Ubuntu 22.04 LTS server using Apache and SSL. Only proceed if you have sudo
access.
sudo adduser canvas
sudo usermod -aG sudo canvas
su - canvas
sudo apt-get install wget ca-certificates -y
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo tee /etc/apt/trusted.gpg.d/postgresql.asc
echo "deb http://apt.postgresql.org/pub/repos/apt/ \
$(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt-get update
sudo apt-get install postgresql-17
sudo -u postgres createuser canvas --no-createdb --no-superuser --no-createrole --pwprompt
sudo -u postgres createdb canvas_production --owner=canvas
sudo -u postgres createdb canvas_development --owner=canvas
sudo -u postgres createuser $USER
sudo -u postgres psql -c "alter user $USER with superuser" postgres
Set password for canvas user:
ALTER USER canvas WITH PASSWORD 'your_secure_password';
sudo apt-get install git-core software-properties-common
sudo add-apt-repository ppa:instructure/ruby
sudo apt-get update
sudo apt-get install ruby3.3 ruby3.3-dev zlib1g-dev libxml2-dev \
libsqlite3-dev postgresql libpq-dev libxmlsec1-dev libidn11-dev \
curl make g++
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.bashrc
nvm install 20.9.0
curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.19.1
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
cd /var
sudo git clone https://github.com/instructure/canvas-lms.git canvas
sudo chown -R $(whoami):$(whoami) /var/canvas
cd canvas
git checkout prod
for config in amazon_s3 database delayed_jobs vault_contents domain file_store outgoing_mail security external_migration; \
do cp config/$config.yml.example config/$config.yml; done
config/database.yml
and set the DB password.config/outgoing_mail.yml
with SMTP settings.config/domain.yml
with your domain.config/security.yml
and insert a 20+ character key.sudo apt-get install libyaml-dev cmdtest
sudo gem install bundler --version 2.5.10
bundle config set --local path vendor/bundle
bundle install
sudo gem update strscan
sudo gem uninstall stringio && sudo gem install stringio -v 3.1.1
sudo gem uninstall base64 && sudo gem install base64 -v 0.2.0
yarn install
yarn gulp rev
RAILS_ENV=production bundle exec rake db:initial_setup
RAILS_ENV=production bundle exec rake db:migrate
mkdir -p log tmp/pids public/assets app/stylesheets/brandable_css_brands
touch app/stylesheets/_brandable_variables_defaults_autogenerated.scss Gemfile.lock log/production.log
RAILS_ENV=production bundle exec rake canvas:compile_assets
sudo apt-get install apache2 libapache2-mod-passenger
sudo a2enmod rewrite passenger ssl
sudo vi /etc/apache2/mods-available/passenger.conf
Add:
PassengerDefaultUser canvas
PassengerStartTimeout 180
PassengerPreloadBundler On
PassengerFriendlyErrorPages On
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
<VirtualHost *:80>
ServerName your_domain
DocumentRoot /var/canvas/public
PassengerRuby /usr/bin/ruby
PassengerAppEnv production
RailsEnv production
<Directory /var/canvas/public>
AllowOverride all
Options -MultiViews
Require all granted
</Directory>
</VirtualHost>
Run:
sudo a2ensite canvas.conf
sudo certbot --apache
sudo apt install redis-server
sudo systemctl enable redis-server
sudo cp config/cache_store.yml.example config/cache_store.yml
sudo vi config/cache_store.yml
git clone https://github.com/instructure/canvas-rce-api.git
cd canvas-rce-api
npm install --production
npm audit fix
cp .env.example .env
vi .env
sudo ln -s /var/canvas/script/canvas_init /etc/init.d/canvas_init
sudo update-rc.d canvas_init defaults
sudo /etc/init.d/canvas_init start
sudo ufw allow ssh http https 5432 6379 3000 3001 8000/tcp
sudo ufw enable
sudo ufw reload
Canvas LMS should now be available on your domain with SSL enabled!