Dopo molte ricerche e tentativi, ho scoperto che Docker Desktop su Linux sta causando i problemi di autorizzazione.
L’applicazione Discourse nel container Docker viene eseguita come utente non root, ovvero l’utente discourse. Ma come scritto ad esempio qui e qui:
Docker Desktop su Linux esegue una macchina virtuale e i container verranno eseguiti all’interno di quella macchina virtuale. In tal caso, non è possibile montare la cartella host nello stesso modo nei container, perché è necessario prima montarla nella macchina virtuale.
Quindi, come persona che non è affatto un esperto di Docker, vedo due modi per affrontare questo problema:
(1) Abbandonare Docker Desktop su Linux ed eseguire Docker nativamente invece
Questa sembra essere la soluzione più sostenibile poiché vedo che il container discourse sembra essere progettato per essere utilizzato in questo modo. Sono solo esitante perché poi devo ricordare tutti i comandi per gestire le mie immagini, i container e le risorse. E, essendo uno sviluppatore frontend, preferirei un’interfaccia utente per gestire le cose. Ma immagino di doverlo affrontare come un investimento per imparare di più su Docker.
OPPURE
(2) Modificare la proprietà delle cartelle montate nel container
Sono riuscito a far funzionare questo approccio ed eseguire con successo Discourse localmente da Docker Desktop, tuttavia vedo un sacco di avvisi nel terminale e quindi non sono sicuro di quanto sia sostenibile questa soluzione a lungo termine.
Questo comporta diversi passaggi:
Passaggio 1: Clonare il repository
$ git clone https://github.com/discourse/discourse.git
$ cd discourse
Passaggio 2: Inizializzare il container
Dall’interno della cartella discourse clonata sulla macchina host, eseguire:
$ d/boot_dev
Cosa fa? Vedi qui.
Importante: ometti il flag --init in modo che non venga fatto nulla dopo la creazione del container.
Passaggio 3: Modificare la proprietà delle cartelle
L’utente discourse all’interno del container docker ha l’id 1000. Questa guida presuppone che anche l’utente della tua macchina host abbia lo stesso id. Potrebbe non causare problemi se l’utente della tua macchina host ha un id diverso, ma non posso testarlo e quindi non posso pronunciarmi su questa situazione. Puoi scoprire il tuo id eseguendo id o echo $UID in un terminale Linux.
Dalla tua macchina host, esegui:
# apri una shell nel container docker
$ d/shell
# dovresti già essere in /src, ma per sicurezza:
$ cd /src
# modifica la proprietà di /src all'utente e gruppo discourse
$ chown 1000:1000 .
# modifica la proprietà di tutti i file e cartelle all'interno di /src all'utente e gruppo discourse (non ricorsivamente)
$ chown 1000:1000 *
# modifica ricorsivamente la proprietà di quasi tutte le sottocartelle all'utente e gruppo discourse
# fondamentalmente tutte le cartelle tranne 'database', perché quella appartiene all'utente e gruppo 'postgres'
$ chown -R 1000:1000 app bin config d db docs documentation images lib log plugins public script spec test vendor
# verifica che abbia funzionato, dovrebbe mostrare ora l'utente e gruppo discourse
$ ls -l
# esci dal container
$ exit
Passaggio 4: Continuare come al solito
Continua a configurare il container e ad avviare Discourse eseguendo quanto segue dalla tua macchina host:
# installa le gemme
$ d/bundle install
# migra il database
$ d/rake db:migrate
$ RAILS_ENV=test d/rake db:migrate
# crea l'utente amministratore
$ d/rake admin:create
# In un terminale:
d/rails s
# E in un terminale separato
d/ember-cli
Nota:
Ho riscontrato alcuni avvisi come questo:
fatal: detected dubious ownership in repository at '/src'
Che deriva dalla virtualizzazione di Docker Desktop su Linux.
Ignora questi avvisi, dalla tua macchina host, esegui:
d/exec git config --global --add safe.directory /src
Perché Docker Desktop per Linux esegue una VM?