Web App System Management - Deploy and manage web applications on Linux servers
Project description
WASM - Web App System Management
Overview
WASM is a command-line tool for deploying and managing web applications on Linux servers. It automates the deployment workflow from repository cloning through production serving, handling Nginx/Apache configuration, SSL certificates, systemd services, and application builds.
Core Functionality
- Deploy Next.js, Node.js, Vite, Python, and static applications
- Configure Nginx and Apache virtual hosts
- Manage SSL certificates via Let's Encrypt/Certbot
- Create and control systemd services
- Database management (MySQL, PostgreSQL, Redis, MongoDB)
- Backup and rollback system
- Web-based dashboard (optional)
- Process monitoring and security scanning
Installation
Ubuntu/Debian (Recommended)
# Add GPG key
curl -fsSL https://download.opensuse.org/repositories/home:/Perkybeet/xUbuntu_24.04/Release.key | \
gpg --dearmor | sudo tee /usr/share/keyrings/wasm.gpg > /dev/null
# Add repository
echo 'deb [signed-by=/usr/share/keyrings/wasm.gpg] https://download.opensuse.org/repositories/home:/Perkybeet/xUbuntu_24.04/ /' | \
sudo tee /etc/apt/sources.list.d/wasm.list
# Install
sudo apt update
sudo apt install wasm
Supported versions:
- Ubuntu 22.04 LTS (Jammy Jellyfish)
- Ubuntu 24.04 LTS (Noble Numbat)
- Debian 12 (Bookworm)
Fedora
sudo dnf config-manager --add-repo \
https://download.opensuse.org/repositories/home:/Perkybeet/Fedora_40/home:Perkybeet.repo
sudo dnf install wasm-cli
openSUSE
# Tumbleweed
sudo zypper ar -f \
https://download.opensuse.org/repositories/home:/Perkybeet/openSUSE_Tumbleweed/ \
home_Perkybeet
sudo zypper install wasm-cli
# Leap 15.6
sudo zypper ar -f \
https://download.opensuse.org/repositories/home:/Perkybeet/openSUSE_Leap_15.6/ \
home_Perkybeet
sudo zypper install wasm-cli
PyPI
pip install wasm-cli
From Source
git clone https://github.com/Perkybeet/wasm.git
cd wasm
pip install -e .
Quick Start
Deploy a Next.js Application
wasm create \
--domain myapp.example.com \
--source git@github.com:user/my-nextjs-app.git \
--type nextjs \
--port 3000
Short syntax:
wasm create -d myapp.example.com -s git@github.com:user/app.git -t nextjs -p 3000
Interactive Mode
Run wasm without arguments to enter interactive mode:
wasm
The interactive wizard will guide you through:
- Application type selection
- Domain configuration
- Source repository
- Port assignment
- SSL certificate setup
Usage
Application Management
# Deploy application
wasm create -d example.com -s git@github.com:user/repo.git -t nextjs
# List deployed applications
wasm list
# View application status
wasm status example.com
# Restart application
wasm restart example.com
# Update application (git pull + rebuild)
wasm update example.com
# Remove application
wasm delete example.com
# View application logs
wasm logs example.com --follow
Site Configuration
# Create Nginx/Apache site
wasm site create -d example.com -w nginx
# List all sites
wasm site list
# Enable or disable site
wasm site enable example.com
wasm site disable example.com
# Delete site
wasm site delete example.com
SSL Certificates
# Obtain Let's Encrypt certificate
wasm cert create -d example.com
# List certificates
wasm cert list
# Renew certificates
wasm cert renew
# View certificate details
wasm cert info example.com
Service Management
# Create systemd service
wasm service create --name myservice --command "/usr/bin/myapp" --user www-data
# Control services
wasm service start myservice
wasm service stop myservice
wasm service restart myservice
# View service status and logs
wasm service status myservice
wasm service logs myservice --follow
# Delete service
wasm service delete myservice
Database Management
# Install database engine
wasm db install mysql
# Create database
wasm db create mydb --engine mysql
# List databases
wasm db list --engine mysql
# Backup database
wasm db backup mydb --engine mysql --output backup.sql.gz
# Restore database
wasm db restore mydb backup.sql.gz --engine mysql
Backup and Rollback
# Create backup
wasm backup create example.com -m "Pre-deployment backup"
# List backups
wasm backup list example.com
# Restore from backup
wasm backup restore BACKUP_ID
# Quick rollback to last backup
wasm rollback example.com
Supported Application Types
| Type | Framework | Auto-Detection |
|---|---|---|
nextjs |
Next.js | next.config.js, next.config.mjs |
nodejs |
Express, Fastify, Koa | package.json with start script |
vite |
React, Vue, Svelte (Vite) | vite.config.js, vite.config.ts |
python |
Django, Flask, FastAPI | requirements.txt, pyproject.toml |
static |
HTML/CSS/JS | index.html |
Deployment Workflow
For each application type, WASM executes:
- Clone repository to
/var/www/apps/wasm-<app-name>/ - Install dependencies (npm, pip, etc.)
- Build application (if applicable)
- Create systemd service
- Configure Nginx/Apache reverse proxy
- Obtain SSL certificate (optional)
- Start service and verify status
Configuration
Global Configuration
Configuration file: /etc/wasm/config.yaml
# Web server preference
webserver: nginx
# Application directory
apps_directory: /var/www/apps
# Service user
service_user: www-data
# SSL configuration
ssl:
enabled: true
provider: certbot
email: admin@example.com
# Logging
logging:
level: info
file: /var/log/wasm/wasm.log
# Node.js settings
nodejs:
default_version: 20
use_nvm: false
# Python settings
python:
default_version: "3.11"
use_venv: true
Per-Application Configuration
Create .wasm.yaml in your project root:
type: nextjs
port: 3000
build_command: npm run build
start_command: npm run start
env_vars:
NODE_ENV: production
health_check:
path: /api/health
timeout: 30
Command Reference
Application Commands
wasm create [options] Deploy new application
wasm list List deployed applications
wasm status <domain> Show application status
wasm restart <domain> Restart application
wasm stop <domain> Stop application
wasm start <domain> Start application
wasm update <domain> Update application (git pull + rebuild)
wasm delete <domain> Remove application
wasm logs <domain> [options] View application logs
Site Commands
wasm site create <domain> Create site configuration
wasm site list List all sites
wasm site enable <domain> Enable site
wasm site disable <domain> Disable site
wasm site delete <domain> Delete site
wasm site show <domain> Display site configuration
Service Commands
wasm service create [options] Create systemd service
wasm service list List managed services
wasm service status <name> Show service status
wasm service start <name> Start service
wasm service stop <name> Stop service
wasm service restart <name> Restart service
wasm service logs <name> View service logs
wasm service delete <name> Delete service
Certificate Commands
wasm cert create <domain> Obtain SSL certificate
wasm cert list List certificates
wasm cert info <domain> Show certificate details
wasm cert renew [domain] Renew certificates
wasm cert revoke <domain> Revoke certificate
Database Commands
wasm db install <engine> Install database engine
wasm db create <name> Create database
wasm db drop <name> Drop database
wasm db list List databases
wasm db backup <name> Backup database
wasm db restore <name> <file> Restore database
wasm db user-create <username> Create database user
wasm db grant <user> <db> Grant privileges
Backup Commands
wasm backup create <domain> Create backup
wasm backup list [domain] List backups
wasm backup restore <id> Restore from backup
wasm backup delete <id> Delete backup
wasm backup verify <id> Verify backup integrity
wasm rollback <domain> [id] Quick rollback
Web Dashboard
WASM includes an optional web-based dashboard for remote management.
Installation
pip install wasm-cli[web]
Start Dashboard
wasm web start --host 0.0.0.0 --port 8080
Features
- Application deployment and management
- Real-time logs and monitoring
- SSL certificate management
- Service control
- Backup creation and restoration
- Database management
- REST API with token authentication
Access the dashboard at http://your-server:8080
System Requirements
- Operating System: Ubuntu 20.04+, Debian 11+, Fedora 38+, openSUSE Leap 15.5+
- Python: 3.10 or higher
- Privileges: sudo access for service management
Optional Dependencies
- nginx or apache2 (web server)
- certbot (SSL certificates)
- git (repository cloning)
- nodejs/npm (for Node.js applications)
- python3-venv (for Python applications)
- mysql-server or postgresql (database support)
WASM will check for missing dependencies and prompt installation when needed.
Directory Structure
/var/www/apps/
├── wasm-example-com/
│ ├── current/ # Active deployment
│ ├── releases/ # Previous releases (for rollback)
│ │ ├── 20260114120000/
│ │ └── 20260113150000/
│ ├── shared/ # Persistent files (uploads, logs)
│ └── .env # Environment variables
│
└── wasm-another-app/
└── ...
Development
# Clone repository
git clone https://github.com/Perkybeet/wasm.git
cd wasm
# Create virtual environment
python -m venv venv
source venv/bin/activate
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linters
black src/
isort src/
ruff check src/
License
This project is licensed under the WASM Non-Commercial Source-Available License (WASM-NCSAL) Version 1.0.
Free Usage
You may use WASM free of charge for:
- Personal projects
- Educational purposes
- Research and development
- Non-commercial use
Commercial Usage
Commercial use requires a license. This includes:
- Use within commercial organizations
- Providing paid services using WASM
- Reducing operational costs in business environments
- Any revenue-generating use case
Obtain Commercial License
For commercial licensing inquiries:
- Email: yago.lopez.adeje@gmail.com, hello@bitbeet.dev
- Phone: +34 637 881 066
- Web: bitbeet.dev
Acknowledgments
- Certbot - SSL certificate automation
- python-inquirer - Interactive CLI
- The open-source community
Support
- Documentation: GitHub Wiki
- Issues: GitHub Issues
- Email: yago.lopez.adeje@gmail.com
Developed by Bitbeet
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wasm_cli-0.15.0.tar.gz.
File metadata
- Download URL: wasm_cli-0.15.0.tar.gz
- Upload date:
- Size: 4.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f78821b3a421de1a20830a370e9121249ded4e4b97e357d3d0152bf39efc378
|
|
| MD5 |
ce8ccff846073a8fa757ce4b2a91cbea
|
|
| BLAKE2b-256 |
a95645d77f9448045d98bd7fec56273f5c5f3fd757e464d1b8a1bab947b16add
|
Provenance
The following attestation bundles were made for wasm_cli-0.15.0.tar.gz:
Publisher:
release.yml on Perkybeet/wasm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wasm_cli-0.15.0.tar.gz -
Subject digest:
9f78821b3a421de1a20830a370e9121249ded4e4b97e357d3d0152bf39efc378 - Sigstore transparency entry: 1066624700
- Sigstore integration time:
-
Permalink:
Perkybeet/wasm@a06e23f9a5c81f47c8531180af5fd6e66b2b6683 -
Branch / Tag:
refs/tags/v0.15.0 - Owner: https://github.com/Perkybeet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a06e23f9a5c81f47c8531180af5fd6e66b2b6683 -
Trigger Event:
push
-
Statement type:
File details
Details for the file wasm_cli-0.15.0-py3-none-any.whl.
File metadata
- Download URL: wasm_cli-0.15.0-py3-none-any.whl
- Upload date:
- Size: 1.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
625622f5f2e537bdb13775881782f61d156be47e8bdcdd15b2b795acb4ad5a85
|
|
| MD5 |
6b87655652bdc3c665849fb733d21cb9
|
|
| BLAKE2b-256 |
d6ff6e513b49e795ccc76fae3ff05bc9819a40a2e8851be4635a7b794dae594c
|
Provenance
The following attestation bundles were made for wasm_cli-0.15.0-py3-none-any.whl:
Publisher:
release.yml on Perkybeet/wasm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wasm_cli-0.15.0-py3-none-any.whl -
Subject digest:
625622f5f2e537bdb13775881782f61d156be47e8bdcdd15b2b795acb4ad5a85 - Sigstore transparency entry: 1066624702
- Sigstore integration time:
-
Permalink:
Perkybeet/wasm@a06e23f9a5c81f47c8531180af5fd6e66b2b6683 -
Branch / Tag:
refs/tags/v0.15.0 - Owner: https://github.com/Perkybeet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a06e23f9a5c81f47c8531180af5fd6e66b2b6683 -
Trigger Event:
push
-
Statement type: