🇨🇳 Guía detallada de instalación + panel de control | Instrucciones súper detalladas para instalar discourse + panel de control

Soy un novato en la creación de sitios web. Por afición, quiero montar una comunidad de intercambio técnico. Planeo montar Discourse y compartir este tutorial, esperando que sea útil para quienes necesiten instalar Discourse, evitando errores. Hay pocos tutoriales en chino sobre Discourse, y algunos ya están desactualizados. He pasado varios días investigando, basándome en software de traducción.

Para montar tu propio Discourse, necesitas:

Un servidor ligero de Alibaba Cloud en Hong Kong. Descargar plugins de GitHub en servidores nacionales es como ir a paso de caracol, por lo que recomiendo usar un servidor ligero de Alibaba Cloud en Hong Kong u otro servidor ligero. Los servidores ligeros son más baratos y adecuados para principiantes. La configuración requiere más de 2 GB de RAM, de lo contrario, la instalación fallará. Si necesitas instalar en un servidor nacional, puedes usar un servidor de Hong Kong con pago por uso, luego usar la función de crear imagen en la plataforma y clonarla a un servidor nacional. Esto te ahorrará tiempo de resolución de problemas.

Un dominio corto y fácil de recordar, que se resuelva a la IP del servidor. Recomiendo .com y .net. Otros dominios carecen de reconocimiento. Puedes buscar dominios en Búsqueda masiva de dominios, usando la búsqueda por reglas para encontrar dominios cortos.

Sistema: Ubuntu 20.04, es el más común.

Después de activar un nuevo servidor, primero abre todos los puertos del firewall (después de depurar, cierra los puertos innecesarios según tus necesidades, para evitar ataques de hackers). Configura la contraseña de root en el panel de control, luego conéctate directamente al servidor de forma remota por SSH a través de la web, o descarga un software SSH como XTerminal.

Luego, pega los siguientes tres comandos y presiona Enter para ejecutarlos. Cuando haya opciones, presiona “yes” para actualizar la fuente del sistema e instalar el software git.

apt update
apt upgrade -y
apt install git

Luego, pega los siguientes tres comandos y presiona Enter para ejecutarlos como administrador. Este paso sudo -s si no se opera con cuidado, aparecerán algunos mensajes de creación fallida durante la instalación, lo que provocará un fallo en la instalación, debido a la falta de permisos.

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

Después de descargar, ejecuta el asistente de instalación.

./discourse-setup

Luego, según las indicaciones, ingresa el dominio que deseas vincular. La primera instalación lleva mucho tiempo. Se recomienda rellenar temporalmente cualquier cosa excepto el dominio principal, y luego reconstruir una vez que se complete con éxito. Si no entiendes algo, puedes usar capturas de pantalla y la traducción de imágenes de WeChat. Para el correo electrónico, puedes usar Servicio de correo electrónico de Alibaba Cloud.

Luego aparecerá un mensaje preguntando si continuar la instalación o cancelar con Ctrl+C. Se recomienda continuar la instalación.

Después de completar la instalación, accede al dominio vinculado. Si aparece la página de registro, significa que Discourse se ha instalado correctamente.

Luego, instala un panel de Linux. Este paso es principalmente para instalar otros programas de sitios web y para que los principiantes lo administren de forma sencilla. Comparado con esto, este panel es mucho más simple que Baota, no tiene mucha publicidad y la instalación es muy rápida, solo unos segundos, no como Baota que requiere compilar el entorno durante mucho tiempo.

Ejecuta el siguiente script:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

Durante la instalación, te pedirá que detectes si Docker ya está instalado y luego te mostrará el inicio de sesión en el backend.

Sigue las indicaciones, busca el backend e inicia sesión. En la gestión de contenedores, verás la aplicación, que es Discourse. Puedes iniciarla o detenerla aquí.

Luego, entra en los archivos y edita app.yml. Las partes principales a modificar están comentadas en chino.

## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed

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"

## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Set db_shared_buffers to a max of 25% of the total memory.
  ## will be set automatically by bootstrap based on detected RAM, or you can override
  db_shared_buffers: "128MB"
  ## Modificar el tamaño máximo de carga de archivos adjuntos
  upload_size: 300m
  ## can improve sorting performance, but adds memory usage per-connection
  #db_work_mem: "40MB"

  ## Which Git revision should this container use? (default: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: zh_CN

  ## How many concurrent web requests are supported? Depends on memory and CPU cores.
  ## will be set automatically by bootstrap based on detected CPUs, or you can override
  UNICORN_WORKERS: 2

  ## TODO: The domain name this Discourse instance will respond to
  ## Required. Discourse will not work with a bare IP number.
  ## Modificar el dominio principal
  DISCOURSE_HOSTNAME: bbs.izdh.net

  ## Uncomment if you want the container to be started with the same
  ## hostname (-h option) as specified above (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: List of comma delimited emails that will be made admin and developer
  ## on initial signup example 'user1@example.com,user2@example.com'
  ## Modificar el correo electrónico del administrador
  DISCOURSE_DEVELOPER_EMAILS: 'xxxx@gmail.com'

  ## TODO: The SMTP mail server used to validate new accounts and send notifications
  # SMTP ADDRESS, username, and password are required
  # WARNING the char '#' in SMTP password can cause problems!
  ## Modificar el servidor de correo saliente
  DISCOURSE_SMTP_ADDRESS: smtpdm.aliyun.com
  ## Modificar el puerto del correo saliente
  DISCOURSE_SMTP_PORT: 80
  ## Modificar la cuenta de correo saliente automática
  DISCOURSE_SMTP_USER_NAME: xxxx@xxx.net
  ## Modificar la contraseña del correo saliente
  DISCOURSE_SMTP_PASSWORD: "dj6bCRxoHt25NcD6"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_DOMAIN: smtpdm.aliyun.com
  ## Modificar la cuenta de correo saliente automática
  DISCOURSE_NOTIFICATION_EMAIL: xxxx@xxx.net
  DISCOURSE_SMTP_ENABLE_START_TLS: false
  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## The http or https CDN address for this Discourse instance (configured to pull)
  ## see https://meta.discourse.org/t/14857 for details
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## The maxmind geolocation IP address key for IP address lookup
  ## see https://meta.discourse.org/t/-/137387/23 for details
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
## Instalar 2 plugins
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved	 
          - git clone https://github.com/discourse/discourse-reactions

## Any custom commands to run after building
run:
  - exec: echo "Beginning of custom commands"
  ## If you want to set the 'From' email address for your first registration, uncomment and change:
  ## After getting the first signup email, re-comment the line. It only needs to run once.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

Después de modificar y guardar, vuelve a la terminal, usa el comando o detén el contenedor en el backend y luego reconstruye. Sin embargo, parece que si no instalas este panel, no necesitas detener el contenedor. Si instalas este panel y no detienes el contenedor y reconstruyes directamente, dará un error.

./launcher stop app
./launcher bootstrap app

Espera a que termine la reconstrucción y ejecuta el comando de inicio del contenedor.

./launcher start app

Entra en Discourse. Te pedirá que envíes un correo electrónico para activar. Si no lo recibes, puedes usar el siguiente comando para crear una cuenta de administrador y omitir directamente. Luego, en la configuración de la izquierda, establece el idioma en chino. También hay un lugar para probar el envío de correos electrónicos, que te indicará el motivo del error. Inténtalo varias veces y tendrás éxito.

./launcher enter app
rake admin:create

Si necesitas crear otros sitios web, consulta directamente el tutorial oficial. Es bastante sencillo, así que no lo detallaré. También puedes crear un nuevo entorno en el sitio web, cambiar los permisos del sitio web a 777 y luego instalar varios programas.

El principal problema que se resuelve es que puedes ejecutar varios sitios web en un solo servidor, lo que ahorra costos de compra de servidores y es más adecuado para principiantes.

Más tarde, al probar el envío de correos electrónicos, encontré un problema:

Estas configuraciones del contenedor, al editar app.yml, la reconstrucción no parece tener efecto. Debe modificarse en el entorno del contenedor, pero solo tarda 5-6 segundos en surtir efecto. Aún no está claro si afecta a la instalación de plugins.

La coexistencia con otros sitios web parece ser que primero se crea un proxy inverso, luego se cambia el puerto 443 del contenedor predeterminado a 10443, y luego se configura el certificado para poder acceder normalmente.

Proxy inverso

Configuración del certificado

2 Me gusta

En realidad, discourse_docker se puede clonar en cualquier carpeta, se instalará automáticamente en /var/discourse…

En verdad, la ubicación a la que se clona el repositorio discourse_docker es irrelevante, ya que invariablemente se instalará automáticamente en el directorio /var/discourse…

En teoría, es bastante improbable. El procedimiento correcto sería modificar el archivo app.yml y posteriormente reconstruir la aplicación.

1 me gusta

:sweat_smile: Pero editar el archivo de configuración demostró ser infructuoso, ya que la reconstrucción no tuvo efecto. Sin embargo, modificar las variables de entorno del contenedor funcionó de maravilla en cuestión de segundos, ahorrándome la molestia de reconstruir. El impacto en los plugins sigue siendo incierto por el momento.

Anteriormente, había descuidado ingresar ‘sudo -s’, lo que resultó en una avalancha de mensajes de error. Estaba completamente desconcertado sobre la fuente del problema.

Oiga, buen amigo, ¿sabría cómo un nombre de usuario chino podría utilizar la API? El encabezado, ya ve, no debe contener caracteres chinos.

Vaya, ¿ese es el problema? ¿Podrías compartir los registros conmigo?

El extranjero dijo que era posible, pero por más que lo intenté, simplemente no pude lograrlo… :sweat_smile:

Si es factible, quizás podríamos intentarlo. Quién sabe qué codificación utilizó tu solicitud.

1 me gusta

¡Es asombroso encontrar una publicación en chino en este foro! :sob:

¿Podría preguntar, estimado iniciador del hilo, si estaría dispuesto a compartir sus experiencias en el desarrollo de foros? Sus ideas serían muy apreciadas.

1 me gusta

:sonrisa_sudorosa: Yo también soy un novato, y creo que el contenido debe ser el enfoque principal, con la tecnología desempeñando un papel secundario. En la actualidad, estoy bastante perplejo sobre cómo utilizar Qiniu Cloud para el almacenamiento de contenido, y también estoy igualmente inseguro sobre los métodos más eficaces para atraer tráfico a mi plataforma.

Posteriormente, se descubrió un error. La configuración ‘upload_size: 300m’ resultó ineficaz para regular las dimensiones de los archivos adjuntos. La causa raíz seguía siendo esquiva, lo que me obligó a renunciar a la instalación del panel de control por completo.

Estoy utilizando Amazon S3 para mis necesidades de almacenamiento.

Sin embargo, vale la pena señalar que Alibaba OSS ahora es compatible con S3. Podrías considerar probarlo.

De hecho, una vez que la infraestructura está en su lugar, el enfoque se desplaza a poblarla con contenido.

Deberías modificarlo según el método que sugiere.

Recuerdo que cuando hice los cambios en ese momento, también ajusté parámetros y refactoricé. Utilicé Tencent Cloud y cada refactorización requería una conexión proxy. Fue una pesadilla total resolverlo.

@Lhc_fl @zengyunsi ¿Hay alguna forma de implementar la protección del campo nombre de usuario del foro? La configuración personalizada solo incluye el filtrado de palabras sensibles y los campos de usuario permitidos.

Soporte para nombres de usuario Unicode en chino: Discourse 支持中文用户名 - Discourse - iSharkFly

Soporte para nombres de usuario Unicode en chino: Discourse admite nombres de usuario en chino - Discourse - iSharkFly

Sin embargo, ¿qué se entiende por protección del campo del nombre de usuario? ¿Es necesario que las modificaciones del nombre de usuario se sometan a una revisión?

Si es así, Discourse no tiene una función nativa para ello. Le sugiero que considere la posibilidad de desarrollar un plugin personalizado para abordar este requisito.

Alternativamente, podría considerar la realización de revisiones periódicas de todos los nombres de usuario en la plataforma para identificar cualquier problema potencial.

@go_ahead Además, le recomiendo que plantee su pregunta en inglés o en una combinación de inglés y chino en un hilo separado. Este enfoque es preferible, ya que las discusiones fuera de tema en la sección de meta suelen estar sujetas a la separación de hilos.

El uso exclusivo del chino puede resultar difícil para nuestros moderadores que no hablan chino, ya que pueden tener dificultades para comprender el tema de nuestro debate.

Parece que he encontrado esta función; creo que es esta.

1 me gusta

¡Ay, mi dominio del inglés es terriblemente inadecuado y carezco de experiencia para comunicarme con ellos! Me esforzaré por ser más consciente de este asunto de ahora en adelante. ¡Estoy muy agradecido por tu guía!

Según mi entendimiento, los moderadores suelen categorizar los temas que contienen contenido en chino bajo la etiqueta chinese-translation.

En términos generales, el problema no es particularmente significativo, y también se podría proporcionar un resumen en inglés debajo de la publicación.

En realidad, no es excesivamente problemático, ya que los moderadores pueden utilizar software de traducción para obtener una comprensión general. El asunto tiene poca importancia.

1 me gusta

🇨🇳 Discourse Official Install Guide | Discourse 云平台安装 Este contenido todavía debería ser utilizable.

Sin embargo, nosotros usamos servidores puros y comenzamos desde contenedores Docker, por lo que es posible que no hayamos utilizado la configuración de la consola.

La guía de instalación oficial de Discourse a la que se hace referencia en el texto en chino probablemente todavía sea aplicable. Sin embargo, vale la pena señalar que nuestra implementación utiliza servidores puros, comenzando con contenedores Docker. Como tal, es posible que no hayamos empleado las configuraciones relacionadas con la consola mencionadas en la guía.

Este enfoque, que comienza con contenedores Docker en servidores puros, potencialmente se desvía del proceso de instalación estándar, particularmente en términos de configuración y gestión de la consola. Es crucial tener en cuenta esta distinción al seguir la guía oficial, ya que ciertos pasos pueden necesitar ser adaptados u omitidos para adaptarse a nuestro método de implementación específico.

:sweat_smile: Se refiere a la API, no se puede llamar en chino.

:sweat_smile: Me temo que la API no admite la entrada en chino.

Parece que el problema podría estar en este panel en particular… Quizás sea mejor volver al método original y realizar una instalación limpia. Me inclino a utilizar Qiniu Cloud para este propósito.