Ci sono più siti Web sul mio server esistente, PostgreSQL (in Docker) e Redis (anch’esso in Docker). Vorrei riutilizzare Postgres e Redis esistenti con Discourse.
Ecco il mio containers/app.yml da Discourse:
templates:
# - "templates/postgres.template.yml"
#- "templates/redis.template.yml"
- "templates/web.template.yml"
## Uncomment the next line to enable the IPv6 listener
#- "templates/web.ipv6.template.yml"
- "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
- "templates/web.socketed.template.yml" # Added
extra_hosts:
- "host.docker.internal:host-gateway"
expose:
- "8881:80" # http
# - "443:443" # https
env:
DISCOURSE_DB_NAME: discourse
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_HOST: host.docker.internal
DISCOURSE_DB_PASSWORD: XXXXXXXXXXX
DISCOURSE_REDIS_HOST: host.docker.internal
DISCOURSE_REDIS_PORT: 6379
Altri siti Web vengono eseguiti senza docker e sono in grado di connettersi correttamente a Redis e PostgreSQL tramite localhost. Ecco il file docker-compose di postgres/redis:
version: "1.0"
services:
postgres:
container_name: postgres_db
build: postgres_th
# some settings were removed, to make file shorter for this example
ports:
- "5432:5432"
restart: unless-stopped
networks:
- main_network
redis:
container_name: redis
image: redis:7.2.1
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
restart: unless-stopped
networks:
- main_network
networks:
main_network:
external: true
Quando provo a creare l’immagine Docker di Discourse, ricevo il seguente errore:
./launcher rebuild app
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 358 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
Ho trovato una soluzione qui Configure Discourse to use a separate PostgreSQL server per usare docker con la rete host.
./launcher rebuild app --docker-args --net=host --skip-mac-address
e impostando DISCOURSE_DB_HOST su localhost
in questo caso tutto funziona bene, l’unico problema rimane che l’immagine Discourse viene eseguita senza porta esposta perché utilizza la rete host invece del bridge.
C’è un modo per connettersi a un server Postgres esterno in qualche modo senza impostare l’immagine Docker di Discourse per utilizzare la rete host? Come soluzione alternativa, se utilizzo la rete host, come posso connettere nginx esterno (che viene eseguito sullo stesso server ma senza Docker) a nginx all’interno dell’immagine Docker di Discourse?