Installa Discourse per lo sviluppo usando Docker

Dalla mia VM Ubuntu sono riuscito a fare il ping di rubygems.org. Non so se esiste un modo per verificare se il container Docker possa farlo. Penso di aver fatto il ping solo della versione HTTP, non HTTPS, però. Lo menziono nel caso il problema sia correlato a questo. (Una delle pagine che ho visto cercando su Google suggeriva di cambiare HTTPS in HTTP, ma non è come se potessi farlo, dato che il comportamento definito si trova da qualche parte nel container Docker.)

1 Mi Piace

Ho provato le opzioni per macOS.

Innanzitutto, ho utilizzato l’Opzione 2, Homebrew. Tuttavia, ho riscontrato problemi perché non tutte le dipendenze sono state installate con il comando indicato in questa guida. https://medium.com/@yutafujii_59175/a-complete-one-by-one-guide-to-install-docker-on-your-mac-os-using-homebrew-e818eb4cfc3 mi ha aiutato a fare un po’ di progressi.

Ora sono bloccato al Passaggio 2 d/boot_dev --init:

Migrating database...

rake aborted!

PG::ConnectionBad: could not connect to server: No such file or directory

Is the server running locally and accepting

connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

/src/lib/site_settings/db_provider.rb:61:in `table_exists?'

/src/lib/site_settings/db_provider.rb:16:in `all'

/src/lib/site_settings/defaults_provider.rb:29:in `db_all'

/src/lib/site_setting_extension.rb:277:in `block in refresh!'

/src/lib/site_setting_extension.rb:274:in `synchronize'

/src/lib/site_setting_extension.rb:274:in `refresh!'

/src/lib/site_setting_extension.rb:495:in `block in setup_methods'

/src/config/initializers/004-message_bus.rb:120:in `<main>'

/src/config/environment.rb:7:in `<main>'

/usr/local/bin/bundle:23:in `load'

