Documentation

Installing on your own server.

One script sets up PostgreSQL, the Python environment, the application service, the virtual host and the TLS certificate. Fifteen steps, all idempotent: if one fails, you fix the cause and run the same command again.

Requirements

Nothing exotic — but nothing optional either.

  1. Debian 12, with a user who has sudo
  2. Ports 22, 80 and 443 open
  3. A domain already pointing at the machine if you enable TLS. Check it before you start: dig +short yourdomain.com must return the server's address, otherwise the certificate request will fail and you will have to start over.
  4. Two gigabytes of memory for one site, more if you host several on the same machine.

Installing a site

The script asks its questions — site name, domain, database, admin account, certificate — shows a summary, then runs through the steps. Several sites live side by side without getting in each other's way: each gets its own Unix account, database and service.

sudo apt-get update -y && sudo apt-get install -y curl unzip

sudo mkdir -p /var/www && cd /var/www
sudo curl -fL -o jeiko-installer.zip \
https://raw.githubusercontent.com/gderouineau/jeiko_installer/main/jeiko-installer-latest.zip
sudo unzip -o jeiko-installer.zip -d jeiko-installer

cd jeiko-installer && sudo chmod +x install.sh && sudo ./install.sh

Refreshing the tooling before adding a site

The update commands read their templates from /usr/local/share/jeiko, not from the installer folder. After releasing a version, refresh them — otherwise a new site would start out with the old templates.

cd /var/www/jeiko-installer
sudo ./migrate_site.sh --tools-only

# drops in the new templates and scripts,
# without touching the sites already installed

Updating

From the admin panel — Settings ▸ Update JEIKO — the page shows the log live and survives the service restart. It also announces the available version when there is one.

sudo jeiko-client-update mysite --check # compares, installs nothing
sudo jeiko-client-update mysite # installs

# The package is verified by its checksum, the database
# backed up, migrations applied, the service
# restarted. If any step fails,
# the previous version is restored.

Removing a site

Removal reads the site's record to find its real paths: it removes the service, scheduled tasks, database, Unix account, virtual host, logs and backups. Nothing shared is touched — not PostgreSQL, not nginx, not the tooling, not the SSH configuration.

sudo ./uninstall.sh mysite --dry-run # shows, deletes nothing
sudo ./uninstall.sh mysite # asks you to retype the name
sudo ./uninstall.sh mysite --keep-db # keeps the database and its role

# The TLS certificate and the DNS record remain:
# remove them by hand if you no longer need them.

Backups

A daily backup of the database and files is set up at install time. Migration backups are kept separately and survive an interrupted update.

ls /var/backups/jeiko/mysite/

# Restoring after a migration:
sudo jeiko-restore mysite \
/var/backups/jeiko/mysite/migration_<timestamp>

If something fails

The full log is written to logs/ and names the step at fault. Attach it to your message: that is what makes a useful answer possible the first time round.

Contact us