Non so se questo accade solo quando il limite giornaliero è esaurito. Ma qui succede continuamente da 2-3 mesi. Anche altre persone sembrano avere lo stesso problema:
Forse sarebbe una buona idea fornire i file Maxmind da una directory locale? Li scarico comunque per altri usi, quindi sono già lì.
E forse sarebbe ancora meglio fornire i file Maxmind in una directory condivisa nel container Discourse per avere sempre la versione aggiornata? Come ho detto, li scarico comunque e aggiorno i file una volta al giorno.
Penso che il problema non sia correlato al limite. In altre parole, restituisce un errore anche quando viene inserita una chiave o un ID account errato. Ecco come possiamo risolvere il problema qui: in caso di errore, farlo utilizzare il vecchio database e continuare a ricostruirlo. Naturalmente, è molto importante determinare la causa principale di questo problema.
Ho provato a creare un esempio due giorni fa e ha restituito un errore. Non aveva nulla a che fare con il limite perché era la mia prima ricostruzione quel giorno. Poi ho creato una nuova chiave e ho provato e ha funzionato. C’è una situazione qui: quando crei una chiave, ci vuole un po’ di tempo prima che diventi attiva. Se la ricrei immediatamente, restituisce un errore.
Beh, le mie chiavi sono vecchie, non le ho mai cambiate dopo averle iniziate a usare. Perché funziona quando crei una nuova chiave? Hai detto che ci vuole un po’ prima che diventi attiva. Quindi dovrebbe dare un errore allora?
È una buona idea. O offrire i file da una directory locale, come ho suggerito. Tutto opzionale. Ma mi infastidisce davvero che la ricostruzione sia come una lotteria da molte settimane ormai…
Questo è contrario ai termini di utilizzo di Maxmind, motivo per cui dobbiamo far sì che tutti forniscano le chiavi API per scaricare i file individualmente.
Assegnandomi il compito di esaminare qual è il problema quando viene raggiunto il limite giornaliero.
Ho avuto un errore nella ricompilazione e poi ho creato l’immagine con le impostazioni maxmind disattivate. E poi, all’interno del container, ho riattivato le impostazioni ed eseguito correttamente il task rake.
Forse è possibile ricompilare senza scaricare il database e poi far scaricare il database all’avvio del container?
Inoltre, ho aggiunto una PR che dovrebbe consentire al bootstrap di avere successo (che è stata unita) anche se il download fallisce, ma sta ancora causando il fallimento del bootstrap.
Sì, penso che tu abbia ragione. Maxmind non è una funzionalità critica, quindi non c’è bisogno che facciamo fallire il bootstrap quando non riusciamo a scaricare le cose.
Penso che tu non abbia capito cosa stavo cercando di dire. Provo di nuovo:
Ho uno script che scarica i file Maxmind ogni pochi giorni. Con le mie chiavi API, ovviamente. I file vengono utilizzati sul server per diverse cose come le statistiche web di AWstats, i plugin di WordPress e così via.
Quindi ho comunque i file sulla macchina. Perché scaricare i file (di nuovo) quando ricostruisco il container Discourse?
Sì. Sarebbe fantastico poterli avere in uno storage persistente, specialmente se potesse essere condiviso tra istanze. Ho una manciata di siti Discourse sulla stessa macchina dietro traefik, quindi se potessero tutti condividere lo stesso mmdb, risparmierei la gestione e il download di un sacco di copie separate. Anche su un’installazione standard, potrebbero persistere tra le build. Forse è già possibile? Forse basta montare /var/www/discourse/vendor/data da qualche parte in modo persistente?
Aha. Penso che sia a questo che serve GlobalSetting.maxmind_backup_path. Quindi penso che se per qualche motivo hai un maxminddb, puoi impostare DISCOURSE_MAXMIND_BACKUP_PATH su qualcosa che sia disponibile nel container.
Inoltre, perché abbiamo bisogno di mmdb per precompilare gli asset?
Quindi sta già funzionando? Impostare DISCOURSE_MAXMIND_BACKUP_PATH in app.yml (come link interno dal container o link assoluto sull’host Docker?) disabiliterà un download da Maxmind durante la ricostruzione?
Grazie ancora. Ho creato /var/discourse/shared/discourse_test/data/mmdb e ecco cosa ho fatto ad app.yml:
## La chiave dell'account MaxMind per la geolocalizzazione IP per la ricerca dell'indirizzo IP
## vedi https://meta.discourse.org/t/-/137387/23 per i dettagli
DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
DISCOURSE_MAXMIND_LICENSE_KEY: abcdefg
DISCOURSE_MAXMIND_BACKUP_PATH: /data/mmdb
## Il container Docker è stateless; tutti i dati sono memorizzati in /shared
volumes:
- volume:
host: /var/discourse/shared/discourse_test
guest: /shared
- volume:
host: /var/discourse/shared/discourse_test/log/var-log
guest: /var/log
- volume:
host: /var/discourse/shared/discourse_test/data
guest: /data
Ho aggiunto DISCOURSE_MAXMIND_BACKUP_PATH e ho aggiunto un terzo volume.
La directory per DISCOURSE_MAXMIND_BACKUP_PATH è corretta? Il percorso è il percorso all’interno del container?
Devo rimuovere DISCOURSE_MAXMIND_ACCOUNT_ID e DISCOURSE_MAXMIND_LICENSE_KEY ora?
Rilevata copia di backup MaxMindDB (scaricata: 2024-07-17 23:15:02 +0000) in /data/mmdb
Copia di MaxMindDB da /data/mmdb a /var/www/discourse/vendor/data
Salta il download di MaxMindDB poiché è stato scaricato l'ultima volta il 2024-07-17 23:15:02 +0000
Penso che questo sia ciò che io (o meglio “noi”) volevamo vedere.
Penso che avresti potuto saltare il volume aggiuntivo e fare
DISCOURSE_MAXMIND_BACKUP_PATH: /shared/data
Ma se hai qualche altro processo che mantiene quel database aggiornato altrove, allora potresti montare quella directory in modo da avere una sola copia locale sul tuo disco e dovresti aggiornare solo quella copia.
Penso che lo lascerò così. Ai miei occhi è una configurazione più chiara che può ancora essere compresa tra qualche mese. Inoltre, potrebbe essere più generica e adatta a più casi d’uso rispetto al solo mio.
Copio i tre file mmdb di Maxmind in quella directory quando li scarico. Ho appena modificato lo script che sto usando (a proposito, per il download sto usando geoipupdate, che è disponibile anche come pacchetto per Debian (e molto probabilmente altre distribuzioni Linux)).
Ho appena finito di ricostruire quattro diversi container Discourse, tutti senza errori! Non succedeva da mesi qui. Fantastico!
Questo problema persiste ancora. Spiegherò l’incidente in dettaglio:
Ho effettuato un aggiornamento dall’amministratore, si è interrotto a metà. Quindi ho avviato una ricompilazione dal pannello ssh. Boom ha dato un errore, un esempio di errore è sotto.
Quindi ho creato una nuova chiave maxmind e l’ho ricompilata, ha dato di nuovo un errore, lo stesso errore. (interessante, forse la chiave non era attiva).
Quindi ho disabilitato l’impostazione maxmind nel file app.yml. L’ho ricompilata e la compilazione è andata a buon fine.
I componenti aggiuntivi che ho utilizzato sono mostrati nell’immagine, altre cose che ho utilizzato:
Cloudflare R2
server postgresql separato
cloudflare
Non riesco più a capire cosa stia causando il problema.