Así que usé la documentación de instalación estándar y todo pareció funcionar correctamente. Luego edité el archivo app.yml para cambiar los puertos utilizados, comenté LetsEncrypt y reconstruí la imagen. Parece que todo salió bien.
Pero cuando intento conectarme mediante el método más directo:
Bien, así que entré en la aplicación e instalé Lynx dentro del contenedor Docker de Discourse, y ¡puedo acceder a la página de bienvenida! Por lo tanto, la instalación funciona; el problema es el mapeo de red desde el interior del contenedor hacia el servidor.
Aquí está la salida de docker ps:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6d0209e4e72 local_discourse/app "/sbin/boot" 51 minutes ago Up 51 minutes 127.0.0.1:8880->80/tcp, 127.0.0.1:4443->443/tcp app
…y aquí está la información de 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 # (opcional, valor por defecto true)
DISCOURSE_SMTP_DOMAIN: [redacted]
DISCOURSE_NOTIFICATION_EMAIL: [redacted]
## El contenedor Docker es sin estado; todos los datos se almacenan en /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Los plugins van aquí
## consulta https://meta.discourse.org/t/19157 para más detalles
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## Cualquier comando personalizado a ejecutar después de la construcción
run:
- exec: echo "Inicio de los comandos personalizados"
- exec: echo "Fin de los comandos personalizados"
Ah, ya veo lo que hice. El 8880:80 funciona bien, solo estaba probando el lado 4443:443. No funcionó porque hay un error de certificado. Mi intención es instalar y gestionar el certificado a nivel de servidor web en el host virtual. Publicaré una solución final para los interesados una vez que lo tenga todo funcionando.
Instalar entorno
Hestia Control Panel (para gestión de servidores)
Apache2 (servidor web)
Discourse en Docker con proxy inverso hacia Apache2
Let’sEncrypt no está detrás del proxy inverso, sino gestionado por Hestia en www_root
Configurar sockets Unix en app.yml (y reconstruir):
- "templates/web.socketed.template.yml"
Eliminar el mapeo de puertos y Let’sEncrypt de app.yml (y reconstruir)
Crear plantillas alternativas de apache2.conf para HestiaCP de la siguiente manera (para quienes no usan HestiaCP, ten en cuenta que las etiquetas %{replace tags}% son bastante estándar y obvias si revisas cualquier otro archivo apache2.conf. Las partes más importantes no utilizan muchas etiquetas %{replace tags}%. También ten en cuenta que el texto standalone podría ser socket-only dependiendo de tu configuración. Revisa qué hay en el directorio /var/discourse/shared/ si no lo recuerdas.
{Plantilla Personalizada}.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>
{Plantilla Personalizada}.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>