Saluti,
Ho utilizzato questo post come guida per configurare Discourse in modo che funzioni con Traefik. Ho già configurato Traefik per un’altra applicazione web.
Quando visito forum.private.com, ricevo un errore “404 pagina non trovata”.
Sembra che qualcosa stia funzionando, perché nella dashboard di Traefik, nella scheda Servizi, vedo discourse@docker e discourse_secure@docker.
Tuttavia, nella scheda Router non c’è nulla relativo a Discourse.
Le modifiche apportate al file app.yml sono riportate qui di seguito, basate in gran parte sul post collegato sopra. Ho aggiunto una porta esposta negli argomenti Docker alla fine, il che sembra aver reso visibili i servizi menzionati. Apprezzerei qualsiasi aiuto!
Traefik docker-compose
version: "3.3"
services:
################################################
#### Impostazione Proxy Traefik #####
###############################################
traefik:
image: traefik:v2.0
restart: always
container_name: traefik
ports:
- "80:80" # <== http
- "8080:8080" # <== :8080 è dove viene eseguito la dashboard
- "443:443" # <== https
command:
#### Questi sono i comandi CLI che configureranno Traefik e gli diranno come funzionare! ####
- --api.insecure=true # <== Abilitazione API non sicura, NON CONSIGLIATA PER LA PRODUZIONE
- --api.dashboard=true # <== Abilitazione della dashboard per visualizzare servizi, middleware, router, ecc...
- --api.debug=true # <== Abilitazione di endpoint aggiuntivi per il debug e il profiling
## Impostazioni Registro (opzioni: ERROR, DEBUG, PANIC, FATAL, WARN, INFO) - https://docs.traefik.io/observability/logs/ ##
- --log.level=DEBUG # <== Impostazione del livello dei log da Traefik
## Impostazioni Provider - https://docs.traefik.io/providers/docker/#provider-configuration ##
- --providers.docker=true # <== Abilitazione di Docker come provider per Traefik
- --providers.docker.exposedbydefault=false # <== Non esporre ogni contenitore a Traefik, esporre solo quelli abilitati
- --providers.file.filename=/dynamic.yaml # <== Riferimento a un file di configurazione dinamico
- --providers.docker.network=web # <== Operare sulla rete Docker denominata web
## Impostazioni Point di ingresso - https://docs.traefik.io/routing/entrypoints/#configuration ##
- --entrypoints.web.address=:80 # <== Definizione di un punto di ingresso per la porta :80 denominata web
- --entrypoints.web-secured.address=:443 # <== Definizione di un punto di ingresso per https sulla porta :443 denominata web-secured
## Impostazioni Certificati (Let's Encrypt) - https://docs.traefik.io/https/acme/#configuration-examples ##
- --certificatesresolvers.mytlschallenge.acme.tlschallenge=true # <== Abilitazione TLS-ALPN-01 per generare e rinnovare certificati ACME
- --certificatesresolvers.mytlschallenge.acme.email=private@private.com # <== Impostazione email per i certificati
- --certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json # <== Definizione del file ACME per memorizzare le informazioni sui certificati
volumes:
- ./letsencrypt:/letsencrypt # <== Volume per i certificati (TLS)
- /var/run/docker.sock:/var/run/docker.sock # <== Volume per l'amministrazione Docker
- ./dynamic.yaml:/dynamic.yaml # <== Volume per il file di configurazione dinamico, **rif: riga 27
networks:
- web # <== Posizionamento di Traefik sulla rete denominata web, per accedere ai contenitori su questa rete
labels:
#### I label definiscono il comportamento e le regole del proxy Traefik per questo contenitore ####
- "traefik.enable=true" # <== Abilitazione di Traefik su se stesso per visualizzare la dashboard e assegnare un sottodominio per visualizzarla
- "traefik.http.routers.api.rule=Host(`monitor.private.com`)" # <== Impostazione del dominio per la dashboard
- "traefik.http.routers.api.service=api@internal" # <== Abilitazione dell'API come servizio accessibile
networks:
web:
external: true
backend:
external: false
volumes:
db_data: {}
wordpress:
external: true
db:
external: true
Discourse app.yml
## questo è il template del contenitore Docker Discourse standalone all-in-one
##
## Dopo aver apportato modifiche a questo file, DOVETE ricostruire
## /var/discourse/launcher rebuild app
##
## SIATE *MOLTO* CAUTI DURANTE LA MODIFICA!
## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI NELLO SPAZIO O NELL'ALLINEAMENTO!
## visitate http://www.yamllint.com/ per convalidare questo file quando necessario
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Scommentate queste due righe se desiderate aggiungere Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
# "templates/web.letsencrypt.ssl.template.yml"
## quali porte TCP/IP dovrebbe esporre questo contenitore?
## Se desiderate che Discourse condivida una porta con un altro server web come Apache o nginx,
## consultate https://meta.discourse.org/t/17247 per i dettagli
expose:
#- "80:80" # http
#- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Impostate db_shared_buffers a un massimo del 25% della memoria totale.
## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, oppure potete sovrascriverlo
db_shared_buffers: "128MB"
## può migliorare le prestazioni di ordinamento, ma aumenta l'uso di memoria per connessione
#db_work_mem: "40MB"
## Quale revisione Git dovrebbe utilizzare questo contenitore? (predefinito: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Quante richieste web simultanee sono supportate? Dipende dalla memoria e dai core della CPU.
## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, oppure potete sovrascriverlo
UNICORN_WORKERS: 2
## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
## Obbligatorio. Discourse non funzionerà con un semplice numero IP.
DISCOURSE_HOSTNAME: forum.private.com
## Scommentate se desiderate che il contenitore venga avviato con lo stesso
## nome di host (-h option) specificato sopra (predefinito "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
## al primo esempio di registrazione 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'private@private.com'
## TODO: Il server SMTP utilizzato per validare nuovi account e inviare notifiche
## INDIRIZZO SMTP, nome utente e password sono obbligatori
# ATTENZIONE: il carattere '#' nella password SMTP può causare problemi!
DISCOURSE_SMTP_ADDRESS: in-v3.mailjet.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: "redacted"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opzionale, predefinito true)
## Se avete aggiunto il template Lets Encrypt, scommentate qui sotto per ottenere un certificato SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: private@private.com
## L'indirizzo http o https CDN per questa istanza di Discourse (configurato per il recupero)
## consultate https://meta.discourse.org/t/14857 per i dettagli
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## Il contenitore Docker è senza stato; tutti i dati sono archiviati in /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## I plugin vanno qui
## consultate https://meta.discourse.org/t/19157 per i dettagli
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## Qualsiasi comando personalizzato da eseguire dopo la costruzione
run:
- exec: echo "Inizio dei comandi personalizzati"
## Se desiderate impostare l'indirizzo email 'From' per la vostra prima registrazione, scommentate e modificate:
## Dopo aver ricevuto la prima email di registrazione, riscommentate la riga. Deve essere eseguita solo una volta.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Fine dei comandi personalizzati"
labels:
app_name: discourse
#----Label Traefik------------------------
traefik.enable: true
traefik.docker.network: web
#---SEZIONE ROUTER HTTP-------------------
traefik.http.routers.discourse.rule: Host(`forum.private.com`)
#--SEZIONE HTTP--------------------------
traefik.http.routers.discourse.entrypoints: web
traefik.http.routers.discourse.middlewares: discourse_redirect2https
traefik.http.services.discourse.loadbalancer.server.port: 80
#---SEZIONE ROUTER HTTPS
traefik.http.routers.discourse_secure.rule: Host(`forum.private.com`)
#--SEZIONE HTTPS
traefik.http.routers.discourse_secure.entrypoints: web-secured
traefik.http.services.discourse_secure.loadbalancer.server.port: 80
#--SEZIONE TLS
traefik.http.routers.discourse_secure.tls.certresolver: tlsChallenge_letsencrypt
#---SEZIONE MIDDLEWARE reindirizza http a https
traefik.http.middlewares.discourse_redirect2https.redirectscheme.scheme: https
docker_args:
- "--network=web"
- "--expose=80"
Grazie