Questa pagina La accompagna dall'acquisto fino a un telefono associato che invia il suo primo SMS. Non presuppone alcuna conoscenza del prodotto. Calcoli circa un quarto d'ora, metà del quale per i download.
L'installazione sta in un solo comando. Uno script installa Docker se manca, scarica i file
dell'ultima versione, verifica che non siano stati alterati, scrive la configurazione, avvia il
gateway e installa un comando di gestione, sms-gateway. Non c'è nulla da compilare né alcun
indirizzo di server da digitare.
Che cosa installa
Il gateway è un solo programma, che ascolta su una sola porta e conserva tutto in una sola cartella di dati (un volume Docker). Gira in un container Docker, sulla Sua macchina.
| Non Le serve | Perché |
|---|---|
| Un server di database | Il database è un unico file nella cartella di dati, creato al primo avvio |
| Un server web separato per la dashboard | La dashboard è integrata nel gateway e servita sulla stessa porta dell'API |
| Alcun servizio di terzi | Il gateway non contatta nessuno, tranne il nostro server delle licenze e i webhook che configura Lei. I Suoi SMS, contatti e log non lasciano mai la Sua macchina |
Conseguenza pratica: fare il backup della cartella di dati significa fare il backup dell'intera installazione, e spostarla significa spostare il gateway (veda Backup e ripristino e Migrare su un altro server).
Che cosa serve
| Elemento | Dettaglio |
|---|---|
| Una macchina | Linux amd64 o arm64 (VPS, istanza gratuita Oracle Cloud, server o mini-PC nei Suoi locali, Raspberry Pi a 64 bit), oppure un computer Windows o macOS con Docker Desktop |
| Accesso amministratore | root o sudo su Linux, PowerShell aperto come amministratore su Windows |
| Accesso internet in uscita | Per scaricare Docker e il gateway, e per attivare la licenza. Veda Accesso alla rete |
| Per la modalità dominio | Un nome di dominio il cui record A (o AAAA) punta alla macchina, e le porte 80 e 443 raggiungibili da internet |
| Per la modalità rete locale | Telefoni collegati alla stessa rete della macchina |
| Un telefono Android | Android 8 o successivo, con una SIM attiva e un piano SMS, sempre in carica |
| La Sua chiave di licenza | Visibile nella Sua area clienti dopo l'acquisto |
Sulla Sua macchina non si compila nulla: il gateway è pubblicato pronto all'uso per processori
amd64 e arm64, e Docker sceglie quello giusto. Basta una macchina piccola: il gateway usa
pochissima memoria, e il piano più piccolo della maggior parte dei provider è sufficiente per
iniziare.
Il percorso in cinque passi
Passo 1: crei il Suo account e acquisti
Vada su sms-gateway.araylab.com. Il pulsante Acquista la licenza Le chiede prima di accedere: inserisca il Suo indirizzo e-mail e riceverà un link di accesso. Nessuna password da ricordare. Arriva nella Sua area clienti, per ora vuota.
Il pagamento è gestito da Gumroad, che emette anche la fattura e si occupa dell'IVA. In Madagascar, il pagamento tramite Mobile Money (MVola, Orange Money, Airtel Money) viene convalidato a mano: la licenza compare dopo questa convalida, non immediatamente.
Una volta confermato il pagamento, riceve un'e-mail che annuncia che la licenza è pronta. Per la Sua sicurezza, quell'e-mail non contiene la chiave: La rimanda alla Sua area clienti.
Passo 2: copi la Sua chiave di licenza
Nell'area clienti, la licenza mostra la sua chiave, nel formato XXXX-XXXX-XXXX-XXXX, con un pulsante
per copiarla. Lì compaiono anche le istruzioni di installazione e il link per scaricare l'app
Android, non appena la licenza è attiva.
Può tornare in qualsiasi momento per visualizzare di nuovo la chiave, e rigenerarla se è trapelata (veda Rigenerare la chiave).
Passo 3: esegua il comando di installazione
Sulla macchina che ospiterà il gateway, in un terminale.
Linux (VPS, Oracle Cloud, server locale, Raspberry Pi):
curl -fsSL https://sms-gateway.araylab.com/install.sh | sudo bash
Senza opzioni, lo script Le pone due domande: se può installare Docker nel caso manchi, e se i Suoi telefoni raggiungeranno il gateway tramite un nome di dominio o sulla rete locale (veda Scegliere la modalità). Per rispondere a tutto in anticipo:
# Con un nome di dominio: HTTPS automatico (consigliato)
curl -fsSL https://sms-gateway.araylab.com/install.sh | sudo bash -s -- --domain sms.example.com --yes
# Sulla rete locale, senza nome di dominio
curl -fsSL https://sms-gateway.araylab.com/install.sh | sudo bash -s -- --lan --yes
macOS: lo stesso comando, con Docker Desktop installato e avviato in precedenza. L'installazione
va in ~/sms-gateway, e il comando sms-gateway viene posto in quella cartella.
Windows (Docker Desktop obbligatorio), in PowerShell aperto come amministratore:
irm https://sms-gateway.araylab.com/install.ps1 | iex
Su Windows, lo script non chiede la modalità: installa in modalità rete locale per impostazione predefinita. Per cambiarla, imposti queste variabili nella stessa finestra di PowerShell prima di eseguire il comando:
| Variabile | Predefinito | Effetto |
|---|---|---|
$env:SMSGW_DOMAIN |
vuoto: modalità rete locale | Installa in modalità dominio, con HTTPS automatico su quel nome. Su un'installazione esistente, la passa in modalità dominio |
$env:SMSGW_PORT |
8080 |
Porta del gateway. Considerata solo alla prima installazione |
$env:SMSGW_VERSION |
l'ultima versione pubblicata | Installa quella versione precisa X.Y.Z |
$env:SMSGW_DOMAIN = "sms.example.com"
irm https://sms-gateway.araylab.com/install.ps1 | iex
Se Docker Desktop manca, lo script per Windows propone di installarlo con winget, poi si ferma e Le
chiede di riavviare Windows, avviare Docker Desktop una volta e rieseguire il comando. Installa in
%ProgramData%\SmsGateway, apre la porta 8080 nel firewall di Windows per le reti private in
modalità rete locale, poi apre la dashboard nel Suo browser.
Alla fine, ogni script mostra l'indirizzo della dashboard e il codice di installazione
che serve a creare l'account amministratore (passo 4). Su Linux e macOS, sms-gateway url mostra di
nuovo l'indirizzo e sms-gateway setup-code mostra il codice, finché non esiste alcun account.
Preferisce leggere prima lo script? Passare direttamente a
bashuno script scaricato significa fidarsi di esso. Può scaricarlo, leggerlo e poi eseguirlo:curl -fsSL https://sms-gateway.araylab.com/install.sh -o install.sh less install.sh sudo bash install.sh --domain sms.example.comLo script, dal canto suo, verifica tutto ciò che scarica in seguito con un checksum SHA-256 pubblicato: un file che non corrisponde interrompe l'installazione prima che venga installato qualsiasi cosa.
Che cosa fa lo script, in ordine
- Verifica di essere eseguito come
rootsu una macchina Linuxamd64oarm64(o su macOS). - Installa Docker se manca, tramite lo script ufficiale di Docker, dopo averglielo chiesto (o senza
chiedere con
--yes). - Cerca l'ultima versione pubblicata (o quella indicata con
--version), ne scarica i file e ne verifica il checksum. - Chiede la modalità se nessuna opzione l'ha impostata. In modalità dominio, verifica che il dominio punti a questa macchina e che le porte 80 e 443 siano libere. Un problema produce un avviso e una domanda, non un arresto definitivo: può correggere il DNS in seguito.
- In modalità rete locale, installa
avahi-daemon, che rende risolvibile il nome<nome-macchina>.localsulla Sua rete. - Scrive la configurazione in
/opt/sms-gateway/.env, leggibile solo daroot. Una configurazione esistente viene conservata: rieseguire il comando aggiorna il gateway senza cancellare le Sue impostazioni. - Scarica il gateway, lo avvia e attende che risponda (al massimo due minuti).
- Installa il comando
sms-gatewaye mostra l'indirizzo della dashboard, il codice di installazione e i passi successivi.
Le opzioni (Linux e macOS)
| Opzione | Predefinito | Effetto |
|---|---|---|
--domain <nome> |
nessuno: lo script chiede | Modalità dominio: HTTPS su quel nome, certificato ottenuto automaticamente. Le porte 80 e 443 devono essere raggiungibili. Imposta l'indirizzo pubblico su https://<nome> |
--lan |
nessuno: lo script chiede | Modalità rete locale: il gateway è servito in HTTP su http://<nome-macchina>.local:<porta>, a tutti i dispositivi della rete locale |
--port <n> |
8080 |
Porta del gateway sulla macchina. In modalità rete locale, fa parte dell'indirizzo scritto nei codici QR |
--dir <percorso> |
/opt/sms-gateway (~/sms-gateway su macOS) |
Cartella di installazione, dove vive la configurazione. Le cartelle di sistema sono rifiutate |
--version <X.Y.Z> |
l'ultima versione pubblicata | Installa quella versione precisa, ad esempio per restare su una versione già collaudata |
--yes |
disattivata | Non pone domande: accetta l'installazione di Docker e prosegue nonostante gli avvisi (DNS, porte occupate) |
--no-docker-install |
disattivata | Non installa mai Docker. Se manca, lo script si ferma e lo segnala |
--help |
- | Mostra l'aiuto e non fa nient'altro |
Come interagiscono le opzioni:
- Senza
--domainné--lan, lo script chiede. Con--yese nessuna modalità a una prima installazione, si ferma: non esiste una modalità predefinita, perché quella sbagliata produce telefoni che non si collegano mai. - Rieseguendolo su un'installazione esistente, la modalità e la porta già registrate vengono
conservate. Indicare di nuovo
--domaino--lancambia la modalità: l'indirizzo pubblico cambia, e i telefoni già associati devono essere associati di nuovo. --portè considerata solo alla prima installazione. In seguito prevale la porta registrata nella configurazione; modifichi inveceGATEWAY_PORTnel file.env(veda Impostazioni modificabili).--yesrisponde sì anche agli avvisi. In modalità dominio, un'installazione con un DNS errato o con le porte 80/443 occupate prosegue comunque: il gateway funziona, ma l'HTTPS no, finché non corregge la causa.
Passo 4: apra la dashboard, crei l'amministratore, incolli la chiave
Apra l'indirizzo mostrato dallo script. Un'installazione nuova apre la schermata Creare il primo account: Token di installazione, nome, indirizzo e-mail, password. La password deve essere lunga almeno 12 caratteri. Questo primo account è il superamministratore, e la schermata che lo crea si chiude definitivamente non appena esiste un account.
Il token di installazione è il codice di installazione mostrato alla fine dello script. Dimostra che chi crea l'account ha accesso alla macchina: senza di esso, il primo sconosciuto che trovasse su internet un gateway appena installato potrebbe diventarne l'amministratore. Se non lo ha più sotto mano:
| Dove | Comando |
|---|---|
| Linux, macOS | sms-gateway setup-code |
| Windows | docker compose exec gateway /usr/local/bin/gateway setup-token, da %ProgramData%\SmsGateway |
Il codice scompare non appena l'account è creato: i comandi qui sopra rispondono allora che non ne resta nessuno, ed è normale.
Creare l'account non apre la sessione: la schermata conferma la creazione, poi La porta alla schermata di accesso, dove digita l'indirizzo e-mail e la password appena scelti.
Una volta effettuato l'accesso, compare una finestra Attivare questo gateway. Incolli la chiave copiata al passo 2. Spazi, trattini e minuscole sono accettati. Non c'è nient'altro da digitare: il gateway sa già come raggiungere il nostro server delle licenze.
Se in quel momento il nostro server non risponde, la finestra indica Il nostro server non risponde. La Sua chiave viene comunque registrata e nulla viene sospeso: il gateway invia normalmente e riprova l'attivazione da solo. Un guasto da parte nostra non viene mai trattato come una licenza non valida. Dettagli in Licenza.
Passo 5: installi l'app Android e associ il telefono
- Scarichi l'app dalla Sua area clienti, sul telefono stesso oppure su un computer e poi la copi. L'app non è sul Play Store: il link viene dato solo ai titolari di una licenza.
- La installi. Android Le chiede di autorizzare l'installazione dalla fonte utilizzata (browser o gestore di file). La autorizzi per questa installazione.
- Nella dashboard, apra Dispositivi e faccia clic su Associa un dispositivo. Compare un codice QR, con un codice alternativo per un telefono la cui fotocamera non funziona. È valido cinque minuti e può essere usato una sola volta; Genera un nuovo codice gliene fornisce un altro.
- Nell'app, scansioni il codice QR. Il telefono si collega al gateway e compare in linea in Dispositivi, con le sue SIM.
- Invii un SMS di prova da Invio rapido, poi risponda da un altro telefono: la risposta compare in Conversazioni.
L'app chiede di essere esclusa dall'ottimizzazione della batteria e mostra una notifica permanente: è ciò che la mantiene attiva in background. Tenga il telefono in carica. Tutto ciò che riguarda i telefoni (SIM, quota giornaliera, mantenere il telefono sveglio) è in Dispositivi.
Se digita l'indirizzo a mano invece di scansionare, lo scriva per intero, con
https://ohttp://(https://sms.example.comohttp://server.local:8080). Senza, l'app presuppone una connessione HTTPS, che fallisce su un'installazione in rete locale.
Scegliere la modalità: dominio o rete locale
È l'unica vera scelta dell'installazione, e decide l'indirizzo che i telefoni chiamano. Questo indirizzo viene scritto in ogni codice QR di associazione, poi conservato dal telefono. Un indirizzo sbagliato produce un codice QR che si scansiona perfettamente e un telefono che non raggiunge mai nulla.
| Domanda | Modalità dominio (--domain) |
Modalità rete locale (--lan) |
|---|---|---|
| Per chi | VPS, Oracle Cloud, qualsiasi server raggiungibile da internet | Un server o computer nei Suoi locali, non esposto |
| Indirizzo della dashboard | https://sms.example.com |
http://<nome-macchina>.local:8080 |
| Cifratura | HTTPS, certificato ottenuto e rinnovato automaticamente (Let's Encrypt) | Nessuna: HTTP in chiaro sulla Sua rete locale |
| Dove possono trovarsi i telefoni | Ovunque, 4G compreso | Solo sulla stessa rete della macchina |
| Che cosa espone la macchina | Le porte 80 e 443. Il gateway stesso resta privato | La porta 8080, a tutti i dispositivi della rete locale |
| Prerequisiti | DNS che punta alla macchina, porte 80 e 443 aperte | Il nome .local deve essere risolto sulla Sua rete (su Linux lo script installa il necessario) |
Scelga la modalità dominio ogni volta che può: non ha nessuna delle riserve che seguono.
Che cosa implica la modalità rete locale
- L'app Android accetta connessioni non cifrate solo verso un nome
.local. Un semplice indirizzo IP comehttp://192.168.1.20:8080viene rifiutato dal telefono. Per questo l'installer usahttp://<nome-macchina>.local:8080. - Verifichi che il telefono risolva quel nome prima di proseguire: apra
http://<nome-macchina>.local:8080/healthnel browser del telefono, collegato alla stessa wifi. Una risposta{"status":"ok",...}significa che l'associazione può funzionare. - La sessione della dashboard viaggia non cifrata sulla Sua rete. L'installer imposta
GATEWAY_INSECURE_COOKIES=true, altrimenti i browser si rifiuterebbero di mantenere la sessione in HTTP in chiaro. Accettabile su una rete aziendale che controlla, non su una wifi condivisa. - Il nome della macchina non deve cambiare, perché è scritto nei codici QR. Rinominarla La costringe ad associare di nuovo i telefoni.
- Una wifi ospiti spesso isola i suoi dispositivi: il telefono vede internet ma non la macchina.
Il test
/healthqui sopra lo rivela. Metta i telefoni sulla rete interna.
Tutto ciò che è specifico di questo percorso (indirizzo fisso, wifi ospiti, accesso dall'esterno) è in Server locale.
Che cosa implica la modalità dominio
- Il DNS deve puntare alla macchina prima che il certificato possa essere ottenuto. Lo script La avvisa se non è così; il certificato viene ottenuto automaticamente non appena il DNS è corretto.
- Le porte 80 e 443 devono essere raggiungibili da internet, la 80 compresa: serve a dimostrare che il dominio è Suo. Le apra nel firewall della macchina e presso il Suo provider, che spesso filtra anch'esso.
- Nient'altro è esposto: un piccolo server web (Caddy) gestisce l'HTTPS davanti al gateway, che ascolta solo sulla macchina stessa.
- Se un proxy come Cloudflare si trova davanti al dominio, lo disattivi mentre il certificato viene ottenuto.
Il comando sms-gateway
Installato su Linux e macOS, si esegue come root (o con sudo) da qualsiasi cartella.
| Comando | Che cosa fa |
|---|---|
sms-gateway status |
Stato del gateway (e del server HTTPS in modalità dominio) |
sms-gateway logs |
Log del gateway, in continuo. Ctrl+C per uscire |
sms-gateway url |
Mostra l'indirizzo della dashboard |
sms-gateway setup-code |
Mostra il codice di installazione, finché non esiste alcun account |
sms-gateway update [X.Y.Z] |
Passa all'ultima versione, o a quella indicata. Dati e configurazione vengono conservati |
sms-gateway restart |
Riavvia il gateway e applica una modifica fatta al file .env |
sms-gateway stop / start |
Arresta o riavvia il gateway senza cancellare nulla |
sms-gateway backup |
Scrive un archivio dell'intera cartella di dati nella cartella corrente (veda Backup) |
sms-gateway uninstall |
Rimuove il gateway e il comando. I dati vengono conservati |
sms-gateway uninstall --purge |
Cancella anche i dati: si perde tutto, messaggi, contatti, account e chiave master |
Rieseguire il comando di installazione ha lo stesso effetto di sms-gateway update.
Su Windows, il comando sms-gateway non esiste. Apra PowerShell in %ProgramData%\SmsGateway e
usi direttamente Docker Compose:
| Per | Comando |
|---|---|
| Vedere lo stato | docker compose ps |
| Leggere i log | docker compose logs -f gateway |
| Riavviare | docker compose restart gateway |
| Aggiornare | Rieseguire il comando di installazione |
| Rileggere il codice di installazione | docker compose exec gateway /usr/local/bin/gateway setup-token |
Tenga il computer acceso e Docker Desktop impostato per avviarsi con Windows: il gateway funziona solo mentre Docker Desktop è in esecuzione.
Arrestare o riavviare non fa perdere nulla. Mentre il gateway è fermo, i telefoni conservano i messaggi in uscita e in entrata nella propria coda e li consegnano quando torna.
Rigenerare la chiave
Nell'area clienti, Rigenera la chiave sostituisce la Sua chiave di licenza con una nuova. Lo faccia se la chiave è trapelata (un ticket di assistenza, uno screenshot, un ex collaboratore), o per liberare la licenza prima di installare su un'altra macchina.
| Che cosa cambia | Che cosa non cambia |
|---|---|
| La vecchia chiave viene rifiutata subito per attivare o rinnovare | La Sua licenza: livello, linea di versione, data di acquisto |
| Nessuna macchina resta associata alla licenza | Il gateway già installato continua a funzionare e a inviare |
Il gateway installato non si ferma. Tuttavia non può più rinnovare la propria attivazione finché porta la vecchia chiave: apra Licenza nella dashboard e vi inserisca la nuova chiave. Tra due rigenerazioni deve passare almeno un minuto.
Risoluzione dei problemi
Cominci sempre con sms-gateway status, poi sms-gateway logs.
| Sintomo | Causa probabile e soluzione |
|---|---|
| Avviso: porte 80 o 443 già in uso | Un altro server web (Apache, Nginx, un pannello di hosting) le occupa. sudo ss -ltnp 'sport = :80' lo identifica. Lo fermi, usi un'altra macchina o veda VPS, server web esistente. Proseguire comunque La lascia senza HTTPS |
| L'avvio fallisce perché la porta 8080 è in uso | Imposti GATEWAY_PORT=8090 (o un'altra porta libera) in /opt/sms-gateway/.env, poi riesegua il comando di installazione. In modalità rete locale, aggiunga --lan perché l'indirizzo nei codici QR prenda la nuova porta |
| Avviso: il dominio non punta a questa macchina | Corregga il record A presso il Suo registrar, attenda la propagazione (dig +short sms.example.com), poi sms-gateway restart |
| Il browser segnala un certificato non valido | Il certificato non è ancora stato ottenuto: DNS non propagato, o porta 80 chiusa presso il provider. sms-gateway logs caddy dice perché |
| Lo script dice che manca Docker e si ferma | Ha usato --no-docker-install, o ha rifiutato l'installazione. Installi Docker con il suo plugin compose, o riesegua senza quell'opzione |
| Windows: Docker Desktop non si avvia | Docker Desktop richiede la virtualizzazione attiva nel BIOS e WSL 2. Lo avvii una volta a mano, poi riesegua il comando |
| Lo script attende, poi dice che il gateway non risponde | Vengono mostrate le ultime righe di log. Veda Quando il gateway rifiuta di avviarsi |
| La dashboard si apre ma l'accesso fallisce senza messaggio | Sta usando HTTP in chiaro su un indirizzo diverso da quello configurato dall'installer. Usi l'indirizzo mostrato da sms-gateway url |
| Il token di installazione viene rifiutato | È stato digitato male, o appartiene a un'altra installazione. Lo rilegga con sms-gateway setup-code e lo incolli così com'è |
sms-gateway setup-code risponde che non c'è alcun token |
Esiste già un account. Acceda con quello. Se nessuno da parte Sua lo ha creato, reinstalli da zero con sms-gateway uninstall --purge e poi il comando di installazione |
| Il telefono non si associa: non succede nulla dopo la scansione | Il telefono non raggiunge l'indirizzo del codice QR. Apra https://sms.example.com/health (o http://<nome>.local:8080/health) nel browser del telefono. Se fallisce: wifi ospiti, telefono su un'altra rete, nome .local non risolto, porte chiuse |
| Il telefono rifiuta l'indirizzo | Un indirizzo http:// che non è un nome .local (un IP, ad esempio). Usi il nome .local, o passi alla modalità dominio |
| Il codice QR viene rifiutato perché scaduto | Un codice QR dura cinque minuti e funziona una volta. Faccia clic su Genera un nuovo codice |
| Il codice QR contiene un indirizzo sbagliato | Riesegua il comando di installazione con il --domain o --lan corretto, poi generi un nuovo codice QR. I codici già emessi conservano il vecchio indirizzo |
| La licenza resta su Token locale da rinnovare | La macchina non raggiunge il nostro server delle licenze (firewall in uscita, proxy aziendale), o la chiave è stata rigenerata nel frattempo. L'invio non è influenzato. Veda Licenza |
Accesso alla rete
La macchina ha bisogno di un accesso HTTPS in uscita verso:
| Indirizzo | A che cosa serve | Quando |
|---|---|---|
get.docker.com |
Installare Docker | Solo se Docker manca |
ghcr.io |
Scaricare il gateway | Installazione e aggiornamenti |
bck2.araylab.com |
Scaricare i file di installazione di una versione | Installazione e aggiornamenti |
bck1.araylab.com |
Attivazione della licenza e rinnovo periodico | Finché il gateway è in funzione |
api.ipify.org |
Confrontare l'indirizzo pubblico della macchina con il DNS | Installazione in modalità dominio |
Se bck1.araylab.com è bloccato, nulla smette di funzionare, ma la schermata della licenza
continuerà a indicare che il nostro server non risponde.
Impostazioni modificabili
L'installer scrive la configurazione in /opt/sms-gateway/.env (leggibile solo da root; su
Windows, %ProgramData%\SmsGateway\.env). Per un'installazione standard non c'è nulla da
aggiungere. Tutto ciò che regola ogni giorno (finestra di invio, nuovi tentativi, fuso orario,
notifiche, regole di instradamento...) si imposta nella dashboard, in Impostazioni e nelle
schermate collegate, non qui: veda Impostazioni. Nessuna impostazione
della dashboard ha una variabile equivalente, e nessuna variabile qui sotto si modifica dalla
dashboard.
Dopo aver modificato il file .env, applichi la modifica con sms-gateway restart (su Windows:
docker compose up -d nella cartella di installazione). Un aggiornamento o una nuova esecuzione
dell'installer conserva il file; riscrive solo la versione e, se indica di nuovo --domain o --lan,
le righe della modalità.
Nel file .env
Queste righe sono scritte dall'installer. Può modificarle, sapendo che cosa governa ciascuna.
| Variabile | Predefinito (scritto dall'installer) | Effetto |
|---|---|---|
SMSGW_MODE |
domain o lan, secondo la Sua scelta |
Ricorda la modalità, perché un aggiornamento la conservi. Letta solo dall'installer |
GATEWAY_PUBLIC_URL |
https://<dominio> o http://<macchina>.local:<porta> |
L'indirizzo usato da telefoni e browser. Scritto in ogni codice QR di associazione (https:// dà un collegamento cifrato con il telefono, http:// uno non cifrato) e usato come base dei link brevi. Letto solo all'avvio |
GATEWAY_DOMAIN |
il Suo dominio, o localhost in modalità locale |
Il nome per cui viene richiesto il certificato HTTPS. Deve essere l'host di GATEWAY_PUBLIC_URL |
COMPOSE_PROFILES |
tls in modalità dominio, vuoto in modalità locale |
tls avvia il server HTTPS (Caddy) davanti al gateway, sulle porte 80 e 443. Vuoto: nessun server HTTPS |
GATEWAY_PORT |
8080 (o --port) |
Porta del gateway sulla macchina. In modalità locale, deve corrispondere alla porta in GATEWAY_PUBLIC_URL |
GATEWAY_BIND |
127.0.0.1 in modalità dominio, 0.0.0.0 in modalità locale |
Su quale interfaccia di rete ascolta la porta. 127.0.0.1: solo la macchina stessa (il server HTTPS inoltra il resto). 0.0.0.0: tutti i dispositivi della rete, in HTTP in chiaro |
GATEWAY_INSECURE_COOKIES |
false in modalità dominio, true in modalità locale |
true permette ai browser di mantenere la sessione in HTTP in chiaro, al prezzo di una sessione che viaggia non cifrata. Non cambia nient'altro |
GATEWAY_VERSION |
la versione installata | La versione che si avvia. Preferisca sms-gateway update X.Y.Z, che scarica anche i file corrispondenti |
GATEWAY_IMAGE |
ghcr.io/andritianaa/sms-gateway |
Da dove viene scaricato il gateway. Non modificare |
Il file elenca anche, commentate, le impostazioni qui sotto (un aggiornamento aggiunge questo elenco
una volta a un .env scritto da una versione precedente). Tolga il # davanti a una riga per usarla,
poi riavvii. Il docker-compose.yml fornito passa ciascuna di esse al gateway; assente o vuota, il
gateway applica il suo valore predefinito. Poiché vivono in .env e non in docker-compose.yml, un
aggiornamento le conserva.
| Variabile | Predefinito | Effetto |
|---|---|---|
GATEWAY_LOG_LEVEL |
info |
Livello di dettaglio dei log tecnici (sms-gateway logs e la vista tecnica di Registro attività): debug, info, warn o error. debug è prolisso; nessun livello scrive mai il testo di un SMS né un numero di telefono completo |
GATEWAY_TRUSTED_PROXIES |
172.31.254.2/32, l'indirizzo del server HTTPS integrato |
I reverse proxy autorizzati a comunicare il vero indirizzo IP del visitatore, separati da virgole (indirizzi o blocchi CIDR). Il gateway usa quell'IP per i blocchi di accesso e i limiti di frequenza. Lo modifichi solo se mette un Suo proxy davanti: veda VPS, server web esistente |
GATEWAY_LOG_RETENTION_DAYS |
30 |
Per quanti giorni una voce del Registro attività viene conservata prima di essere cancellata, da 1 a 3650. Una conservazione più lunga fa crescere il database; le voci più vecchie del nuovo valore vengono cancellate alla pulizia successiva. Veda Registro attività |
GATEWAY_UPTIME_RETENTION_DAYS |
90 |
Per quanti giorni viene conservata la cronologia delle connessioni dei telefoni per i grafici di Disponibilità dei dispositivi, da 90 a 3650. Sotto i 90 giorni il grafico di 90 giorni perderebbe le barre più vecchie, da qui questo minimo. La cronologia più vecchia viene cancellata alla pulizia oraria successiva. Veda Dispositivi |
GATEWAY_ROUTING_MODE |
round_robin |
Come i messaggi vengono ripartiti tra le SIM quando nessuna regola di instradamento ne sceglie una: round_robin (a turno), quota (la SIM con più margine nella quota giornaliera) o carrier (la SIM dell'operatore del destinatario). Veda Instradamento |
GATEWAY_CARRIER_PREFIXES |
vuoto | Quali prefissi di numero appartengono a quale operatore, nel formato Telma:+26134,+26138;Orange:+26132. I nomi degli operatori vanno scritti come le SIM li riportano in Dispositivi. Obbligatoria in modalità carrier, ignorata altrimenti. Un numero che non corrisponde ad alcun prefisso viene inviato come in modalità quota |
GATEWAY_WEBHOOKS_ALLOW_PRIVATE_NETWORKS |
true |
Consente i webhook verso indirizzi della Sua rete privata (un CRM sulla stessa rete, ad esempio). false li limita agli indirizzi pubblici. Gli indirizzi della macchina stessa e quelli dei metadati cloud sono sempre rifiutati |
Interazioni da conoscere:
- La modalità è fatta di quattro righe che vanno insieme:
GATEWAY_PUBLIC_URL,GATEWAY_DOMAIN,COMPOSE_PROFILESeGATEWAY_BIND(piùGATEWAY_INSECURE_COOKIES). Cambiarne una senza le altre produce, ad esempio, un sito HTTPS funzionante e telefoni che non si associano. Per cambiare modalità o dominio, riesegua l'installer con--domaino--lan: le riscrive insieme. - Cambiare
GATEWAY_PUBLIC_URLnon aggiorna i telefoni già associati: conservano l'indirizzo del loro codice QR. Li associ di nuovo dopo una modifica del genere. - Un
GATEWAY_TRUSTED_PROXIEStroppo ampio (ad esempio0.0.0.0/0) permette a chiunque di spacciarsi per qualsiasi indirizzo IP e di aggirare il blocco degli accessi. Lasciato vuoto, il gateway vede ogni visitatore con l'indirizzo del proxy, e tutti condividono gli stessi limiti.
Impostazioni avanzate
Il gateway legge anche le due variabili qui sotto. Non compaiono nel file scritto dall'installer, perché un'installazione cliente ne ha raramente bisogno.
| Variabile | Predefinito | Effetto |
|---|---|---|
GATEWAY_SECRET_KEY |
generata al primo avvio e conservata in secret.key |
La chiave master, 32 byte in base64, se preferisce conservarla in un gestore di segreti. Passata da .env dal docker-compose.yml fornito. Se impostata, sostituisce secret.key. Una chiave diversa da quella con cui l'installazione è partita rende illeggibili i telefoni associati, i segreti dei webhook e la chiave di licenza memorizzata. Veda La chiave master |
GATEWAY_ENV_FILE |
gateway.env accanto al programma |
Un file chiave=valore letto prima di tutto il resto. Una variabile già impostata nell'ambiente prevale sempre sul file. File assente: ignorato. File illeggibile: l'avvio viene rifiutato. Non passata dal docker-compose.yml fornito, il cui .env svolge questo ruolo |
Non tocchi queste. Esistono nel programma, ma un'installazione cliente non ne ha bisogno:
| Variabile | Predefinito | Perché non impostarla |
|---|---|---|
GATEWAY_DEV |
false |
Modalità sviluppo. Toglie la protezione del cookie di sessione, accetta un indirizzo pubblico non cifrato su qualsiasi host e permette di sostituire l'indirizzo e le chiavi del server delle licenze. Il docker-compose.yml fornito non la passa, di proposito |
GATEWAY_LICENSE_SERVER_URL |
il nostro server delle licenze, integrato | Ignorata senza GATEWAY_DEV=true (un avviso lo segnala nei log). Deve essere https:// |
GATEWAY_LICENSE_PUBLIC_KEYS |
le nostre chiavi pubbliche, integrate | Stessa regola: ignorata senza GATEWAY_DEV=true |
GATEWAY_ADDR |
:8080 |
Porta di ascolto dentro il container. Modifichi invece GATEWAY_PORT; cambiare questa rompe il controllo di salute |
GATEWAY_DATA_DIR |
/data |
Cartella di dati dentro il container. Cambiarla porta i dati fuori dal volume e cambia l'impronta della macchina |
I backup non hanno variabili: il backup automatico si regola nella dashboard, in Impostazioni > Backup ed esportazione. Veda Backup.
Due regole valgono per ogni variabile:
- Un valore vuoto conta come assente: si applica il valore predefinito.
- Un valore non valido ferma il gateway all'avvio, con un messaggio che nomina la variabile, invece di farlo funzionare con un valore che Lei non ha scelto. Veda la sezione successiva.
Quando il gateway rifiuta di avviarsi
Il messaggio si trova in sms-gateway logs, su una riga che contiene gateway stopped. Il gateway si
riavvia in ciclo finché la causa non viene corretta.
| Causa | Che cosa dice il log |
|---|---|
| Livello di log sconosciuto | GATEWAY_LOG_LEVEL: "..." is not one of debug, info, warn, error |
| Conservazione del registro attività fuori intervallo | GATEWAY_LOG_RETENTION_DAYS: "..." is not a number of days between 1 and 3650 |
| Conservazione della cronologia di disponibilità fuori intervallo | GATEWAY_UPTIME_RETENTION_DAYS: "..." is not a number of days between 90 and 3650 |
| Modalità di instradamento sconosciuta | GATEWAY_ROUTING_MODE: "..." is not one of round_robin, quota, carrier |
Modalità carrier senza tabella dei prefissi |
GATEWAY_ROUTING_MODE=carrier requires GATEWAY_CARRIER_PREFIXES |
| Tabella dei prefissi malformata | ... is not in the form Carrier:+prefix,+prefix |
| Un'impostazione sì/no con un altro valore | <VARIABLE>: "..." is not a boolean (usi true o false) |
Indirizzo pubblico http:// in chiaro che non è un nome .local né localhost |
GATEWAY_PUBLIC_URL: "..." is plain http on a non-local host; ... |
| Indirizzo di proxy illeggibile | GATEWAY_TRUSTED_PROXIES: "..." is neither a CIDR block nor an address |
| Chiave master di dimensione errata | key is N bytes, expected 32 o key is not valid base64 |
| Cartella di dati inutilizzabile | create data dir: ..., o un errore all'apertura del database |
GATEWAY_ENV_FILE (o gateway.env) presente ma illeggibile |
read <path>: ... |
Indirizzo del server delle licenze in http:// in chiaro |
GATEWAY_LICENSE_SERVER_URL: "..." must use https ... |
Perché un indirizzo http:// in chiaro viene rifiutato: in HTTP, la sessione della dashboard
viaggerebbe non cifrata attraverso internet. Solo un nome .local (modalità rete locale) o
localhost sono accettati senza HTTPS.
Perché la modalità carrier viene rifiutata senza tabella: non instraderebbe nulla per
operatore, e Lei crederebbe di pagare la tariffa verso la stessa rete mentre paga quella verso altre
reti.
Un ripristino che fallisce (veda Backup e ripristino) non impedisce mai l'avvio: il gateway si avvia sul database che ha e registra l'errore.
La chiave master
Al primo avvio, il gateway crea una chiave master, secret.key, nella sua cartella di dati. Protegge
i segreti dei telefoni associati, i segreti dei webhook e la Sua chiave di licenza memorizzata nel
database, e identifica la Sua macchina presso il nostro server delle licenze (viene inviata solo
un'impronta derivata da essa, mai la chiave).
Perderla significa associare di nuovo tutti i telefoni e reinserire la chiave di licenza. Vive
accanto al database, non al suo interno: un'esportazione del database da sola non la contiene,
mentre l'archivio di sms-gateway backup, che copia l'intera cartella di dati, la contiene.
Che cosa contiene la cartella di dati
| File | Ruolo |
|---|---|
gateway.db (e -wal, -shm) |
Il database: messaggi, contatti, conversazioni, impostazioni, account |
secret.key |
La chiave master |
setup.token |
Il codice di installazione. Presente solo finché non esiste alcun account |
backups/ |
I backup fatti dalla dashboard o dall'API |
restore.pending.* |
Presente solo mentre un ripristino attende il prossimo riavvio |
gateway.db.pre-restore-... |
Il database precedente, messo da parte dopo un ripristino, conservato finché non lo cancella |
Il container è blindato: non può scrivere da nessuna parte tranne in questa cartella e in uno spazio
temporaneo usato per le esportazioni del database. Se sostituisce il docker-compose.yml fornito con
una Sua configurazione, conservi la riga hostname: sms-gateway (senza di essa, ogni ricreazione del
container sembra un trasloco agli occhi del nostro server delle licenze) e il montaggio /tmp (senza
di esso, l'esportazione del database fallisce).
Backup
L'intera installazione vive nella cartella di dati. Il backup più semplice è:
sudo sms-gateway backup
Eseguito dalla cartella in cui vuole l'archivio, ferma il gateway per i pochi secondi della copia (i
telefoni conservano nel frattempo i loro messaggi), scrive sms-gateway-backup-<data>.tar.gz nella
cartella corrente, lo riavvia e attende che risponda. Questo archivio contiene la chiave master insieme al database: lo
conservi come il documento più sensibile dell'installazione, e non sulla stessa macchina.
Il gateway esegue anche backup automatici, senza interrompere gli invii: ogni giorno alle 03:00
nel fuso orario della piattaforma per impostazione predefinita, sette copie conservate, nella cartella
di dati. Cambi l'ora, la frequenza e il numero di copie, o lo disattivi, in Impostazioni > Backup ed
esportazione, che elenca e ripristina anche i backup ed esporta i Suoi dati in CSV o JSON. Queste
copie restano sulla macchina: ne scarichi una, o copi un archivio di sms-gateway backup, per
conservare una copia altrove.
Tutto è descritto in dettaglio in Backup e ripristino.
Le guide di hosting
Questa pagina copre l'installazione in sé. Ciò che è specifico di ogni tipo di macchina ha una sua guida:
| Dove | Che cosa aggiunge |
|---|---|
| Oracle Cloud Always Free | Creare l'istanza gratuita e aprire le porte a entrambi i livelli (Oracle e l'istanza) |
| VPS | Preparare un server a noleggio: DNS, firewall, server web esistente, avvio automatico |
| Server locale | Il nome .local, la wifi ospiti, l'accesso dall'esterno e la disponibilità |
E poi
| Vuole | Vada a |
|---|---|
| Gestire i Suoi telefoni e le SIM | Dispositivi |
| Inviare i primi messaggi | Invio |
| Inviare tramite l'API | API |
| Fare backup e ripristinare | Backup e ripristino |
| Passare a un'altra macchina | Migrare su un altro server |
| Sapere che cosa protegge i Suoi dati | Sicurezza |