He instalado correctamente el sitio 1 y lo he estado ejecutando durante más de un mes. Hoy seguí las instrucciones aquí https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247: he editado la configuración del primer Discourse, instalado un nginx externo en la máquina anfitriona y reconstruido el primer Discourse.
Archivo app.yml del sitio n.º 1
root@docker-s-1vcpu-2gb-sgp1-01:~# cat /var/bbs-antivte-discourse/containers/app.yml
## este es la plantilla de contenedor Docker todo en uno, independiente de Discourse
##
## Después de realizar cambios en este archivo, DEBES reconstruir
## /var/discourse/launcher rebuild app
##
## TEN *MUCHO* CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON EXTREMADAMENTE SENSIBLES A ERRORES EN ESPACIOS EN BLANCO O ALINEACIÓN!
## visita http://www.yamllint.com/ para validar este archivo según sea necesario
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomenta estas dos líneas si deseas agregar Lets Encrypt (https)
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- "templates/web.ratelimited.template.yml"
- "templates/web.socketed.template.yml" # <-- Agregado
## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulta https://meta.discourse.org/t/17247 para obtener detalles
#expose:
# - "80:80" # http
# - "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Establece db_shared_buffers a un máximo del 25% de la memoria total.
## se establecerá automáticamente por bootstrap según la RAM detectada, o puedes sobrescribirlo
db_shared_buffers: "256MB"
## puede mejorar el rendimiento de ordenamiento, pero añade uso de memoria por conexión
#db_work_mem: "40MB"
## ¿Qué revisión de Git debe usar este contenedor? (por defecto: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## ¿Cuántas solicitudes web simultáneas se admiten? Depende de la memoria y los núcleos de CPU.
## se establecerá automáticamente por bootstrap según los CPUs detectados, o puedes sobrescribirlo
UNICORN_WORKERS: 4
## TODO: El nombre de dominio al que responderá esta instancia de Discourse
## Requerido. Discourse no funcionará con una dirección IP sin nombre.
DISCOURSE_HOSTNAME: bbs.antivte.com
## Descomenta si deseas que el contenedor se inicie con el mismo
## nombre de host (opción -h) que se especificó arriba (por defecto "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Lista de correos electrónicos delimitados por comas que serán administradores y desarrolladores
## en el registro inicial, ejemplo 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'techempower@163.com'
## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
## Se requieren dirección, nombre de usuario y contraseña de SMTP
# ADVERTENCIA: el carácter '#' en la contraseña de SMTP puede causar problemas!
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@mail.antivte.com
DISCOURSE_SMTP_PASSWORD: "67c9458eb7a6ff11b4db70f097b1b5c3-f7910792"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, por defecto true)
## Si agregaste la plantilla de Lets Encrypt, descomenta abajo para obtener un certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: techempower@163.com
## La dirección CDN http o https para esta instancia de Discourse (configurada para extraer)
## consulta https://meta.discourse.org/t/14857 para obtener detalles
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## El contenedor Docker es sin estado; todos los datos se almacenan en /shared
volumes:
- volume:
host: /var/bbs-antivte-discourse/shared/standalone
guest: /shared
- volume:
host: /var/bbs-antivte-discourse/shared/standalone/log/var-log
guest: /var/log
## Los plugins van aquí
## consulta https://meta.discourse.org/t/19157 para obtener detalles
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-knowledge-explorer
- git clone https://github.com/discourse/discourse-spoiler-alert.git
- git clone https://github.com/procourse/procourse-static-pages
## Cualquier comando personalizado para ejecutar después de la construcción
run:
- exec: echo "Inicio de comandos personalizados"
## Si deseas establecer la dirección de correo electrónico 'De' para tu primer registro, descomenta y cambia:
## Después de recibir el primer correo de registro, vuelve a comentar la línea. Solo necesita ejecutarse una vez.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Fin de comandos personalizados"
Luego, para la instalación del segundo sitio, cloné el código fuente en otro directorio, copié el archivo app.yml editado del primero y solo edité el dominio y el nombre del directorio clonado para mi segundo sitio, y luego ejecuté https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md
./discourse-setup
Me confundí con los siguientes mensajes y tengo dos configuraciones nginx diferentes para los 2 sitios
Configuración nginx del sitio n.º 1
root@docker-s-1vcpu-2gb-sgp1-01:~# cat /var/website/conf/conf.d/ytb.antivte.com
server {
listen 80; listen [::]:80;
server_name ytb.antivte.com; # <-- cambia esto
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name ytb.antivte.com; # <-- cambia esto
# ssl on;
ssl_certificate /var/ytb-antivte-discourse/shared/standalone/ssl/ssl.crt;
ssl_certificate_key /var/ytb-antivte-discourse/shared/standalone/ssl/ssl.key;
ssl_dhparam /var/ytb-antivte-discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
http2_idle_timeout 5m; # aumentado desde el valor predeterminado de 3m
location / {
proxy_pass http://unix:/var/ytb-antivte-discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}
Configuración nginx del sitio n.º 2
server {
listen 80; listen [::]:80;
server_name bbs.antivte.com; # <-- cambia esto
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2; listen [::]:443 ssl http2;
server_name bbs.antivte.com; # <-- cambia esto
# ssl on;
ssl_certificate /var/bbs-antivte-discourse/shared/standalone/ssl/bbs.antivte.com.cer;
ssl_certificate_key /var/bbs-antivte-discourse/shared/standalone/ssl/bbs.antivte.com.key;
ssl_dhparam /var/bbs-antivte-discourse/shared/standalone/ssl/dhparams.pem;
ssl_session_tickets off;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
http2_idle_timeout 5m; # aumentado desde el valor predeterminado de 3m
location / {
proxy_pass http://unix:/var/bbs-antivte-discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
}
}
y
/var/ytb-antivte-discourse/discourse-setup
El puerto 80 parece estar ya en uso.
Esto te mostrará qué comando está usando el puerto 80
COMANDO PID USUARIO FD TIPO DISPOSITIVO TAMAÑO/OFF NODO NOMBRE
nginx 4255 root 6u IPv4 22842780 0t0 TCP *:http (ESCUCHANDO)
nginx 4255 root 7u IPv6 22842781 0t0 TCP *:http (ESCUCHANDO)
nginx 4256 nobody 6u IPv4 22842780 0t0 TCP *:http (ESCUCHANDO)
nginx 4256 nobody 7u IPv6 22842781 0t0 TCP *:http (ESCUCHANDO)
Si estás intentando ejecutar Discourse simultáneamente con otro servidor
web como Apache o nginx, necesitarás vincularlo a un puerto diferente
Consulta https://meta.discourse.org/t/17247
Si estás reconfigurando un Discourse ya configurado, usa
./launcher stop app
para detener Discourse antes de reconfigurarlo e intentar de nuevo.