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









