dbbasic-deploy
Simple SSH deployment tool for dbbasic-web apps to Ubuntu servers.
No Docker, no Ansible, no complexity. Just Python, SSH, nginx, and systemd.
Features
- ✅ Deploys to Ubuntu 22.04/24.04 LTS
- ✅ Automatic nginx reverse proxy setup
- ✅ Let's Encrypt SSL certificates
- ✅ systemd service management
- ✅ Python 3.12 virtual environments
- ✅ Zero-downtime deployments via systemd restart
Requirements
Local machine:
- Python 3.10+
- SSH access to your server
Remote server:
- Ubuntu 22.04 or 24.04 LTS
- Root access (or sudo user)
- Domain pointing to server IP
Installation
macOS
# Install Python 3 (if not already installed)
brew install python3
# Install dbbasic-deploy
pip3 install dbbasic-deploy
Windows 11
# Install Python from python.org or use winget
winget install Python.Python.3.12
# Install dbbasic-deploy
pip install dbbasic-deploy
Note: On Windows, you'll also need an SSH client. Windows 11 includes OpenSSH by default, but you may need to enable it:
# Enable OpenSSH (run as Administrator)
Add-WindowsCapability -Online -Name OpenSSH.Client
Ubuntu/Debian
# Install Python and pip
sudo apt update
sudo apt install python3 python3-pip
# Install dbbasic-deploy
pip3 install dbbasic-deploy
Install from source
git clone https://github.com/askrobots/dbbasic-deploy
cd dbbasic-deploy
pip install -e .
Quick Start
1. Set up a fresh server
dbbasic-deploy setup \
--host myserver.com \
--domain demo.dbbasic.com
This will:
- Install Python 3.12, nginx, certbot
- Create systemd service
- Configure nginx reverse proxy
- Set up firewall (ufw)
2. Deploy your app
cd your-dbbasic-web-app
dbbasic-deploy push \
--host myserver.com \
--domain demo.dbbasic.com
This will:
- Upload your code
- Install dependencies from requirements.txt
- Restart the service
- Verify it's running
3. Enable HTTPS
dbbasic-deploy ssl \
--host myserver.com \
--domain demo.dbbasic.com \
--email you@example.com
This will:
- Get Let's Encrypt certificate
- Configure nginx for SSL
- Set up auto-renewal
Done! Your app is live at https://demo.dbbasic.com
Usage
Setup a new server
dbbasic-deploy setup --host SERVER --domain DOMAIN [OPTIONS]
Options:
--host TEXT Server hostname or IP (required)
--domain TEXT Domain name for the app (required)
--app-name TEXT Application name (default: app)
--port INTEGER Port for uvicorn (default: 3000)
--user TEXT SSH user (default: root)
--key TEXT Path to SSH private key
Deploy/update your app
dbbasic-deploy push --host SERVER --domain DOMAIN [OPTIONS]
Options:
--host TEXT Server hostname or IP (required)
--domain TEXT Domain name for the app (required)
--app-name TEXT Application name (default: app)
--port INTEGER Port for uvicorn (default: 3000)
--user TEXT SSH user (default: root)
--key TEXT Path to SSH private key
--path TEXT Local path to deploy (default: .)
Set up SSL
dbbasic-deploy ssl --host SERVER --domain DOMAIN [OPTIONS]
Options:
--host TEXT Server hostname or IP (required)
--domain TEXT Domain name for SSL certificate (required)
--email TEXT Email for Let's Encrypt notifications
--user TEXT SSH user (default: root)
--key TEXT Path to SSH private key
Multiple Apps on One Server
You can host multiple apps by using different --app-name and --port values:
# App 1
dbbasic-deploy setup --host myserver.com --domain app1.com --app-name app1 --port 3001
dbbasic-deploy push --host myserver.com --domain app1.com --app-name app1 --port 3001
# App 2
dbbasic-deploy setup --host myserver.com --domain app2.com --app-name app2 --port 3002
dbbasic-deploy push --host myserver.com --domain app2.com --app-name app2 --port 3002
File Structure on Server
/var/www/app/ # App directory
├── venv/ # Python virtual environment
├── requirements.txt # Dependencies
├── api.py # Your app code
└── data/ # Persistent data
/etc/systemd/system/app.service # systemd service
/etc/nginx/sites-available/app # nginx config
Debugging
Check service status:
ssh user@server 'systemctl status app'
View logs:
ssh user@server 'journalctl -u app -f'
Check nginx:
ssh user@server 'nginx -t'
ssh user@server 'systemctl status nginx'
How It Works
- Setup creates a systemd service that runs uvicorn
- Push uploads code via SFTP and restarts the service
- SSL runs certbot to get Let's Encrypt certificate
- nginx acts as reverse proxy (handles SSL, proxies to uvicorn on port 3000)
Comparison
| Feature | dbbasic-deploy | Docker/Coolify | Ansible | Capistrano |
|---|---|---|---|---|
| Complexity | Low | Medium | High | Medium |
| Setup time | 2 min | 10 min | 30 min | 15 min |
| Multi-distro | No (Ubuntu) | Yes | Yes | Yes |
| Learning curve | Minimal | Medium | Steep | Medium |
| Dependencies | Python | Docker | Many | Ruby |
Limitations
- Ubuntu only - Tested on 22.04 and 24.04 LTS
- Single server - Not for clusters or load balancing
- Simple deploys - No blue-green, canary, or complex strategies
- SSH access required - Need root or sudo access
For production apps with complex requirements, consider Docker/Kubernetes or proper configuration management tools.
Contributing
Issues and PRs welcome at https://github.com/askrobots/dbbasic-deploy
License
MIT
Metadata
Release files for dbbasic-deploy 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dbbasic_deploy-0.1.0.tar.gz | 7.2 kB | Without provenance | Details for dbbasic_deploy-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dbbasic_deploy-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for dbbasic_deploy-0.1.0-py3-none-any.whl |
Total release size: 15.7 kB
Release files / dbbasic_deploy-0.1.0.tar.gz
| Download URL | dbbasic_deploy-0.1.0.tar.gz |
|---|---|
| Size | 7.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cebe70cd41c85ca193cf34d5697680e64fdad6058f6e6492d11d5fb45fd611fa
|
|
BLAKE2b-256 checksum How to use checksums |
dd2b85aed74a17515b56e58c3a732a4e9fac6407a48902e286832f3f503e6575
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.1
|
Release files / dbbasic_deploy-0.1.0-py3-none-any.whl
| Download URL | dbbasic_deploy-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
97cf9c61fb97a6e717cefc7b6558ff66235fde97732ea6cb241e921e4dbd96e8
|
|
BLAKE2b-256 checksum How to use checksums |
161a5d40650f789b2830fea7b623838c142bfb0aa6eed4531cd4d635b65ca47c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.1
|
Security for dbbasic-deploy 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.