Installa Discourse per lo sviluppo usando Docker

Sviluppo con Docker

Poiché Discourse viene eseguito in Docker, dovresti essere in grado di eseguire Discourse direttamente dalla tua directory di origine utilizzando un container di sviluppo Discourse.

:white_check_mark: Vantaggi: Nessuna necessità di installare dipendenze di sistema, nessuna configurazione richiesta per configurare rapidamente un ambiente di sviluppo.

:x: Svantaggi: Sarà leggermente più lento dell’ambiente di sviluppo nativo su Ubuntu e molto più lento di un’installazione nativa su MacOS.

Vedi anche Developing Discourse using a Dev Container

Passo 1: Installare Docker

Ubuntu

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

19.10

sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot

Windows WSL: Ubuntu

È possibile eseguire i comandi precedenti all’interno di WSL, ma è necessario che tutti i file si trovino all’interno del file system WSL. Ad esempio, funziona bene se si trova all’interno di ~/discourse, ma fallisce se è posizionato all’interno di /mnt/c/discourse.

MacOS

:warning: L’immagine docker di sviluppo di Discourse è disponibile solo per architetture x86_64. Le Macchine M1 sono in grado di avviare l’immagine utilizzando l’emulazione dell’architettura, ma è improbabile che Discourse si avvii a causa della mancanza di supporto inotify in QEMU.

Invece, dovresti usare Install Discourse on macOS for development

Opzione 1: Scaricare un .dmg pacchettizzato dal Docker store
Opzione 2: brew install docker

Passo 2: Avviare il Container

Clonare il repository Discourse sul dispositivo locale.

git clone https://github.com/discourse/discourse.git
cd discourse

(dalla radice della sorgente)

d/boot_dev --init
    # attendi mentre:
    #   - le dipendenze vengono installate,
    #   - il database viene migrato, e
    #   - viene creato un utente admin (dovrai interagire con questo)

# In un terminale:
d/rails s

# E in un terminale separato
d/ember-cli

…quindi apri un browser su http://localhost:4200 e voilà!, dovresti vedere Discourse.

Collegamenti simbolici dei Plugin

Il flusso di sviluppo Docker supporta i collegamenti simbolici sotto la directory plugins/, con la seguente avvertenza:

Ogni volta che viene creato un nuovo collegamento simbolico di plugin, il container Docker deve essere riavviato con:

d/shutdown_dev; d/boot_dev

Note:

  • Per testare le email, esegui MailHog:

    d/mailhog
    
  • Se mancano delle gem, esegui:

    d/bundle install
    
  • Se è necessaria una migrazione del db:

    d/rake db:migrate RAILS_ENV=development
    
  • Quando hai finito, puoi scegliere di terminare il container Docker con:

    d/shutdown_dev
    
  • I dati vengono mantenuti tra le invocazioni del container nella directory tmp/postgres della tua radice di origine. Se per qualsiasi motivo desideri reimpostare il tuo database, esegui:

    sudo rm -fr data
    
  • Se vedi errori come “permission denied while trying to connect to Docker”, esegui:

    run `sudo usermod -aG docker ${USER}`
    sudo service docker restart
    
  • Se desideri esporre globalmente le porte dal container alla rete (impostazione predefinita su off) usa:

    d/boot_dev -p
    
  • Il Dockerfile proviene da discourse/discourse_docker su GitHub, in particolare image/discourse_dev.

Esecuzione dei Test

d/rake autospec

Per eseguire test di plugin specifici, puoi anche fare qualcosa di simile:

d/rake plugin:spec["discourse-follow"]

O anche qualcosa di simile per essere ancora più specifici:

my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37

Questo documento è controllato tramite versione - suggerisci modifiche su github.

