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:

docker-compose.yml
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:

.env
# 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:

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:

.env
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:

/etc/systemd/system/vendel.service
[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:

Caddyfile
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