Guia de instalação detalhado + painel de controle | Tutorial super detalhado de instalação do discourse + painel de controle

Sou um novato em desenvolvimento web e, por hobby, quero montar uma comunidade de intercâmbio técnico. Estou planejando configurar um Discourse e compartilhar este tutorial, na esperança de que ajude aqueles que precisam instalar o Discourse, evitando armadilhas. Há poucos tutoriais em chinês sobre Discourse, e alguns já estão desatualizados. Passei vários dias pesquisando, dependendo apenas de software de tradução.

O que você precisa para criar seu próprio Discourse:

Um servidor leve Aliyun em Hong Kong. Baixar plugins do GitHub em servidores domésticos é como uma lesma, então recomendo usar o servidor leve Aliyun em Hong Kong ou outro servidor leve. Servidores leves são mais baratos e adequados para iniciantes. A configuração requer mais de 2 GB de RAM, caso contrário, a instalação falhará. Se você precisar instalar em um servidor doméstico, pode usar um servidor em Hong Kong com pagamento por uso e, em seguida, usar a função de criação de imagem na plataforma para clonar para o servidor doméstico, o que economizará tempo de pesquisa de armadilhas.

Um domínio curto e fácil de lembrar, com resolução para o IP do servidor. Recomendo .com e .net. Outros domínios carecem de reconhecimento. Você pode pesquisar domínios em Pesquisa em Massa de Domínios, usando a pesquisa por regras para encontrar domínios curtos.

Sistema: Ubuntu 20.04, que é mais comum.

Após ativar um novo servidor, abra todas as portas do firewall primeiro (após a depuração, feche as portas conforme necessário, mantendo apenas as portas usadas, para evitar ataques de hackers). Defina a senha do root no painel de controle e, em seguida, conecte-se remotamente ao servidor via SSH diretamente pela web ou baixe um software SSH como XTerminal.

Em seguida, cole os três comandos abaixo e pressione Enter para executá-los. Quando houver opções, pressione “yes” para atualizar a fonte do sistema e instalar o software git.

apt update
apt upgrade -y
apt install git

Em seguida, cole os três comandos abaixo e pressione Enter para executá-los como administrador. Esta etapa sudo -s se não for feita com cuidado, pode haver mensagens de erro de criação inexplicáveis durante a instalação, levando à falha na instalação, pois falta permissão.

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

Após o download, execute o assistente de instalação

./discourse-setup

Em seguida, insira o domínio a ser vinculado de acordo com as instruções. A primeira instalação leva muito tempo. Recomenda-se preencher aleatoriamente outros domínios além do domínio principal, e depois reconstruir após o sucesso. Se você não entender, pode usar capturas de tela e tradução de imagens do WeChat. Para e-mails, você pode usar o Serviço de E-mail Aliyun.

Em seguida, haverá uma mensagem perguntando se você deseja continuar a instalação ou cancelar pressionando Ctrl+C. Recomenda-se continuar a instalação.

Após a conclusão da instalação, acesse o domínio vinculado. Se a página de registro aparecer, significa que o Discourse foi instalado com sucesso.

Em seguida, instale um painel Linux. Esta etapa é principalmente para instalar outros programas de site e facilitar o gerenciamento “plug and play” para iniciantes. Comparei e este painel é muito mais simples que o Baota, com menos anúncios e instalação rápida em poucos segundos, ao contrário do Baota que requer compilação de ambiente por muito tempo.

Execute o script abaixo:

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

Durante a instalação, ele detectará que o Docker já foi instalado e, em seguida, exibirá o login no backend.

Siga as instruções, encontre o backend e faça o login. Em Gerenciamento de Contêineres, você pode ver o aplicativo, que é o Discourse, e pode iniciá-lo ou pará-lo aqui.

Em seguida, entre no arquivo e edite o app.yml. As principais modificações são comentadas em chinês.

## 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 o tamanho máximo de upload de anexos
  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 o domínio 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 e-mail do 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 servidor de e-mail de envio
  DISCOURSE_SMTP_ADDRESS: smtpdm.aliyun.com
  ## Modificar porta do e-mail de envio
  DISCOURSE_SMTP_PORT: 80
  ## Modificar para conta de e-mail de envio automático
  DISCOURSE_SMTP_USER_NAME: xxxx@xxx.net
  ## Modificar senha do e-mail de envio
  DISCOURSE_SMTP_PASSWORD: "dj6bCRxoHt25NcD6"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_DOMAIN: smtpdm.aliyun.com
  ## Modificar para conta de e-mail de envio automático
  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"

