Install Discourse for development using Docker

Sospetto che dovrebbe essere d/rake admin:create

Purtroppo no :frowning:
OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/rake": stat bin/rake: no such file or directory: unknown

Qual è stato il risultato di: d/boot_dev --init?

Utilizzo della sorgente in: /home/martyn/discourse
Utilizzo dei dati in: /home/martyn/discourse/data/postgres
release: Estrazione da discourse/discourse_dev
Digest: sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
Stato: L'immagine è aggiornata per discourse/discourse_dev:release
docker.io/discourse/discourse_dev:release
docker: Risposta di errore dal demone: Conflitto. Il nome del container "/discourse_dev" è già in uso dal container "44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a". È necessario rimuovere (o rinominare) tale container per poter riutilizzare quel nome.
Vedere 'docker run --help'.

OK, hai creato il container.

È molto strano. L’ho appena installato in WSL da zero e ha funzionato per me, anche se ho dovuto eseguire manualmente d/exec yarn.

Suggerisco di fermare, eliminare il tuo container e ricominciare, prestando attenzione agli errori visualizzati nella console.

2 Mi Piace

Sto lavorando per configurare un ambiente di sviluppo Discourse con le istruzioni Docker e sto riscontrando errori durante l’esecuzione di qualsiasi comando Yarn. I comandi Ruby funzionano bene, ma l’esecuzione di d/yarn (e dei suoi sottocomandi) fallisce con questo errore:

discours(v3.1.3) $ d/exec yarn -v

<--- Ultimi GC --->


<--- Stack trace JS --->


#
# Errore fatale OOM in MemoryChunk: allocazione fallita durante la deserializzazione.
#

Sono su Fedora 39 con Docker 24.0.7. Non ho modificato nulla se non il checkout di Discourse da Git e il passaggio al tag v3.1.3.

Qualcuno ha già visto questo errore? Grazie!

Sembra che stia esaurendo la memoria:

Quanta RAM ha?

La mia macchina ha 64 GB di RAM e non credo di aver impostato limiti sull’utilizzo della memoria di Docker. Ho appena installato Docker standard.


Modifica: è interessante, i comandi Node funzionano ma Yarn fallisce:

discourse(v3.1.3*) $ d/exec node -v
v18.17.1
discourse(v3.1.3*) $ d/exec yarn -v

<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

Un rapido aggiornamento: anche i comandi Node falliscono dopo ulteriori test:

discourse(v3.1.3*) $ d/exec node --help

<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

Qualsiasi cosa diversa da d/exec node -v genera quell’errore. :thinking: Continuerò a indagare e cercherò di trovare una soluzione.

Ho trovato una soluzione al mio problema. È un processo un po’ contorto e “hacky”, ma funziona. In sintesi, l’aggiornamento a Node.js 20.x.x ha risolto il mio problema.

Ho creato un’immagine Docker che utilizza Node.js v20.x.x invece di quella predefinita v18.x.x utilizzata dall’immagine Docker di sviluppo di Discourse.

Ho iniziato creando questo Dockerfile:

# NOME: discourse_node20
FROM discourse/discourse_dev:release

# aggiorna node a LTS 20.x.x
ENV NODE_MAJOR=20
RUN apt-get update
RUN apt-get install -y ca-certificates curl gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install nodejs -y

Poi ho creato l’immagine: docker build -t discourse_node20 - < Dockerfile

Poi ho aggiornato il comando docker run di d/boot_dev per utilizzare l’immagine discourse_node20 e non scaricare discourse/discourse_dev:release poiché non viene utilizzata. Ecco il comando aggiornato in d/boot_dev:

# commenta la riga sottostante
# docker pull discourse/discourse_dev:release
docker run \
    -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    -e NODE_OPTIONS=--max_old_space_size=8192 \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse_node20 /sbin/boot

Da lì sono stato in grado di eseguire con successo d/boot_dev --init, d/rails s e d/ember-cli, ottenendo un ambiente di sviluppo funzionante in Docker 24 e Fedora 39.


Non so perché Node 20.x.x risolva il problema. Spero che questo venga risolto upstream nell’immagine di sviluppo principale. Sarei felice di contribuire con una pull request, ma l’aggiornamento di una dipendenza principale sembra essere qualcosa di più di una semplice PR “al volo” da parte mia. :smile_cat: Beh, almeno per ora sono sbloccato!

Qualcuno è riuscito a farlo funzionare su un Raspberry Pi? (sì, so che la configurazione di produzione è supportata). Quali modifiche/configurazioni sono necessarie?

Ricevo:

WARNING: La piattaforma dell'immagine richiesta (linux/amd64) non corrisponde alla piattaforma host rilevata (linux/arm64/v8) e non è stata richiesta alcuna piattaforma specifica

E poi il container si blocca e si riavvia continuamente.

AGGIORNAMENTO: Ah, vedo che un’immagine di supporto non è ancora stata introdotta? Confronta:

https://hub.docker.com/r/discourse/base/tags

(che è supportata)

con

https://hub.docker.com/r/discourse/discourse_dev/tags

Non c’è una versione arm64 elencata per quest’ultima…

Qualcuno su Mac OS (13.6.3) (Intel) è riuscito a far funzionare Discourse in docker… e può condividere come ha superato l’errore Error: Cannot find module 'esbuild'?

Ho notato che nell’applicazione boot_dev, yarn non viene mai eseguito per la directory di primo livello, solo per app/assets/javascripts/discourse:

echo "Yarn install..."
"${SCRIPTPATH}/exec" yarn install --cwd app/assets/javascripts/discourse

Pertanto, ha senso che esbuild non sia installato, poiché si tratta di una dipendenza descritta nel package.json di primo livello.

Tuttavia, questo package.json non può essere installato al di fuori del container, poiché verrà installata la versione errata di esbuild (Mac, non Linux… ma il container necessita di Linux).

Non dovrebbe esserci una riga in boot_dev appena sopra “installing gems” che assomigli a questa?

echo "Installing top-level package.json ..."
"${SCRIPTPATH}/exec" yarn install

Quando aggiungo una riga simile, posso superare il passaggio delle migrazioni senza un errore esbuild…

È stato risolto? Ho installato e avviato, ma il giorno dopo, quando sono tornato e ho eseguito d/boot_dev, ho ricevuto questo avviso e non riesco più a creare il mio container.

Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
Using source in: /Users/n_selvidge/discourse
Using data in:   /Users/n_selvidge/discourse/data/postgres```
1 Mi Piace

Come installare discourse development tramite http_proxy?

Contatta il provider proxy e assicurati che queste chiamate siano consentite?

Ho ricevuto lo stesso errore durante l’esecuzione di d/rails s,

/home/discourse/.bundle/gems/ruby/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/connection_adapters/postgresql_adapter.rb:87:in `rescue in new_client': connection to server at "10.169.51.142", port 5432 failed: Connection refused (ActiveRecord::ConnectionNotEstablished)
	Is the server running on that host and accepting TCP/IP connections?

Qualsiasi aiuto è apprezzato!

d/rails s restituisce:
Errore nella risposta dal demone: Nessun container trovato: discourse_dev

Suggerimenti?

1 Mi Piace

Hai eseguito prima d/boot_dev?

1 Mi Piace

Ciao, posso farlo associare a 0.0.0.0 invece?

image

Sì, l’ho inserito, grazie. Per ricominciare, presumo che eliminerò il container dalla GUI di Docker e anche la cartella del repository di discourse?