Skip to content

Getting Started 🚀

Private Server 🔒

To enhance privacy and control, you can host your own private server. This keeps all message data within your infrastructure while maintaining push notification capabilities through our public server at api.sms-gate.app. This setup eliminates the need to configure Firebase Cloud Messaging (FCM) or rebuild the Android app, but it does demand some technical know-how.

flowchart
    %% === MAIN BLOCKS ===
    Users["👥 Users"]
    Android["🤖 SMSGate App"]

    subgraph PrivateServer["Private Server"]
        GoServerPrivate["🐹 Server"]
        GoWorkerPrivate["🐹 Worker"]
        DB["🦭 DB"]

        GoServerPrivate <--> DB
        GoWorkerPrivate --> DB
    end

    subgraph Google["Google"]
        FCM["🔥 FCM"]
    end

    subgraph PublicServer["Public Server"]
        GoServerPublic["🐹 api.sms-gate.app"]
    end

    %% === CONNECTIONS ===

    Users -->|REST API| GoServerPrivate
    GoServerPrivate -->|notification| GoServerPublic
    GoServerPublic -->|notification| FCM
    FCM -->|PUSH| Android
    Android <--> GoServerPrivate

    %% === ALTERNATIVE NOTIFICATION PATH ===
    Android -.->|SSE| GoServerPrivate

    %% === STYLING ===
    classDef altConn stroke-dasharray: 5 5,stroke:#888,fill:none;
    class Android,GoServerPrivate,GoWorkerPrivate,DB altConn;

When to Choose Private Mode

  • 🏢 Enterprise deployments requiring full data control
  • 🔐 Enhanced security compliance needs
  • 📈 Messaging rate exceeds Public Server limit
  • 🌐 Custom integration requirements

Prerequisites ✅

The easiest way to run the server is to use Docker. For alternative installation methods, see Private Server Documentation.

To run the server, you'll need:

  • 🐧 Linux VPS
  • 🐳 Docker installed
  • 🗄️ MySQL/MariaDB server with empty database and privileged user
  • 🔄 Reverse proxy with valid SSL certificate (project CA supported)

Run the Server 🖥️

  1. Create configuration
    Copy the example config and customize:

    Get config.yml template
    wget https://raw.githubusercontent.com/android-sms-gateway/server/master/configs/config.example.yml -O config.yml
    
    Key sections to edit:
    Private Server Configuration Example
    gateway:
        mode: private
        private_token: your-secure-token-here # (1)!
    http:
        listen: 0.0.0.0:3000
    database: # (2)!
        host: localhost
        port: 3306
        user: root
        password: root
        database: sms
        timezone: UTC
    

    1. Must match device configuration
    2. Must match MySQL/MariaDB configuration

    Configuration Location

    By default, the application looks for config.yml in the current working directory. Alternatively, you can set the CONFIG_PATH environment variable to specify a custom path to the configuration file.

  2. Launch the server

    Docker Command
    docker run -d --name sms-gateway \
        -p 3000:3000 \
        -v $(pwd)/config.yml:/app/config.yml \
        ghcr.io/android-sms-gateway/server:latest
    
  3. Run the background worker (optional)

    Docker Command
    docker run -d --name sms-gateway-worker \
        -v $(pwd)/config.yml:/app/config.yml \
        ghcr.io/android-sms-gateway/server:latest \
        /app/app worker
    

    The background worker handles maintenance tasks. See Background Worker for setup details.

  4. Configure reverse proxy

    Example Nginx Config
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    

    See Reverse Proxy Configuration for setup details and advanced options.

Verification

Test server accessibility:

Health Check Verification
curl https://private.example.com/health
# Should return JSON health status

Configure Android App 📱

Private Server Settings

Android app configuration for private mode

Important

Changing servers will reset credentials and require device re-registration!

  1. Access Settings
    Navigate to Settings tab → Cloud Server

  2. Enter server details

    API URL: https://private.example.com/api/mobile/v1
    Private Token: your-secure-token-here
    
    !!! note "API URL Path" The API URL must include the /api/mobile/v1 path. Using just the base URL (e.g., https://private.example.com) will not work.

  3. Activate connection

    1. Switch to Home tab
    2. Activate Cloud server switch
    3. Tap the "Offline" button to initiate the connection and registration process
    4. Wait for the app to establish connection (button will change to "Online")

Successful Connection

After successful connection, credentials will be automatically generated and appear in the Cloud Server section:

Username: A1B2C3
Password:  z9y8x7...

Automatic Registration

No manual registration step is required. Username and password are generated automatically on the first successful connection to the server.

Password Management 🔑

Identical to Cloud Server mode.


See Also 📚