Após modificar e salvar, volte ao terminal, use o comando ou pare o contêiner no backend e, em seguida, reconstrua. No entanto, parece que se você não instalou este painel, não precisa parar o contêiner. Reconstruir diretamente após instalar este painel resultará em erro.

./launcher stop app
./launcher bootstrap app

Aguarde a conclusão da reconstrução e execute o comando de inicialização do contêiner.

./launcher start app

Ao entrar no Discourse, ele solicitará o envio de um e-mail para ativação. Se você não receber, pode usar o comando abaixo para criar uma conta de administrador e pular diretamente. Em seguida, defina o idioma para chinês nas configurações à esquerda. Há também um local para testar o envio de e-mails, que indicará o motivo do erro. Tente algumas vezes e você terá sucesso.

./launcher enter app
rake admin:create

Se você precisar criar outros sites, consulte diretamente o tutorial oficial. É simples, então não vou detalhar. Você também pode criar um novo ambiente no site, modificar as permissões do site para 777 e, em seguida, instalar vários programas.

O principal problema resolvido é que vários sites podem ser executados em um único servidor, economizando custos de compra de servidores e sendo mais adequado para iniciantes.

Posteriormente, ao testar o envio de e-mails, descobri um problema:

Essas configurações do contêiner, editadas no app.yml, não parecem ter efeito na reconstrução. É necessário modificar nas variáveis de ambiente do contêiner, mas leva apenas 5-6 segundos para entrar em vigor. Ainda não está claro se isso afeta a instalação de plugins.

A coexistência com outros sites parece envolver a criação de um proxy reverso primeiro, depois a alteração da porta padrão 443 do contêiner para 10443, e a configuração do certificado para acesso normal.

Proxy Reverso

Configuração do Certificado

2 curtidas

Na verdade, o discourse_docker pode ser clonado em qualquer pasta, ele será instalado automaticamente em /var/discourse…

Na verdade, a localização para a qual se clona o repositório discourse_docker é irrelevante, pois ele será invariavelmente instalado automaticamente no diretório /var/discourse…

Em teoria, isso é improvável. O procedimento correto seria modificar o arquivo app.yml e, em seguida, reconstruir o aplicativo.

Em teoria, parece bastante improvável. O procedimento adequado seria modificar o arquivo app.yml e, subsequentemente, reconstruir a aplicação.

1 curtida

:sweat_smile: Mas editar o arquivo de configuração não adiantou, pois o rebuild não teve efeito. No entanto, alterar as variáveis de ambiente do contêiner funcionou maravilhosamente em meros segundos, poupando-me do incômodo de reconstruir. O impacto nos plugins permanece incerto por enquanto.

Anteriormente, eu havia negligenciado a entrada de ‘sudo -s’, o que resultou em uma enxurrada de mensagens de erro. Fiquei completamente perplexo quanto à origem do problema.

Meu caro, você saberia me dizer como um nome de usuário chinês poderia utilizar a API? O cabeçalho, veja bem, não pode conter caracteres chineses.

Hã, há esse problema? Cole os logs.

Ah, diga-me, esse é realmente o problema? Talvez você possa compartilhar as entradas de log comigo.

O estrangeiro disse que era possível, mas não importa como eu tentei, simplesmente não consegui… :sweat_smile:

Se for viável, talvez possamos tentar isso. Deus sabe que codificação sua solicitação utilizou.

1 curtida

É surpreendente encontrar um post em chinês neste fórum! :sob:

Caro autor do tópico, poderia compartilhar suas experiências no desenvolvimento de fóruns? Suas ideias seriam muito apreciadas.

1 curtida

:sweat_smile: Eu também sou novato, e acho que o conteúdo deve ser o foco principal, com a tecnologia como suporte. No momento, estou bastante perplexo sobre como utilizar o Qiniu Cloud para armazenamento de conteúdo, e igualmente incerto sobre os métodos mais eficazes para atrair tráfego para a minha plataforma.

Posteriormente, descobriu-se um bug. A configuração upload_size: 300m não surtiu efeito no controle do tamanho dos anexos, e a causa raiz permaneceu desconhecida, forçando a desistência da instalação do painel de controle.

