Problemas com Dockerfile multisite

Tentei aplicá-lo lendo os guias. É assim que o arquivo app.yml ficou. Pode haver erros. Estou usando apenas Docker. Quero fazer o seguinte: conseguir abrir 2 sites no servidor virtual. 1. nome do site: dursuncan.com, 2. nome do site: forum.tekno-byte.com
Como devo editar o arquivo app.yml?

   # ./launcher rebuild app

    WARNING: We are about to start downloading the Discourse base image
    This process may take anywhere between a few minutes to an hour, depending on your network speed

    Please be patient

    2.0.20210415-1332: Pulling from discourse/base
    Digest: sha256:b3b1eb6d859d683f26ad2a02e0efabcd502a63ab07b8211e4c425aa7ba7dd3a4
    Status: Downloaded newer image for discourse/base:2.0.20210415-1332
    docker.io/discourse/base:2.0.20210415-1332
    Ensuring launcher is up to date
    Fetching origin
    Launcher is up-to-date
    Stopping old container
    + /usr/bin/docker stop -t 60 app
    app
    cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
    docker: Error response from daemon: could not get container for postgres: No such container: postgres.
    See 'docker run --help'.
    cat: cids/app_bootstrap.cid: No such file or directory
    "docker rm" requires at least 1 argument.
    See 'docker rm --help'.

    Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

    Remove one or more containers
    rm: cannot remove 'cids/app_bootstrap.cid': No such file or directory
    ** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
    ./discourse-doctor may help diagnose the problem.
    ## 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"
      - "templates/web.ratelimited.template.yml"
      - "templates/cron.template.yml"
    ## Uncomment these two lines if you wish to add Lets Encrypt (https)
      - "templates/sshd.template.yml"  
      - "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:80"
       - "2222:22"
       - "443:443"
    #  - "80:80"   # http
    #  - "443:443" # https

    links:
       - link:
           name: postgres
           alias: postgres

    #docker_args:
    #   - "--net chain"

    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: "256MB"

      ## 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: en

      ## 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: 3

      ## TODO: The domain name this Discourse instance will respond to
      ## Required. Discourse will not work with a bare IP number.
      DISCOURSE_HOSTNAME: 'dursuncan.com'
      # VIRTUAL_HOST: 'dursuncan.com,www.dursuncan.com'
      # LETSENCRYPT_HOST: 'dursuncan.com,www.dursuncan.com'
      # LETSENCRYPT_EMAIL: 'merhaba@dursuncan.com'

      ## 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'
      DISCOURSE_DEVELOPER_EMAILS: 'poyrazdursuncan@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!
      DISCOURSE_SMTP_ADDRESS: smtp.eu.mailgun.org
      DISCOURSE_SMTP_PORT: 587
      DISCOURSE_SMTP_USER_NAME: postmaster@mg.dursuncan.com
      DISCOURSE_SMTP_PASSWORD: '***'
      DISCOURSE_SMTP_ENABLE_START_TLS: true
      DISCOURSE_SMTP_DOMAIN: dursuncan.com
      #DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com    # (address to send notifications from)

      ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
      LETSENCRYPT_ACCOUNT_EMAIL: 'merhaba@dursuncan.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

      DISCOURSE_DB_HOST: some-host
      DISCOURSE_DB_NAME: "{{config}}_discourse"

    labels:
      monitor: "true"
      app_name: "{{config}}_discourse"

    ## 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
    hooks:          
      after_postgres:
         - exec: sudo -u postgres createdb b_discourse || exit 0
         - exec:
              stdin: |
                grant all privileges on database b_discourse to discourse;
              cmd: sudo -u postgres psql b_discourse
              raise_on_fail: false

         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "alter schema public owner to discourse;"'
         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists hstore;"'
         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists pg_trgm;"'

      after_code:
        - exec:
            cd: $home/plugins
            cmd:
              - mkdir -p plugins
              - git clone https://github.com/discourse/docker_manager.git
      before_bundle_exec:
        - file:
            path: $home/config/multisite.yml
            contents: |
             secondsite:
               adapter: postgresql
               database: b_discourse
               pool: 25
               timeout: 5000
               db_id: 2
               host_names:
                 - b.discourse.example.com

      after_bundle_exec:
        - exec: cd /var/discourse && sudo -E -u discourse bundle exec rake multisite:migrate

    ## Any custom commands to run after building
    run:
      - exec:
            cd: var/discourse
            hook: my_hook
            cmd:
              - echo 1
      ## 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"
1 curtida

Você precisa de dois desses contêineres e de um proxy reverso à frente. Copie app.yml para app2.yml e edite-o. Executando outros sites na mesma máquina que o Discourse ou talvez Configuração Multissítio com Let’s Encrypt e sem proxy reverso se puderem usar os mesmos plugins e servidor de e-mail.

4 curtidas

Eu usei o 1º método em servidores LEMP. É possível fazer esse método via Docker? A instalação de um servidor Nginx fora do Docker afeta o desempenho?

