Installation
Deploy Vendel on your own server for production use.
Don't want to self-host? Try Vendel Cloud — free plan available, paid plans from $0.99/month.
Requirements
- Linux server (Ubuntu 22.04+ recommended)
- At least 512MB RAM, 5GB disk
- Domain name with SSL certificate
Option 1: Docker Compose (Recommended)
Requires Docker and Docker Compose v2.
1. Create docker-compose.yml
Create a new directory and add a docker-compose.yml file:
services:
app:
image: ghcr.io/jimscope/vendel:latest
environment:
- ENVIRONMENT=production
- FIRST_SUPERUSER=${FIRST_SUPERUSER}
- FIRST_SUPERUSER_PASSWORD=${FIRST_SUPERUSER_PASSWORD}
- APP_URL=https://${DOMAIN}
- FRONTEND_URL=https://${DOMAIN}
- WEBHOOK_ENCRYPTION_KEY=${WEBHOOK_ENCRYPTION_KEY:-}
- FIREBASE_SERVICE_ACCOUNT_JSON=${FIREBASE_SERVICE_ACCOUNT_JSON:-}
- SMTP_HOST=${SMTP_HOST:-}
- SMTP_PORT=${SMTP_PORT:-}
- SMTP_USERNAME=${SMTP_USERNAME:-}
- SMTP_PASSWORD=${SMTP_PASSWORD:-}
ports:
- "8090:8090"
volumes:
- vendel_data:/app/pb_data
volumes:
vendel_data: 2. Configure environment
Create a .env file in the same directory:
# Required
FIRST_SUPERUSER=[email protected]
FIRST_SUPERUSER_PASSWORD=your-secure-password
DOMAIN=sms.yourdomain.com
WEBHOOK_ENCRYPTION_KEY=your-random-32-character-string
# Firebase (required for push notifications to Android devices)
FIREBASE_SERVICE_ACCOUNT_JSON={"type":"service_account",...}
# SMTP (optional, for email features)
SMTP_HOST=smtp.yourdomain.com
SMTP_PORT=587
SMTP_USERNAME=[email protected]
SMTP_PASSWORD=your-smtp-password 3. Start the service
docker compose up -d 4. Access the dashboard
Open the dashboard at https://sms.yourdomain.com (or http://localhost:8090 if testing locally). Log in with the superuser credentials from your .env file. The PocketBase admin panel is available at /_/.
5. Update to a new version
docker compose pull
docker compose up -d Option 2: Standalone Binary
No Docker needed. Download a single self-contained binary with the frontend already embedded.
1. Download
Go to GitHub Releases and download the archive for your platform:
Linux x86_64
amd64 · .tar.gz
Linux ARM64
Raspberry Pi 4+, Oracle Cloud · .tar.gz
Linux ARM
armv7 · .tar.gz
macOS Intel
amd64 · .tar.gz
macOS Apple Silicon
arm64 · .tar.gz
Windows x86_64
amd64 · .zip
2. Extract
tar xzf vendel_linux_amd64.tar.gz
ls
# vendel <- server binary (frontend embedded) 3. Configure environment
Create a .env file in the same directory as the binary:
ENVIRONMENT=production
FIRST_SUPERUSER=[email protected]
FIRST_SUPERUSER_PASSWORD=your-secure-password
WEBHOOK_ENCRYPTION_KEY=your-random-32-character-string
APP_URL=https://yourdomain.com
FRONTEND_URL=https://yourdomain.com Or export them directly:
export WEBHOOK_ENCRYPTION_KEY="your-random-32-character-string"
export FIRST_SUPERUSER="[email protected]"
export FIRST_SUPERUSER_PASSWORD="your-secure-password"
export APP_URL="https://yourdomain.com"
export FRONTEND_URL="https://yourdomain.com" 4. Start the server
./vendel serve --http=0.0.0.0:8090 PocketBase creates a pb_data/ directory for the SQLite database on first run. The dashboard is available at http://localhost:8090.
5. Run as a systemd service
For production, run Vendel as a systemd service so it starts on boot and restarts on failure:
[Unit]
Description=Vendel SMS Gateway
After=network.target
[Service]
Type=simple
User=vendel
WorkingDirectory=/opt/vendel
ExecStart=/opt/vendel/vendel serve --http=0.0.0.0:8090
EnvironmentFile=/opt/vendel/.env
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target sudo systemctl enable --now vendel 6. Update to a new version
Download the new release, replace the binary, then restart:
tar xzf vendel_linux_amd64.tar.gz
sudo systemctl restart vendel Reverse Proxy Setup
Vendel runs on port 8090. Place a reverse proxy in front for HTTPS. See Nginx Reverse Proxy for a full guide, or use Caddy for automatic SSL:
yourdomain.com {
reverse_proxy localhost:8090
} Environment Variables
| Variable | Description | Default |
|---|---|---|
ENVIRONMENT | Runtime environment (local or production) | local |
FIRST_SUPERUSER | Superuser email address | [email protected] |
FIRST_SUPERUSER_PASSWORD | Superuser password | changethis |
WEBHOOK_ENCRYPTION_KEY | AES key for webhook secret encryption (random 32+ char string) | - |
APP_URL | Public URL of the application | http://localhost:8090 |
FRONTEND_URL | Public URL for frontend redirects | http://localhost:5173 |
FIREBASE_SERVICE_ACCOUNT_JSON | Firebase service account JSON for FCM push notifications | - |
SMTP_HOST / SMTP_PORT | SMTP server for sending emails | localhost:1025 |
SMTP_USERNAME / SMTP_PASSWORD | SMTP credentials | - |
Backup with Litestream
Vendel uses SQLite as its embedded database. For continuous backup to S3-compatible storage, set these optional environment variables:
LITESTREAM_REPLICA_URL=s3://my-bucket/vendel/data
LITESTREAM_ACCESS_KEY_ID=your-access-key
LITESTREAM_SECRET_ACCESS_KEY=your-secret-key When set, Litestream automatically streams WAL changes to your S3 bucket and restores on startup if needed.
Next steps
- Android App - Set up your first device
- USB Modems - Connect USB GSM modems (Docker or standalone)
- Nginx Guide - Configure SSL with Nginx
- Docker Guide - Advanced Docker configuration