Estou utilizando o Amazon S3 para minhas necessidades de armazenamento.

No entanto, vale notar que o Alibaba OSS agora é compatível com o S3. Você pode considerar experimentá-lo.

De fato, uma vez que a infraestrutura esteja pronta, o foco muda para o preenchimento dela com conteúdo.

Deveria ser modificado de acordo com o método sugerido por ele.

Lembro-me que quando fiz as alterações na época, também ajustei parâmetros e refatorei. Usei o Tencent Cloud, e cada refatoração exigia uma conexão proxy. Foi um pesadelo para resolver.

@Lhc_fl @zengyunsi Existe alguma maneira de implementar a proteção do campo de nome de usuário do fórum? As configurações personalizadas incluem apenas filtragem de palavras sensíveis e campos de usuário permitidos.

Suporte para nomes de usuário Unicode em chinês: Discourse 支持中文用户名 - Discourse - iSharkFly

Suporte para nomes de usuário Unicode em chinês: O Discourse acomoda nomes de usuário em chinês - Discourse - iSharkFly

Embora eu entenda sua consulta, permita-me elucidar o conceito de proteção do campo de nome de usuário e a necessidade de as modificações de nome de usuário passarem por um processo de verificação.

Se for esse o caso, o Discourse não possui tal funcionalidade nativa. Sugiro considerar o desenvolvimento de um plugin personalizado para atender a essa necessidade.

Alternativamente, você pode considerar a realização de revisões periódicas de todos os nomes de usuário na plataforma para identificar quaisquer problemas potenciais.

@go_ahead Além disso, recomendo fazer sua pergunta em inglês ou uma combinação de inglês e chinês em um tópico separado. Essa abordagem é preferível, pois discussões fora do tópico na seção meta geralmente estão sujeitas à separação de tópicos.

O uso exclusivo de chinês pode ser desafiador para nossos moderadores que não falam chinês, pois eles podem ter dificuldade em compreender o assunto de nossa discussão.

Parece que encontrei esta funcionalidade; acredito que seja esta.

1 curtida

Puxa, meu domínio do inglês é terrivelmente inadequado, e me falta experiência para me comunicar com eles. Me esforçarei para ser mais atento a essa questão daqui para frente. Sou muito grato por sua orientação!

Pelo que entendi, os moderadores geralmente publicam tópicos com conteúdo em chinês sob a tag chinese-translation.

De modo geral, o problema não é muito grande, e você também pode dar uma dica em inglês abaixo do seu post.

Na verdade, tudo bem, os moderadores podem usar um software de tradução para ter uma ideia geral. O problema não é grande.

Pelo que entendi, os moderadores geralmente categorizam tópicos com conteúdo em chinês sob a tag ‘chinese-translation’.

De modo geral, o problema não é particularmente significativo, e também se pode fornecer um resumo em inglês abaixo da sua postagem.

Na verdade, não é excessivamente problemático, pois os moderadores podem usar software de tradução para obter uma compreensão geral. A questão tem pouca consequência.

1 curtida

🇨🇳 Discourse Official Install Guide | Discourse 云平台安装 Este conteúdo ainda deve ser utilizável.

No entanto, usamos servidores puros, começando com contêineres Docker, então podemos não ter utilizado a configuração relacionada ao console.

O guia oficial de instalação do Discourse referenciado no texto em chinês provavelmente ainda é aplicável. No entanto, vale a pena notar que nossa implementação utiliza servidores bare metal, começando com contêineres Docker. Como tal, podemos não ter empregado as configurações relacionadas ao console mencionadas no guia.

Essa abordagem, começando com contêineres Docker em servidores puros, potencialmente diverge do processo de instalação padrão, particularmente em termos de configuração e gerenciamento do console. É crucial ter essa distinção em mente ao seguir o guia oficial, pois certas etapas podem precisar ser adaptadas ou omitidas para se adequar ao nosso método de implantação específico.

:sweat_smile: Dizem que é a API, não há como chamá-la em chinês

:sweat_smile: Receio que a API não suporte entrada em chinês.

Parece que o problema pode estar neste painel específico… Talvez seja melhor voltar ao método original e realizar uma instalação limpa. Tenho a intenção de utilizar o Qiniu Cloud para este fim.