/usr/local/bin/bundle:23:in `<main>'

Tasks: TOP => db:migrate => db:load_config => environment

(See full trace by running task with --trace)

Successivamente ho scaricato il file .dmg, ma dato che sono nuovo di Docker, non capisco cosa fare da qui. Sarebbe ottimo avere una descrizione più dettagliata dell’opzione per macOS.

Grazie.

1 Mi Piace

Su macOS, una volta installato Docker dal file .dmg, assicurati che sia in esecuzione: dovrebbe esserci un’icona nella barra degli strumenti di macOS che puoi utilizzare per verificare lo stato. Poi segui semplicemente i passaggi del primo post (clona, ecc.). Scrivi qui se incontri problemi seguendo questa procedura.

Nota: se in precedenza hai installato Docker con Homebrew, potrebbe essere una buona idea disinstallare quella versione di Docker o almeno assicurarti che non sia in esecuzione. Non ho mai installato Docker con Homebrew, quindi non posso dare consigli specifici su questo punto.

2 Mi Piace

Grazie.

Ho utilizzato l’icona e aperto la dashboard di Docker. Non ho trovato alcun contenitore in esecuzione lì, ma dalla riga di comando ho potuto vedere che diversi contenitori erano attivi. Mi chiedevo se fosse necessario accedere per utilizzare la dashboard di Docker? O forse questo comportamento si verifica perché sono installate più versioni di Docker, una tramite Homebrew e l’altra tramite Desktop (.dmg)?

Nel frattempo sono riuscito a configurare Discourse su DigitalOcean, che funziona senza problemi ed è sufficiente per le mie esigenze.

1 Mi Piace

Il DMG installa Docker, non Discourse. Non aggiungerà alcun contenitore inizialmente.

Da lì puoi seguire la guida Docker.

2 Mi Piace

Eseguendo il comando sopra (su un Mac) ottengo questo errore:

Si è verificato un errore durante l'installazione di cppjieba_rb (0.3.3) e Bundler non può continuare.

Assicurati che `gem install cppjieba_rb -v '0.3.3' --source 'https://rubygems.org/'` abbia successo
prima di eseguire bundler.

Hai qualche suggerimento? Non capisco esattamente qual è il problema. Anche l’installazione separata del gem non funziona (nemmeno con sudo).

Inoltre, perché i gem devono essere installati quando eseguo un’immagine Docker? Dovrebbe essere già completamente preinstallato, giusto?

AGGIORNAMENTO: RISOLTO

Ho clonato in ~/repos/discourse, ma avrei dovuto farlo in ~/discourse. Ora funziona perfettamente.

3 Mi Piace

Se ricevi questo errore durante l’esecuzione di d/unicorn:

Could not find aws-partitions-1.284.0 in any of the sources
Run `bundle install` to install missing gems.

puoi risolvere eseguendo:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "cd /src && USER=discourse RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 LD_PRELOAD=/usr/lib/libjemalloc.so RAILS_ENV=${RAILS_ENV:=development} bundle install"

dopodiché d/boot_dev verrà eseguito con successo.

3 Mi Piace

Più semplice

d/boot_dev
d/bundle install

Abbiamo helper per tutte le attività abituali.

5 Mi Piace

Nell’OP si legge

Il flusso di sviluppo di Docker supporta i collegamenti simbolici nella directory plugins/

A cosa dobbiamo collegare simbolicamente la directory dei plugin in questo contesto? Grazie!

1 Mi Piace
cd plugins
ln -s /full/path/to/your/plugin .
ln -s ~/src/my-great-plugin # ad esempio
6 Mi Piace

Ah, grazie, intendevo solo creare un collegamento simbolico alla directory dei plugin in questo contesto.

1 Mi Piace

In genere, per questo flusso di lavoro non si crea un collegamento simbolico per l’intera directory, poiché solitamente si desidera un controllo granulare su quali plugin siano inclusi nell’ambito durante l’esecuzione.

4 Mi Piace

Ciao, sto seguendo questa guida e funziona bene, ma la mia preoccupazione è che ogni volta che eseguo d/boot_dev inizia a scaricare varie cose. Come posso scaricare una volta sola i file necessari e conservarli per il prossimo avvio? Il mio sistema operativo è Ubuntu 20.04.

1 Mi Piace

Ho provato a installare su un sistema Mint 20 appena formattato. Docker è disponibile:

terrapop@terrapop:/var$ docker version
Client: Docker Engine - Community
 Version:           19.03.12

terrapop@terrapop:/var/discourse$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
     Active: active (running) since Mon 2020-08-24 19:03:48 CEST; 31min ago

Poi ho clonato Discourse:

sudo git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse
cd /var/discourse

Tuttavia, l’esecuzione di d/boot_dev --init ha portato a:

d/boot_dev --init

bash: d/boot_dev: File o directory non trovati

Qualcuno può aiutarmi?

1 Mi Piace

Aggiornamento: Ho appena aggiunto le nostre chiavi API di SendGrid all’app.yml e avviato l’app tramite ./launcher; ora funziona su localhost. Potrebbe essere che tutti i comandi d/ nel post originale siano obsoleti? Comunque, non riesco a capire. L’app ora è in esecuzione su Docker sul mio computer Ubuntu (Mint) in localhost, proprio come sull’ambiente di staging di Digital Ocean. Vogliamo sviluppare in locale con l’app in esecuzione tramite Docker e symlink per i plugin, ma non sono sicuro che sia pronta come dovrebbe, dato che non riesco a eseguire quei comandi d/ in alcun modo. Qualcuno può dare una mano? Grazie.

Aggiornamento: Colpa mia. Ho usato il link git per la produzione:

git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse

Invece di:

git clone GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub

:cowboy_hat_face:

Tuttavia…

Ora ho nuovi problemi. Posso clonare solo in /var come superutente/root su Ubuntu Mint 20 (UID 0). Quindi, quando clono ed eseguo d/boot_dev --init, tutto si scarica e parte correttamente, ma in una fase successiva lo script genera un errore di permessi perché si aspetta di eseguire qualcosa con UID 1000, che è il primo utente creato su Mint, ovvero il mio account personale (terrapop), e non root. Come posso risolvere questo problema?

Soluzione: Più semplice di quanto pensassi. Basta creare una nuova directory www in var. Cambiare proprietario e permessi della directory www al primo utente su Mint e procedere come nei post dell’autore originale. Ora funziona. Felice.

2 Mi Piace

Per qualche motivo, i collegamenti simbolici alle directory sorgente dei miei plugin non funzionavano e ho dovuto spostare/copiare manualmente le directory sorgente dei plugin nella directory plugins per farli apparire in /admin/plugins dopo il riavvio del contenitore Docker.

Forse c’è stato un cambiamento nel modo in cui Docker supporta i collegamenti simbolici? Sto eseguendo docker-ce 19.03.12 su Ubuntu.

1 Mi Piace

Anche io ho sperimentato questo di recente con Docker Desktop per Mac.

1 Mi Piace

Ho eseguito gli stessi passaggi su un droplet DO da $5. Tutto è andato bene. Ora, come espongo il mio sito per poterlo accedere?

P.S. Funziona con ngrok. Non funziona ancora con il reverse proxy nginx sulla porta 9292

Grazie a questo. Puoi farlo direttamente sul server ed evitare di configurare il reverse proxy nginx. Sto godendo della configurazione d/o con docker+vscode remoto :slight_smile:

Usa d/unicorn -D per eseguire unicorn come demone, in modo che la shell rimanga utilizzabile dopo l’avvio del server.

Inoltre, hai bisogno di almeno un droplet d/o da $10.

3 Mi Piace

Sono su un Mac con zsh (su iTerm2) e, quando provo a utilizzare un collegamento simbolico per lo sviluppo di plugin, mi blocco con questi errori:

readlink: opzione non valida -- f
utilizzo: readlink [-n] [file ...]

Questo perché l’implementazione del comando readlink su Mac è leggermente diversa da quella GNU.

Il modo più semplice per risolvere è fare quanto segue:

# brew install coreutils
# ln -s "$(which greadlink)" "$(dirname "$(which greadlink)")/readlink"

Questo ti permetterà di utilizzare una versione compatibile di readlink.

Ricorda che devi avere il valore dirname "$(which greadlink)" nella tua variabile PATH in una posizione precedente a /usr/bin (dove si trova solitamente il readlink originale). Nel mio caso, PATH è qualcosa come /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:... e il collegamento simbolico a greadlink si trova in /usr/local/bin.

Riferimento: Fixing "readlink: illegal option -- f" error on a Mac

5 Mi Piace

Per eseguire una suite di test per un singolo plugin, puoi procedere in questo modo:

# d/rake "plugin:spec[NOME_PLUGIN]"
1 Mi Piace