Heroku Dynos dovrebbe non essere utilizzato per distribuire un'applicazione di database come InfluxDB.
I dynos sono server effimeri. I dati non persistono tra il riavvio del dyno e non possono essere condivisi con altri dynos. In pratica, qualsiasi applicazione di database distribuita su un banco prova è sostanzialmente inutile. Questo è il motivo per cui i database su Heroku (ad esempio Postgres) sono tutti componenti aggiuntivi. InfluxDB dovrebbe essere impostato su una piattaforma diversa (come AWS EC2 o VPS) poiché un componente aggiuntivo Heroku non è disponibile.
Detto, è possibile distribuire InfluxDB ad un banco Heroku.
Per iniziare, è importante capire il concetto di "lumaca". Le lumache sono contenitori (simili a immagini Docker) che contengono tutto il necessario per eseguire un programma sull'infrastruttura di Heroku. Per distribuire InfluxDB, una lumaca InfluxDB deve essere creato * Ci sono due modi per creare una lumaca per le librerie Go:..
- Creare una lumaca direttamente da un Go eseguibile come descritto here **
- costruire il slug dalla fonte usando il pacchetto build Heroku Go (spiegato sotto).
per costruire il proiettile dalla fonte utilizzando un buildpack, primo clone repo InfluxDB Github. Quindi aggiungi un Procfile alla radice del repository, che indica a Heroku il comando da eseguire all'avvio del banco prova.
echo 'web: ./influxd' > Procfile
Il pacchetto di sviluppo Go richiede che tutte le dipendenze siano incluse nella directory. Utilizzare lo strumento di dipendenza Godep per distribuire tutte le dipendenze nella directory.
go get github.com/tools/godep
godep save
Successivamente, confermare le modifiche apportate in precedenza al repository git.
git add -A .
git commit -m dependencies
Infine, creare una nuova app e dirgli di compilare con il pacchetto build Go.
heroku create -b https://github.com/kr/heroku-buildpack-go.git
git push heroku master
heroku open // Open the newly created InfluxDB instance in the browser.
Heroku mostrerà una pagina di errore. Viene visualizzato un errore perché il tipo di processo "Web" di Heroku richiede che un'app ascolti le richieste in arrivo sulla porta descritta dalla variabile di ambiente $PORT
, altrimenti ucciderà il banco prova. L'API e il pannello di amministrazione di InfluxDB funzionano sulle porte 8086
e 8083
, rispettivamente.
Sfortunatamente, InfluxDB non consente di impostare tali porte da variabili di ambiente, solo tramite il file di configurazione (/etc/config.toml
). Un piccolo script bash eseguito prima dell'inizio di InfluxDB potrebbe impostare la porta corretta nel file di configurazione prima che InfluxDB si avvii.
Un altro problema, Heroku espone solo una porta per dyno in modo che l'API e il pannello di amministrazione non possano essere esposti a Internet allo stesso tempo. Un proxy inverso intelligente potrebbe ovviare a tale problema utilizzando Heroku X-Forwarded-Port
request header.
In conclusione, non utilizzare i dynasty di Heroku per eseguire InfluxDB.
* Questo significa che i benefici di un eseguibile standalone Go sono persi durante la distribuzione di Heroku, dal momento che deve essere ricompilato per lo stack di Heroku.
** La creazione di una lumaca direttamente dall'eseguibile InfluxDB non funziona perché non esiste un modo integrato per ascoltare la porta corretta fornita da Heroku nella variabile di ambiente $PORT
.
Sì, ma con molte domande, che cosa succederà alle prestazioni? Niente di buono, immagino, a meno che il VPS non si trovi nello stesso cluster di heroku aka su Amazon. Ho sbagliato? –
Alcuni test sarebbero sufficienti. Per esempio. in che modo un droplet Digital Ocean nella stessa regione viene confrontato con un'istanza Amazon in una regione diversa. A parte questo, [dyno size] (https://devcenter.heroku.com/articles/dyno-size) potrebbe essere una considerazione, ad es. Quanta RAM pensi che sarebbe necessario per la tua istanza InfluxDB? Se la risposta è più di quanto pensiate, vorrei andare con un'istanza Amazon (nella stessa regione delle istanze di Heroku) solo per i risparmi. Aggiornerò la risposta per riflettere queste considerazioni aggiuntive. – opyate