72 Mi Piace
Using a launcher built docker image in docker-compose
IDE and comfortable DEV environment for newbies
Docker install on MacOS
How to install Discourse locally?
Installing Discourse for macOS Development Using asdf and docker-compose
Discourse developement environment setup
Discourse on local pc
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
How to Install Discourse on LocalHost in Windows?
Unicode (Russian) username validation fails randomly
Qunit in Docker
Is it possible to use a local plugin directory with a docker install?
Is it possible to use a local plugin directory with a docker install?
Problem with development on Windows with Docker and mounted volume
[Resolved] Recent change breaks connectivity in Docker (+ non-Docker)
How might we better structure #howto?
Apple M1 for discourse development
How to open via internal IP?
Fast, efficient plugin development with Docker dev install (Windows WSL2)
How do I install a stable version of Discourse on Docker locally?
Backup fails on localhost with docker
How do I install a stable version of Discourse on Docker locally?
Problems with understanding the development of Discourse
Need to create custom static page as home page
Docker new licensing
Install Discourse Docker on Ubuntu 11
Backup restore failing on clean dev docker env: FATAL: Peer authentication failed for user “postgres”
Install Discourse on macOS for development
Can't build Discourse on Ubuntu 20.10
Installing discourse for development is failing
Create, download, and restore a backup of your Discourse database
Set up a local Discourse Development Environment?
How do you install Discourse using Windows 10 Docker Desktop?
NoMethodError: undefined method `min_tags_from_required_group'
Install plugins in your non-Docker development environment
NoMethodError: undefined method `min_tags_from_required_group'
Error installing `bullseye-backports` when trying to install for Development
What I should do for migration from Cusdis to Discourse
Migrate a MyBB forum to Discourse
Local installation internal use only
Maintaining an up-to-date development environment
PG::UndefinedTable: ERROR: relation "pg_range" does not exist
Docker-compose.yml to run discourse locally
Allow subscription of predetermined length
Cannot load any images “Uncaught (in promise) no-response: no-response”
Discovery document is missing
What are the benefits of a dev environment?
Installing Discourse on windows using Docker Desktop
'Arrive at topic' info missing from email when re-sending invites
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
How to troubleshoot database errors in an outdated plugin?
Error when building: discourse does not support compiling scss/sass files via sprockets
Integration into custom auth system where emails are not unique?
Installer un environnement developpement discourse sur windows
Contributing to Discourse development
Install Discourse on Ubuntu or Debian for Development
There was an error while trying to write to `/src/Gemfile.lock`. It is likely that you need to grant write permissions for that path
Tags rearranged, triggering an extra edit
Ember addons are resolving as incorrect peer dependencies. -- fixed by removing "content-tag@3.1.0": "patches/content-tag@3.1.0.patch",
Trying to install Discourse on portainer but it's not pulling the base container
Developing Discourse using a Dev Container
Subscribe to post an ad
Postgres doesn't seem to be running when running Discourse locally using Docker
Discourse OpenID Connect (OIDC)
How can I install Discourse on Windows? Getting restarting (100) error
Dev environment: recommended way to bootstrap the first admin account without email?
Dev environment: recommended way to bootstrap the first admin account without email?
Total newbie struggling to preview the signup modal with my test theme, what am I missing?
Configure Discourse to use a separate PostgreSQL server
Installing discourse follow plugin in development (boot_dev) setup — no app.yml file
Discourse API developers docker-compose basic image
Which is the better option to self-host?
Using a launcher built docker image in docker-compose
Without any coding knowledge, is it possible to install and maintain Discourse?
I want to install a plugin for development, what should I do?
Can't uninstall on Ubuntu 18.04
Developing Discourse using a Dev Container
Using a launcher built docker image in docker-compose
Bundle install fails after adding gem "mysql2" and gem "reverse_markdown"
Issue in setup discourse on ubuntu server
`script/osx_dev` script is pretty broken
Can't set up dev environment due to cppjieba_rb failing to install
I want to install a plugin for development, what should I do?
Stuck in infinite loop in Mac terminal after source ~/.bashrc
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install Discourse for Development using Docker is Failed
OAuth2 and Microsoft ADFS
Migrate a phpBB3 forum to Discourse
Availability of OpenID Connect in hosted plans
Can't set up dev environment due to cppjieba_rb failing to install
Adding command line tools support for user api keys
Adding command line tools support for user api keys
Discourse redirects to the OAuth server after loading `/?authComplete=true`
Hello from Gitpod! (installing on google cloud + automated dev setup)

È davvero facile da configurare! Grazie.

Sono però sorpreso da quanto sia lenta l’installazione locale. C’è un modo per modificare in qualche modo le specifiche del contenitore? Mi aspettavo un rallentamento, ma forse non così drastico…

Grazie ancora.

7 Mi Piace

Sto cercando di usare Docker su Windows 10 e ho una domanda riguardo alla guida. Ho installato Docker e riesco a eseguire un contenitore Ubuntu (con praticamente nulla installato al suo interno). Questa guida Docker dice semplicemente di clonare il repository come passo successivo, ma non posso farlo poiché il contenitore non ha git installato.

A questo punto, dovrei semplicemente seguire la Guida per Ubuntu e installare tutti i prerequisiti nel contenitore? Oppure dovrei usare l’immagine discourse_dev menzionata su Github? Sembra che questa guida salti molti passaggi, ma non ho mai usato Docker prima, quindi forse mi sto perdendo qualcosa.

