Skip to content

Releases: justhasanuknow/servitor-cms

Servitor CMS 0.2.0

Choose a tag to compare

@justhasanuknow justhasanuknow released this 24 Sep 21:46
5dc7d39

Backups and restores are now part of the panel.

Added

  • Backups in the panel under Administration → Backups, for the founder with two-factor authentication: create backups in the background, download them, optionally encrypted with a passphrase, upload archives of any size in chunks, delete them, and restore one through a controlled restart that applies it before the database is opened.
  • Scheduled backups every day or every Monday at a UTC hour. Servitor keeps a chosen number of scheduled archives and emails the founder when one fails.
  • decrypt-backup on the command line for archives downloaded with a passphrase.
  • A guide to backups and restores, also served at /docs/backups.

Changed

  • Backups leave out sessions and verification tokens, so restoring one signs everybody out; restores also remove sessions from older archives.
  • Restores compare the database with the schema of its migration history and refuse archives from newer versions or with extra tables, triggers or views.
  • The backup manifest records the app version and whether the panel, the schedule or the command line made it.
  • The systemd example restarts the app always, which a restore from the panel needs.

Downloading, restoring and deleting backups and changing the schedule require the password and a current authenticator code, every backup action is written to the audit log, and a download sends the founder an email notice.

Upgrading from 0.1.x

Take a backup, then check out the new tag:

docker compose exec servitor node build/cli.js backup
git fetch --tags
git checkout v0.2.0

Set SERVITOR_VERSION=0.2 in your .env (add the line if you came from 0.1.0), then pull and start the image:

docker compose pull
docker compose up -d

A migration adds the backup_schedule table; it runs on start. If you run Servitor without Docker, set your service manager to always restart it, for example Restart=always in systemd.

The image for linux/amd64 and linux/arm64 is ghcr.io/justhasanuknow/servitor-cms:0.2.0 (also 0.2 and latest). Verify it with the GitHub CLI:

gh attestation verify oci://ghcr.io/justhasanuknow/servitor-cms:0.2.0 --owner justhasanuknow

The full list is in CHANGELOG.md.

Servitor CMS 0.1.1

Choose a tag to compare

@justhasanuknow justhasanuknow released this 24 Sep 19:45
9cd4567

Servitor CMS now ships as a prebuilt image, so installations pull it instead of building on the server.

Added

  • Every release is published as a prebuilt image for linux/amd64 and linux/arm64 at ghcr.io/justhasanuknow/servitor-cms, tagged with the version, the minor line and latest, and with a signed build provenance attestation.

Changed

  • docker-compose.yml runs the prebuilt image in the version set by the new SERVITOR_VERSION variable. docker compose up -d --build still builds from the source.
  • The installation and update guides describe the prebuilt image and pinning a version.
  • The project website is servitor.rua.systems.

Fixed

  • An end-to-end test of the public pages could fail when it ran at the same time as the headless mode test.

Updating from 0.1.0

Take a backup, then check out the new tag, add SERVITOR_VERSION to your .env and start the image:

docker compose exec servitor node build/cli.js backup
git fetch --tags
git checkout v0.1.1
echo "SERVITOR_VERSION=0.1" >> .env
docker compose pull
docker compose up -d

0.1 follows the newest 0.1.x release; use 0.1.1 to pin exactly this one. There are no database or configuration changes besides SERVITOR_VERSION.

Verify the image with the GitHub CLI:

gh attestation verify oci://ghcr.io/justhasanuknow/servitor-cms:0.1.1 --owner justhasanuknow

The full list is in CHANGELOG.md, and the update guide has the details.

Servitor CMS 0.1.0

Choose a tag to compare

@justhasanuknow justhasanuknow released this 24 Sep 18:31
da630c7

The first public release of Servitor CMS: a self-hostable, multilingual CMS for blog posts and articles that runs as a single container with SQLite.

Highlights

  • Writing: a block editor with tables, highlighted code, math, images and video embeds; automatic saving, revision history and previews; a media library that re-encodes uploads to WebP and strips metadata.
  • Many languages: one translation per content language for every post, any number of content languages, and a panel in English, Turkish, French, German, Japanese and Simplified Chinese.
  • Editorial workflow: founder, admin and author roles, direct publishing for trusted authors, a review queue, scheduling, moderation and an append-only audit log.
  • Delivery: server-rendered public pages without JavaScript, with SEO metadata, RSS and sitemaps, or headless mode; a read-only REST API with scoped keys and an OpenAPI description; signed webhooks with retries.
  • Security and operations: reviewed against OWASP ASVS 5.0 levels 1 and 2; automatic migrations, a health check, backup and restore commands and a software bill of materials in the image.

Install

git clone https://github.com/justhasanuknow/servitor-cms.git
cd servitor-cms
git checkout v0.1.0
cp .env.example .env

Fill in .env, then run docker compose up -d --build to build the image from this release.

The prebuilt image for amd64 and arm64 is also available as ghcr.io/justhasanuknow/servitor-cms:0.1.0 (and 0.1), with a signed build provenance attestation:

docker pull ghcr.io/justhasanuknow/servitor-cms:0.1.0
gh attestation verify oci://ghcr.io/justhasanuknow/servitor-cms:0.1.0 --owner justhasanuknow

The docker-compose.yml of this release still builds locally; from the next release on, it pulls the prebuilt image by default. The installation guide and the deployment guide cover a production setup behind a TLS proxy. Every installation also serves the documentation at /docs.

Notes

  • Servitor runs as a single instance per data directory.
  • Before 1.0.0, a minor version may change configuration, the API or the data in incompatible ways; the notes of each release say so.
  • Report vulnerabilities privately as described in SECURITY.md.

The full list is in CHANGELOG.md.