bitbeet.dev
← back to projects
// 02 · devops

WASM

Distribution-grade deploy CLI for Linux servers.


STACK
Python 3.10+ · Nginx · Apache · systemd · Certbot · MySQL · PostgreSQL · Redis · MongoDB · PyPI · OBS
STATUS
live
LINK
github.com/Perkybeet/wasm ↗

WASM is a proper distribution-grade CLI, not a shell script. It ships on PyPI (pip install wasm-cli) and on the openSUSE Build Service with native packages for Ubuntu 22.04 LTS, 24.04 LTS, Debian 12, Fedora 40 and openSUSE. One install, one command, one server running.

How a deploy flows

WASM distribution and runtime: PyPI and OBS packages install the CLI, which orchestrates Nginx, systemd, Certbot and databases on the target Linux server // DISTRIBUTION PyPI pip install wasm-cli v0.15.8 openSUSE Build Service deb · rpm · native packages ubuntu · debian · fedora · opensuse Source github.com/Perkybeet/wasm $ wasm deploy --app APP CLI runtime // TARGETS ON HOST WEB SERVER Nginx / Apache vhost · gzip · headers asset cache · HTTP/2 PROCESS systemd unit restart=always · journald env · limits SSL Certbot letsencrypt HTTP-01 auto-renew · 60 day DATA (OPTIONAL) MySQL · Postgres Redis · MongoDB provisioned · env-injected
distributed as package (PyPI + OBS) · orchestrates web, process, SSL and databases on the target

The deployers/ registry

Framework detection is pluggable. Each target implements a small interface and registers itself; the CLI picks the right one based on the project contents.

# src/wasm/deployers/registry.py
REGISTRY = {
    'nextjs': NextJsDeployer,
    'nodejs': NodeJsDeployer,
    'vite': ViteDeployer,
    'python': PythonDeployer,
    'static': StaticDeployer,
    'docker-compose': DockerComposeDeployer,
    'monorepo': MonorepoDeployer,
}

What it handles for you

  • Framework build — runs the right build step, handles lockfiles, caches.
  • Web server — generates an Nginx or Apache vhost with sensible defaults (HTTP/2, gzip, security headers, asset caching).
  • SSL — issues and renews certificates via Certbot, webroot method. Handles the HTTP-01 challenge during the switch.
  • Systemd units — creates a service per app with auto-restart, journald logging, environment file, and resource limits.
  • Databases — optional provisioning for MySQL, PostgreSQL, Redis and MongoDB with credentials stored in the service environment.
  • Snapshots — every deploy snapshots the previous release. wasm rollback <app> swaps the symlink and restarts.
  • Web dashboard — an optional UI for status, logs and one-click rollbacks, served over the same Nginx.

CLI ergonomics

$ wasm deploy --app bitbeet.dev --repo git@github.com:Perkybeet/bitbeet.git
 detecting framework static
 cloning + installing ok
 building dist/ (15.2 MB)
 nginx vhost generated
 systemd unit bitbeet.dev.service
 SSL (letsencrypt)          → issued
 health check 200 OK
 live at https://bitbeet.dev

This very site is deployed with WASM — the Nginx vhost serving bitbeet.dev came from the wasm deploy tooling.


7
deployer types
4
distros packaged
v0.15
current release