4 Mi Piace

Credo che il problema sia che stai cercando di clonare il repository all’interno del contenitore, mentre il comando git clone va eseguito sulla tua macchina. Quindi, se hai già git installato localmente, sei quasi riuscito a farlo funzionare.

3 Mi Piace

In realtà l’ho fatto per primo, il che è positivo. Quindi ho già una copia del repository sulla mia macchina locale.

Ho automaticamente accesso al file system del mio host dal contenitore Docker? Credo di essere stato in parte confuso da d/boot_dev --init perché non sapevo cosa significasse la parte d/ (ad esempio, non vedo una cartella chiamata d nel repository, anche se vedo boot_dev).

3 Mi Piace

Il file d si trova nel repository (scorri più in basso) — non è una cartella, ma un collegamento simbolico a bin/docker. Dovresti ottenerlo se esegui il git clone.

Non ho utilizzato personalmente questa configurazione in modo estensivo, ma la mia comprensione è che modifichi i file sorgente direttamente nel filesystem dell’host (che hai appena clonato) e i container Docker lo montano ed eseguono da lì. Gli script d/* si occuperanno della maggior parte delle operazioni di configurazione di Docker per te.

6 Mi Piace

Grazie per l’informazione. Non mi era nemmeno venuto in mente di guardare oltre le cartelle. Credo di avere abbastanza informazioni per fare un’altra passata su questo.

3 Mi Piace

Sto ancora sbagliando qualcosa. Tra questo argomento, qui e qui, non viene mai specificato quale comando docker eseguire. Mi sono fermato a docker run -ti -v LocalRepoPath:/src discourse/discourse_dev, che ha inizializzato un sacco di cose e sembra aver montato il repository su /src. Ma per qualche motivo non riesco a eseguire d/boot_dev --init. Anche solo eseguendo ls nella directory principale del repository mi restituisce:

ls: impossibile accedere a 'adminjs': Errore di input/output
ls: impossibile accedere a 'd': Errore di input/output
ls: impossibile accedere a 'jsapp': Errore di input/output

Qualcuno sa cosa sta succedendo?

3 Mi Piace

Potresti star complicando troppo la questione: il tutorial nel primo post contiene già tutto il necessario per iniziare.

I comandi d/* eseguiranno automaticamente tutte le operazioni Docker, così non dovrai farlo tu. Una volta clonato il repository, i comandi d/boot_dev --init e d/unicorn (da eseguire sulla macchina host) dovrebbero essere sufficienti per far funzionare http://localhost:9292. Questi script chiameranno Docker per generare e avviare il container per te. Il comando d/shutdown_dev lo fermerà.

Se ricevi quegli errori mentre navighi tra i file del repository sulla macchina host, sembra esserci un problema con il tuo filesystem. Forse hai esaurito lo spazio su disco?

4 Mi Piace

sospiro, capisco. Pensavo che dovessero essere eseguiti dentro Docker. Detto questo, d/boot_dev --init apparentemente non funziona su Windows in PowerShell (il che, immagino, spieghi perché questa guida su Docker menziona solo host Mac e Ubuntu). Ho provato a eseguire il comando nel mio sottosistema Linux (v1), ma ovviamente fallisce al passaggio di Docker, dato che ho installato Docker su Windows e non nel sottosistema Linux.


Successivamente ho provato a eseguirlo in Git Bash per Windows. Non sono riuscito a eseguire d/boot_dev --init (errore “d/boot_dev: Is a directory”), ma sono riuscito a eseguire bin/docker/boot_dev --init. Questo è andato molto più avanti, effettuando numerosi download, ma poi è fallito con:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: Error response from daemon: Mount denied:
The source path “PathToRepo/data/postgres;C”
doesn’t exist and is not known to Docker.

Sono riuscito a superare quel problema (credo) escapando il percorso del mount, come descritto qui: https://stackoverflow.com/questions/50608301/docker-mounted-volume-adds-c-to-end-of-windows-path-when-translating-from-linux

Dopo di ciò ho ottenuto questo errore:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused “exec: "C:/Program Files/Git/sbin/boot": stat C:/Program Files/Git/sbin/boot: no such file or directory”: unknown.

C:/Program Files/Git/sbin/boot non esiste nel mio file system, quindi immagino che l’errore non sia sorprendente. L’unica cosa che menziona sbin/boot nel file boot_dev è questa parte del comando Docker: discourse/discourse_dev:release /sbin/boot.

E per ora è più o meno tutto… non ho davvero idea di cosa provare in questo momento.

3 Mi Piace

Temo che sia tutto ciò che posso fare per aiutarti, dato che non conosco Windows.

Forse @rishabh può confermare se dovrebbe funzionare anche su Windows e aggiornare eventuali passaggi mancanti per tale sistema (o aggiungere una nota se non funziona).

3 Mi Piace

@sam, quello che sto cercando di fare è davvero un modo remotamente supportato per eseguire Discourse per lo sviluppo? Nel thread di sviluppo per Windows hai menzionato di averci provato, ma finora non è andato molto bene. I container Ubuntu di base (non specifici di Discourse) funzionano tecnicamente, ma non i comandi specifici nell’OP di questo thread.

Mi avevi inizialmente detto questo:

Quindi, a meno che tu non abbia un suggerimento per aiutarmi a superare i problemi che sto riscontrando con Docker su Windows, è probabilmente meglio per me tagliare le perdite ed eseguirlo in una VM Ubuntu utilizzando qualcosa come VirtualBox.

2 Mi Piace

Molti di noi sono nel ring lento senza alcun problema. I giochi funzionano, Steam funziona, tutto funziona.

Capisco la preoccupazione, ma davvero non è una questione così grave. Comunque, se questa situazione ti spaventa troppo, ti consiglio una macchina virtuale tradizionale come Hyper-V o VirtualBox. Installa Docker al suo interno e utilizza la nostra configurazione di sviluppo Docker.

6 Mi Piace

Se questo non fosse il mio computer principale (e unico), mi unirei a voi nel ring lento, ma non posso permettermi di rischiare. Quindi opterò per una VM tradizionale con Docker. Grazie ancora per il consiglio. Spero di avere qualcosa in funzione a breve.

Quanto spazio su disco e quanta RAM sarebbero sufficienti da allocare alla VM? Stavo pensando forse a 16 GB di spazio su disco e 4 GB di RAM, ma volevo prima verificare.

1 Mi Piace

Probabilmente sarebbe sufficiente, il modo migliore per trovare la ricetta ideale è sperimentare

6 Mi Piace

Ok, sto per riuscire a farlo funzionare davvero. Ho un’istanza locale in esecuzione tramite Docker su una VM Ubuntu. Immagino di dover eseguire d/boot_dev --init solo la prima volta e, dopo, limitarmi a eseguire d/boot_dev. È corretto? Il motivo per cui chiedo è che d/unicorn funziona se includo --init, ma non funziona se ometto --init da d/boot_dev. Quando non riesce ad avviarsi, ottengo l’errore:

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

Ma poi l’esecuzione di bundle install fallisce con:

actionview_precompiler-0.2.2 requires ruby version >= 2.6, which is incompatible with the current version, ruby 2.5.1p57

C’è una versione specifica di Ruby a cui dovrei aggiornarmi? O c’è qualcos’altro che sta succedendo?


La mia VM è Ubuntu 18.04 (LTS) e questa volta sono riuscito a seguire direttamente le istruzioni dell’OP, quindi non sono sicuro di dove possa aver sbagliato (se c’è qualcosa che non va).

2 Mi Piace

Non dovresti usare bundle install, dovresti usare d/bundle install. Vuoi installare il bundle all’interno del contenitore; la VM non ha bisogno di Ruby.

4 Mi Piace

Sì, avevo il presentimento che fosse così, non sapevo solo qual fosse il modo corretto per eseguirlo nel container. Grazie ancora per l’aiuto!

2 Mi Piace

Ho scaricato l’ultima versione del repository e, come al solito, d/unicorn mi dice: “Esegui bundle install per installare i gem mancanti.”. Tuttavia, questa volta quando eseguo d/bundle install ottengo quanto segue:

Fetching source index from https://rubygems.org/

Riprova del fetcher a causa dell’errore (2/4): Bundler::HTTPError Impossibile recuperare le specifiche da https://rubygems.org/

Riprova del fetcher a causa dell’errore (3/4): Bundler::HTTPError Impossibile recuperare le specifiche da https://rubygems.org/

Riprova del fetcher a causa dell’errore (4/4): Bundler::HTTPError Impossibile recuperare le specifiche da https://rubygems.org/

Impossibile recuperare le specifiche da https://rubygems.org/

Quindi al momento non riesco effettivamente ad eseguire Discourse. Non ho idea se questo sia correlato al pull (direttamente o indirettamente) o se si tratti di qualcosa di completamente estraneo. Cercare l’errore su Google non è stato particolarmente utile, quindi non so come procedere.

1 Mi Piace

Sei riuscito a raggiungere rubygems.org?

1 Mi Piace