1 curtida

Sim. Você terá uma imagem Docker para cada fórum.

O proxy reverso externo também pode ser um contêiner Docker.

Pouco.

1 curtida

Instalei o Nginx. Configurei minhas configurações. Editei o arquivo app.yml. O processo de rebuild falhou. Qual pode ser o problema?

./launcher rebuild app
Garantindo que o launcher está atualizado
Buscando origem
Launcher está atualizado
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
docker: formato de referência inválido: o nome do repositório deve estar em minúsculas.
Veja 'docker run --help'.
cat: cids/app_bootstrap.cid: Arquivo ou diretório não encontrado
"docker rm" requer pelo menos 1 argumento.
Veja 'docker rm --help'.

Uso:  docker rm [OPÇÕES] CONTAINER [CONTAINER...]

Remove um ou mais containers
rm: não foi possível remover 'cids/app_bootstrap.cid': Arquivo ou diretório não encontrado
** FALHA NO BOOTSTRAP ** Por favor, role para cima e procure mensagens de erro anteriores, pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.
root@dursun:/var/discourse# docker image rm 8e23824acd3c
Erro: Imagem não encontrada: 8e23824acd3c

app.yml

## este é o modelo de container Docker Discourse tudo-em-um, independente
##
## Após fazer alterações neste arquivo, você DEVE executar rebuild
## /var/discourse/launcher rebuild app
##
## TENHA *MUITO* CUIDADO AO EDITAR!
## ARQUIVOS YAML SÃO EXTREMAMENTE SENSÍVEIS A ERROS DE ESPAÇAMENTO OU ALINHAMENTO!
## visite http://www.yamllint.com/ para validar este arquivo conforme necessário

# modelos base usados; pode ser reduzido para incluir menos funcionalidade por modelos de container:
  #- "templates/sshd.template.yml"
  #- "templates/web.socketed.template.yml"
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"

## quais portas TCP/IP este container deve expor?
## Se você deseja que o Discourse compartilhe uma porta com outro servidor web como Apache ou nginx,
## veja https://meta.discourse.org/t/17247 para detalhes
# quais portas expor?
# expose: comente toda a seção colocando um # no início de cada linha
# - "80:80"   # http
# - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Defina db_shared_buffers para no máximo 25% da memória total.
  ## será definido automaticamente pelo bootstrap com base na RAM detectada, ou você pode substituir
  #db_shared_buffers: "256MB"

  ## pode melhorar o desempenho de ordenação, mas aumenta o uso de memória por conexão
  #db_work_mem: "40MB"

  ## Qual revisão do Git este container deve usar? (padrão: 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: en

  ## Quantas requisições web simultâneas são suportadas? Depende da memória e dos núcleos de CPU.
  ## será definido automaticamente pelo bootstrap com base nas CPUs detectadas, ou você pode substituir
  #UNICORN_WORKERS: 3

  ## TODO: O nome de domínio ao qual esta instância do Discourse responderá
  ## Obrigatório. O Discourse não funcionará com um número IP puro.
  DISCOURSE_HOSTNAME: 'dursuncan.com'

  ## Descomente se quiser que o container seja iniciado com o mesmo
  ## nome de hostname (-h option) especificado acima (padrão "$hostname-$config")
  # DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de e-mails separados por vírgula que serão feitos administradores e desenvolvedores
  ## no cadastro inicial, exemplo 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'poyrazdursuncan@gmail.com'

  ## TODO: O servidor SMTP usado para validar novas contas e enviar notificações
  ## ENDEREÇO SMTP, nome de usuário e senha são obrigatórios
  ## AVISO: o caractere '#' na senha do SMTP pode causar problemas!
  DISCOURSE_SMTP_ADDRESS: smtp.eu.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: postmaster@mg.dursuncan.com
  DISCOURSE_SMTP_PASSWORD: '---------'
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_DOMAIN: dursuncan.com
  #DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com    # (endereço para enviar notificações)

  ## Se você adicionou o modelo Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: 'merhaba@dursuncan.com'

  ## O endereço CDN http ou https para esta instância do Discourse (configurado para buscar)
  ## veja https://meta.discourse.org/t/14857 para detalhes
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## A chave de endereço IP do Maxmind para busca de geolocalização por IP
  ## veja https://meta.discourse.org/t/-/137387/23 para detalhes
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## O container Docker é sem estado; todos os dados são armazenados em /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins vão aqui
## veja https://meta.discourse.org/t/19157 para detalhes

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Quaisquer comandos personalizados para executar após a construção
run:
  - exec: echo "Início dos comandos personalizados"
  ## Se quiser definir o endereço de e-mail 'From' para seu primeiro cadastro, descomente e altere:
  ## Após receber o primeiro e-mail de cadastro, comente novamente a linha. Só precisa rodar uma vez.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fim dos comandos personalizados"
1 curtida