Install on Ubuntu

A virtual machine with 1 GB RAM is sufficient.

These instructions are for Ubuntu 20.04 (we have not tested with other versions or other distributions, but it should work).

Use SSH to connect to your virtual machine.

Update: you may want to go to the last section ("A different set up" below) for a simpler installation method 

Install node.js

wget -qO - https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs libpq-dev build-essential python-is-python3 

Create a user

adduser saltcorn
adduser saltcorn sudo
su saltcorn
cd
mkdir -p ~/.config/
npm config set prefix /home/saltcorn/.local
echo 'export PATH=/home/saltcorn/.local/bin:$PATH' >> /home/saltcorn/.bashrc
source /home/saltcorn/.bashrc

Install saltcorn

npm install -g @saltcorn/cli

if this fails, you may need to tell npm to disregard file permissions during compilation:

npm install -g @saltcorn/cli --unsafe

Setup saltcorn

run

saltcorn setup and follow instructions. It will ask you for a sudo password, enter the one you set when you created the saltcorn user.

now exit to become root user again

exit

nginx install and setup

Install nginx: apt install nginx

Using a text editor such as nano, create a file /etc/nginx/sites-available/domain.com, replacing domain.com with your domain, with these contents:

server {
    listen 80;
    server_name domain.com www.domain.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        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_set_header X-Forwarded-Proto $scheme;
    }
}

link this file to the sites-enabled directory:

sudo ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/domain.com

reload nginx:

sudo service nginx reload

Now run Saltcorn manually as the saltcorn user:

sudo -u saltcorn saltcorn serve

and check that you can connect to your server through your domain. If not, check your DNS setup. If everything works, go back to your SSH terminal and stop the saltcorn server by pressing Ctrl-C.

Install saltcorn as a service

Installing saltcorn as a service will mean it runs in the background and restarts automatically if the system reboots.

create a file /lib/systemd/system/saltcorn.service with these contents:

[Unit]
Description=saltcorn
Documentation=https://saltcorn.com
After=network.target

[Service]
Type=simple
User=saltcorn
WorkingDirectory=/home/saltcorn
ExecStart=/home/saltcorn/.local/bin/saltcorn serve
Restart=always

[Install]
WantedBy=multi-user.target

run:

sudo systemctl daemon-reload
sudo systemctl start saltcorn
sudo systemctl enable saltcorn

SSL certificate (for secure HTTPS traffic)

Install certbot from Lets Encrypt to give you a free SSL certificate to secure traffic with HTTPS.

Follow these instructions for the setup above: Certbox on Ubuntu 20.04 with nginx

Update existing installation of saltcorn

Note that recomended make backup of server before do update.

To update do as root user:

  1. check status of saltcorn service systemctl status saltcorn

  2. stop saltcorn service systemctl stop saltcorn

A different set up

For a somewhat easier set up, you can skip the nginx step and run saltcorn directly against port 80 and use its own ability to obtain SSL certificates with lets encrypt. This is the approach taken by the scripts that create the image for the digitalocean one click installed. Follow these scripts/steps to replicate that set up:

  1. Install these apt packages: https://github.com/saltcorn/saltcorn/blob/v0.4.4/deploy/digitalocean-marketplace/packages.txt
  2. Run this script as root to install node and allow it to open port 80 as a non-root user: https://github.com/saltcorn/saltcorn/blob/v0.4.4/deploy/digitalocean-marketplace/scripts/10-install-node
  3. Run the script as root to set up the database, install saltcorn and enable ufw and unattended upgrades: https://github.com/saltcorn/saltcorn/blob/v0.4.4/deploy/digitalocean-marketplace/scripts/20-setup. You can omit the last steps (after line 12) if you don't need a firewall or unattended upgrades
  4. Copy this file (the systemd unit)  to /lib/systemd/system/saltcorn.service: https://github.com/saltcorn/saltcorn/blob/v0.4.4/deploy/digitalocean-marketplace/files/lib/systemd/system/saltcorn.service
  5. Run this script as root to set up the Saltcorn configuration and enable the daemon: https://github.com/saltcorn/saltcorn/blob/v0.4.4/deploy/digitalocean-marketplace/files/var/lib/cloud/scripts/per-instance/01-set-secret
  6. Saltcorn should now be running!