Quindi ho usato la documentazione di installazione standard e sembra che tutto sia andato bene. Ho poi modificato app.yml per cambiare le porte utilizzate, ho commentato LetsEncrypt e ho ricompilato. Sembra che tutto sia andato bene.
Ma quando provo a connettermi con il metodo più diretto:
Ok, quindi ho aperto l’app e installato lynx all’interno del Docker di Discord, e riesco a visualizzare la pagina di benvenuto! Quindi l’installazione funziona, il problema è il mappatura della rete dal Docker verso il server.
Ecco l’output di #docker ps:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6d0209e4e72 local_discourse/app "/sbin/boot" 51 minuti fa Up 51 minuti 127.0.0.1:8880->80/tcp, 127.0.0.1:4443->443/tcp app
…e qui ci sono le informazioni di app.yml:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
expose:
- "127.0.0.1:8880:80" # http
- "127.0.0.1:4443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
db_shared_buffers: "2048MB"
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
UNICORN_WORKERS: 8
DISCOURSE_HOSTNAME: [redacted]
DISCOURSE_SMTP_ADDRESS: [redacted]
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [redacted]
DISCOURSE_SMTP_PASSWORD: "[redacted]"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opzionale, default true)
DISCOURSE_SMTP_DOMAIN: [redacted]
DISCOURSE_NOTIFICATION_EMAIL: [redacted]
## Il container Docker è stateless; 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
## vedi 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"
- exec: echo "Fine dei comandi personalizzati"
Ah, ora capisco cosa ho fatto. La configurazione 8880:80 funziona bene, stavo solo testando il lato 4443:443. Non ha funzionato a causa di un errore relativo al certificato. Intendo installare e gestire il certificato a livello di server web nel virtual host. Una volta risolto tutto, pubblicherò la soluzione finale per chi fosse interessato.
Installazione dell’ambiente
Hestia Control Panel (per la gestione del server)
Apache2 (web server)
Discourse in Docker con reverse proxy verso Apache2
Let’sEncrypt non dietro reverse proxy, ma gestito da Hestia nella directory www_root
Configurare i socket Unix in app.yml (e ricostruire):
- "templates/web.socketed.template.yml"
Rimuovere il mapping delle porte e Let’sEncrypt da app.yml (e ricostruire)
Creare template alternativi di apache2.conf per HestiaCP come segue (per chi non utilizza HestiaCP, notate che i tag %{replace}% sono piuttosto standard e ovvi se si esamina qualsiasi altro file apache2.conf. Le parti più importanti non utilizzano molti tag %{replace}%. Si noti inoltre che il termine standalone potrebbe essere socket-only a seconda della configurazione. Verificare il contenuto della directory /var/discourse/shared/ se non si ricorda.
{Custom Template}.stpl
<VirtualHost %ip%:%web_ssl_port%>
ServerName %domain_idn%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ServerAdmin %email%
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
SSLRequireSSL
Options +Includes -Indexes +ExecCGI
</Directory>
SSLEngine on
SSLVerifyClient none
SSLCertificateFile %ssl_crt%
SSLCertificateKeyFile %ssl_key%
%ssl_ca_str%SSLCertificateChainFile %ssl_ca%
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.ssl.conf_*
</VirtualHost>
{Custom Template}.tpl
<VirtualHost %ip%:%web_port%>
ServerName %domain_idn%
%alias_string%
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/standalone/nginx.http.sock|http://localhost/
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.well-known/acme-challenge
RewriteRule ^(.*) https://%domain_idn%/$1 [R=301,L]
Alias /vstats/ %home%/%user%/web/%domain%/stats/
Alias /error/ %home%/%user%/web/%domain%/document_errors/
CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes
CustomLog /var/log/%web_system%/domains/%domain%.log combined
ErrorLog /var/log/%web_system%/domains/%domain%.error.log
<Directory %home%/%user%/web/%domain%/stats>
AllowOverride All
</Directory>
<Directory %sdocroot%>
AllowOverride All
Options +Includes -Indexes +ExecCGI
</Directory>
IncludeOptional %home%/%user%/conf/web/%domain%/%web_system%.conf_*
</VirtualHost>