Reinicialização do contêiner - o discourse tenta reinstalar

Olá,

Primeiramente, obrigado pelo melhor software de fórum disponível.

Tenho um problema ao reiniciar um contêiner Docker executando o Discourse; ele sempre tenta se reinstalar.

Optei pela configuração de múltiplos contêineres (é melhor por padrão).

Ao reiniciar o contêiner do Discourse, o processo sempre tenta se reinstalar.

Eu esperava que ele identificasse que o banco de dados já existe e ficasse disponível; no entanto, ele sempre tenta reinstalar e reclama sobre IDs conflitantes.

Existe alguma configuração que possa ser definida para impedir que ele se reinstale?

Obrigado antecipadamente.

Você pode explicar como você está tentando reiniciar o container?

Olá, Stephen,

assim como faria com qualquer outro container, execute docker restart discourse

Como você criou os dois containers?

Qual mensagem você recebe que parece estar tentando instalar?

E aí,

pessoal, como é Docker, não há muitas outras formas de iniciar.

Ele tem um conjunto de variáveis de ambiente:

nami    INFO  Inicializando postgresql-client
    nami    INFO  postgresql-client inicializado com sucesso
    nami    INFO  Inicializando discourse
    discour INFO  Aplicando patches no Discourse...
    postgre INFO  Tentando conectar ao servidor PostgreSQL
    postgre INFO  Servidor PostgreSQL encontrado ouvindo em postgres:5432
    postgre INFO  Servidor PostgreSQL ouvindo e funcionando em postgres:5432
    discour INFO  Preparando o ambiente do Discourse...
    discour INFO  Configurando os arquivos de banco de dados do Discourse...
    discour INFO  Configurando o Redis...
    discour INFO  Configurando o SMTP no Discourse...
    discour INFO  Configurando o banco de dados do Discourse...
    discour INFO  Habilitando plugins PostgreSQL para o Discourse...
    discour INFO  Migrando banco de dados...
    discour INFO  Criando o usuário administrador do Discourse...
    discour INFO  Configurando sua instalação do Discourse...
    Erro ao executar 'postInstallation': ERRO:  valor de chave duplicado viola a restrição de unicidade "index_site_settings_on_name"
    DETALHE:  A chave (name)=(site_contact_username) já existe.

Então, o banco de dados está presente, mas, por algum motivo, o Discourse tenta se instalar novamente… e a pergunta é: como evitar que isso aconteça?

Existe alguma variável de ambiente? (Eu esperaria que o sistema detectasse que há um banco de dados e uma configuração presentes?)

Você está usando o Bitnami?

Como você criou os containers?

Sim, como a “solução oficial” não é realmente dockery e depende demais de scripts personalizados. Imagino que isso não receba suporte, rs.

A imagem do Bitnami não é suportada. Se você deseja usá-la, precisará entrar em contato com eles.

Além disso, ela está muito desatualizada.

justo,… existe um docker-compose para a solução multi-container?

Desculpe, Stephen, adoraria usar as imagens oficiais em vez disso;

discourse/base - Docker Image Vou começar a usar esta?

@Stephen existe uma lista de variáveis de ambiente em algum lugar?

Acho que são apenas o arquivo de configuração com o prefixo DISCOURSE_

?

# Opções disponíveis:
#
# default            - O valor padrão da configuração. Para configurações de upload do site, use o id do upload semeado em db/fixtures/010_uploads.rb.
# client             - Defina como true se o javascript deve ter acesso ao valor desta configuração.
# refresh            - Defina como true se os clientes devem atualizar quando a configuração for alterada.
# min                - Para uma configuração de string, o comprimento mínimo. Para uma configuração de inteiro, o valor mínimo.
# max                - Para uma configuração de string, o comprimento máximo. Para uma configuração de inteiro, o valor máximo.
# regex              - Uma regex que o valor deve corresponder.
# validator          - O nome da classe que será usada para validar o valor da configuração.
# allow_any          - Para configurações de escolha, permite itens não especificados na lista de escolhas (padrão true)
# secret             - Defina como true se o tipo de entrada deve ser senha e o valor precisa ser removido dos logs (padrão false).
# enum               - A configuração tem um conjunto fixo de valores permitidos, e apenas um pode ser escolhido.
#                      Defina para o nome da classe que define o conjunto.
# locale_default     - Um hash que substitui de acordo com `SiteSetting.default_locale`.
#                      A chave deve ser a mesma que o possível valor de default_locale.
#
#
# type: email    - Deve ser um endereço de email válido.
# type: username - Deve corresponder ao nome de usuário de um usuário existente.
# type: list     - Uma lista de valores, escolhidos a partir de um conjunto de valores válidos definidos na opção choices.
# type: enum     - Um único valor, escolhido a partir de um conjunto de valores válidos na opção choices.
#
# Uma configuração type:list com a palavra 'colors' em seu nome fará com que os valores de cor tenham uma linha grossa da cor correspondente
#
required:
  title:
    client: true
    default: "Discourse"
  site_description:
    default: ""
  short_site_description:
    default: ""
    client: true
  contact_email:
    client: true
    default: ""
    type: email
  contact_url:
    client: true
    default: ""
  notification_email:
    default: "noreply@unconfigured.discourse.org"
    type: email
  site_contact_username:
    default: ""
    type: username
  site_contact_group_name:
    default: ""
    type: group
  exclude_rel_nofollow_domains:
    default: ""
    type: list
  company_name:
    default: ""
  governing_law:
    default: ""
  city_for_disputes:
    default: ""

branding:
  logo:
    default: -5
    client: true
    type: upload
  logo_small:
    default: -6
    client: true
    type: upload
  digest_logo:
    default: ""
    client: true
    type: upload
  mobile_logo:
    default: ""
    client: true
    type: upload
  large_icon:
    default: ""
    client: true
    type: upload
  manifest_icon:
    default: ""
    type: upload
  favicon:
    default: ""
    client: true
    type: upload
  apple_touch_icon:
    default: ""
    client: true
    type: upload
  opengraph_image:
    default: ""
    type: upload
  twitter_summary_large_image:
    default: ""
    type: upload

basic:
  display_local_time_in_user_card:
    client: true
    default: false
  allow_user_locale:
    client: true
    default: false
  set_locale_from_accept_language_header:
    default: false
    validator: "AllowUserLocaleEnabledValidator"
  support_mixed_text_direction:
    client: true
    default: false
  categories_topics:
    default: 20
    validator: "CategoriesTopicsValidator"
  suggested_topics:
    client: true
    default: 5
    max: 2000
  limit_suggested_to_category:
    default: false
  suggested_topics_unread_max_days_old:
    default: 90
    min: 0
    max: 36500
  suggested_topics_max_days_old:
    default: 365
    min: 7
    max: 36500
  ga_universal_tracking_code:
    client: true
    default: ""
    regex: "^UA-\\d+-\\d+$"
  ga_universal_domain_name:
    client: true
    default: "auto"
  ga_universal_auto_link_domains:
    default: ""
    type: list
  gtm_container_id:
    client: true
    default: ""
    regex: "^GTM-"
  top_menu:
    client: true
    refresh: true
    type: list
    list_type: compact
    default: "latest|new|unread|top|categories"
    regex: "latest"
    regex_error: "site_settings.errors.must_include_latest"
    validator: RegexPresenceValidator
    allow_any: false
    choices:
      - latest
      - new
      - unread
      - top
      - categories
      - read
      - posted
      - bookmarks
  post_menu:
    client: true
    type: list
    default: "read|like|share|flag|edit|bookmark|delete|admin|reply"
    allow_any: false
    choices:
      - read
      - like
      - edit
      - flag
      - delete
      - share
      - bookmark
      - admin
      - reply
  post_menu_hidden_items:
    client: true
    type: list
    default: "flag|bookmark|edit|delete|admin"
    allow_any: false
    choices:
      - like
      - edit
      - flag
      - delete
      - share
      - bookmark
      - admin
      - reply
  share_links:
    client: true
    type: list
    default: "twitter|facebook|email"
    allow_any: false
    choices:
      - twitter
      - facebook
      - email
  desktop_category_page_style:
    client: true
    enum: "CategoryPageStyle"
    default: "categories_and_latest_topics"
  category_colors:
    client: true
    type: list
    list_type: compact
    default: "BF1E2E|F1592A|F7941D|9EB83B|3AB54A|12A89D|25AAE2|0E76BD|652D90|92278F|ED207B|8C6238|231F20|808281|B3B5B4|E45735"
  category_style:
    client: true
    default: "bullet"
    type: enum
    choices:
      - bar
      - box
      - bullet
      - none
  max_category_nesting:
    client: true
    default: 2
    min: 2
    max: 3
    hidden: true
  enable_mobile_theme:
    client: true
    default: true
    hidden: true
  default_theme_id:
    default: -1
    hidden: true
  relative_date_duration:
    client: true
    default: 30
  topics_per_period_in_top_summary:
    default: 20
    min: 1
  topics_per_period_in_top_page:
    default: 50
    min: 1
  top_page_default_timeframe:
    default: "yearly"
    type: enum
    choices:
      - all
      - yearly
      - quarterly
      - monthly
      - weekly
      - daily
  fixed_category_positions:
    client: true
    default: false
  fixed_category_positions_on_create:
    client: true
    default: false
  enable_badges:
    client: true
    default: true
  enable_badge_sql:
    client: true
    default: false
    hidden: true
  enable_whispers:
    client: true
    default: false
  enable_bookmarks_with_reminders:
    client: true
    default: true
    hidden: true
  push_notifications_prompt:
    default: true
    client: true
  push_notifications_icon:
    default: ""
    type: upload
  short_title:
    default: ""
    max: 12
  vapid_public_key_bytes:
    default: ""
    client: true
    hidden: true
  vapid_public_key:
    default: ""
    hidden: true
  vapid_private_key:
    default: ""
    hidden: true
  vapid_base_url:
    default: ""
    hidden: true

login:
  invite_only:
    refresh: true
    client: true
    default: false
    validator: "EnableInviteOnlyValidator"
  login_required:
    refresh: true
    client: true
    default: false
  must_approve_users:
    client: true
    default: false
  invite_code: ""
  enable_local_logins:
    client: true
    default: true
  enable_local_logins_via_email:
    client: true
    default: true
    validator: "EnableLocalLoginsViaEmailValidator"
  allow_new_registrations:
    client: true
    default: true
  enable_signup_cta:
    client: true
    default: true
  enable_google_oauth2_logins:
    default: false
  google_oauth2_client_id: ""
  google_oauth2_client_secret:
    default: ""
    secret: true
  google_oauth2_prompt:
    default: ""
    type: list
    choices:
      - ""
      - "none"
      - "consent"
      - "select_account"
  google_oauth2_hd:
    default: ""
  enable_twitter_logins:
    default: false
  twitter_consumer_key:
    default: ""
    regex: "^[\\w+-]+$"
  twitter_consumer_secret:
    default: ""
    regex: "^[\\w+-]+$"
    secret: true
  enable_instagram_logins:
    default: false
  instagram_consumer_key:
    default: ""
    regex: "^[a-z0-9]+$"
  instagram_consumer_secret:
    default: ""
    regex: "^[a-z0-9]+$"
    secret: true
  enable_facebook_logins:
    default: false
  facebook_app_id:
    default: ""
    regex: "^\\d+$"
  facebook_app_secret:
    default: ""
    regex: "^[a-f0-9]+$"
    secret: true
  enable_github_logins:
    default: false
  github_client_id:
    default: ""
    regex: "^[a-zA-Z0-9\\.]+$"
  github_client_secret:
    default: ""
    regex: "^[a-f0-9]+$"
    secret: true
  enable_discord_logins:
    default: false
  discord_client_id:
    default: ""
  discord_secret:
    default: ""
    secret: true
  discord_trusted_guilds:
    default: ""
    type: list
  enable_sso:
    client: true
    default: false
    validator: "EnableSsoValidator"
  sso_allows_all_return_paths: false
  enable_sso_provider: false
  verbose_sso_logging: false
  verbose_auth_token_logging:
    hidden: true
    default: true
  max_suspicious_distance_km:
    hidden: true
    default: 500
  sso_url:
    default: ""
    regex: '^https?:\/\/.+[^\/]$'
  sso_secret:
    default: ""
    secret: true
  sso_provider_secrets:
    default: ""
    type: list
    list_type: secret
    secret: true
    placeholder:
      key: "sso_provider.key_placeholder"
      value: "sso_provider.value_placeholder"
  sso_overrides_groups: false
  sso_overrides_bio: false
  sso_overrides_email:
    default: false
    validator: "SsoOverridesEmailValidator"
    client: true
  sso_overrides_username: false
  sso_overrides_name: false
  sso_overrides_avatar:
    default: false
    client: true
  sso_overrides_profile_background: false
  sso_overrides_location: false
  sso_overrides_website: false
  sso_overrides_card_background: false
  sso_not_approved_url: ""
  email_domains_blacklist:
    default: "mailinator.com"
    type: list
  email_domains_whitelist:
    default: ""
    type: list
  auto_approve_email_domains:
    default: ""
    type: list
  hide_email_address_taken: false
  log_out_strict: true
  pending_users_reminder_delay:
    min: -1
    default: 8
  maximum_session_age:
    default: 1440
    min: 1
    max: 175200
users:
  min_username_length:
    client: true
    default: 3
    min: 1
    max: 60
    validator: "MinUsernameLengthValidator"
  max_username_length:
    client: true
    default: 20
    min: 8
    max: 60
    validator: "MaxUsernameLengthValidator"
  unicode_usernames:
    default: false
    client: true
    validator: "UnicodeUsernameValidator"
  unicode_username_character_whitelist:
    validator: "UnicodeUsernameWhitelistValidator"
    default: ""
    locale_default:
      cs: "[ěščřžýáíéóůúďťňĚŠČŘŽÝÁÍÉÓŮÚĎŤŇ]"
      de: "[äöüßÄÖÜẞ]"
      fi: "[åäöÅÄÖ]"
      ja: '[\p{Han}\p{Katakana}\p{Hiragana}]'
      ko: '\p{Hangul}'
      zh_CN: '\p{Han}'
      zh_TW: '\p{Han}'
  reserved_usernames:
    type: list
    list_type: compact
    default: "admin|moderator|administrator|mod|sys|system|community|info|you|name|username|user|nickname|discourse|discourseorg|discourseforum|support|hp"
  min_password_length:
    client: true
    default: 10
    min: 8
    max: 500
  min_admin_password_length:
    client: true
    default: 15
    min: 8
    max: 500
  password_unique_characters:
    default: 6
    min: 1
    max: 10
  block_common_passwords: true
  username_change_period: 3
  email_editable: true
  logout_redirect:
    client: true
    default: ""
  full_name_required:
    client: true
    default: false
  enable_names:
    client: true
    default: true
  invite_expiry_days:
    default: 30
    max: 36500
  invites_per_page:
    client: true
    default: 40
    hidden: true
  delete_user_max_post_age:
    client: true
    default: 60
  delete_all_posts_max:
    client: true
    default: 15
    min: 1
  delete_user_self_max_post_count:
    default: 1
    min: -1
  redirect_users_to_top_page: true
  prioritize_username_in_ux:
    client: true
    default: true
  email_token_valid_hours:
    default: 48
    min: 1
  purge_unactivated_users_grace_period_days:
    default: 14
    max: 36500
  public_user_custom_fields:
    type: list
    default: ""
  staff_user_custom_fields:
    type: list
    default: ""
  enable_user_directory:
    client: true
    default: true
  allow_anonymous_posting:
    default: false
    client: true
  anonymous_posting_min_trust_level:
    default: 1
    enum: "TrustLevelSetting"
    client: true
  anonymous_account_duration_minutes:
    default: 10080
    max: 99000
  hide_user_profiles_from_public:
    default: false
    client: true
  allow_featured_topic_on_user_profiles:
    default: true
    client: true
  show_inactive_accounts:
    default: false
  user_website_domains_whitelist:
    default: ""
    type: list
  hide_suspension_reasons:
    default: false
    client: true
  log_personal_messages_views: false
  ignored_users_count_message_threshold:
    default: 5
    client: true
    min: 1
  ignored_users_message_gap_days:
    default: 365
    client: true
    min: 1
    max: 36500
  clean_up_inactive_users_after_days:
    default: 730
    min: 0
    max: 36500
  clean_up_unused_staged_users_after_days:
    default: 365
    min: 0
    max: 36500
  user_selected_primary_groups:
    default: false
    client: true
  max_notifications_per_user:
    default: 10000
  gravatar_name:
    default: Gravatar
    client: true
  gravatar_base_url:
    default: www.gravatar.com
    client: true
  gravatar_login_url:
    default: /emails
    client: true

groups:
  enable_group_directory:
    client: true
    default: true
  group_in_subject:
    default: false
  enable_category_group_review:
    client: true
    default: false

posting:
  min_post_length:
    client: true
    min: 1
    default: 20
    locale_default:
      ja: 8
      zh_CN: 8
      zh_TW: 8
  min_first_post_length:
    client: true
    min: 1
    default: 20
    locale_default:
      ja: 8
      zh_CN: 8
      zh_TW: 8
  min_personal_message_post_length:
    client: true
    min: 1
    default: 10
    locale_default:
      ja: 3
      zh_CN: 3
      zh_TW: 3
  max_post_length:
    client: true
    default: 32000
    max: 150000
  topic_featured_link_enabled:
    client: true
    default: true
  body_min_entropy:
    default: 7
    locale_default:
      ja: 3
      zh_CN: 3
      zh_TW: 3
  min_topic_title_length:
    client: true
    default: 15
    min: 1
    locale_default:
      ja: 6
      zh_CN: 6
      zh_TW: 6
  max_topic_title_length:
    client: true
    default: 255
    min: 5
    max: 255
  title_min_entropy:
    default: 10
    locale_default:
      ja: 3
      zh_CN: 3
      zh_TW: 3
  allow_uppercase_posts:
    default: false
    locale_default:
      ja: true
  max_consecutive_replies:
    default: 3
  title_prettify:
    default: true
    locale_default:
      ja: false
      zh_CN: false
      zh_TW: false
  title_remove_extraneous_space:
    default: false
    locale_default:
      en: true
      en_US: true
  title_fancy_entities: true
  min_personal_message_title_length:
    client: true
    default: 2
    min: 1
  max_emojis_in_title: 1
  allow_uncategorized_topics:
    client: true
    default: true
    refresh: true
  allow_duplicate_topic_titles: false
  allow_duplicate_topic_titles_category: false
  min_title_similar_length:
    client: true
    default: 10
    locale_default:
      ja: 4
      zh_CN: 4
      zh_TW: 4
  enable_personal_messages:
    default: true
    client: true
  enable_system_message_replies:
    default: true
  enable_personal_email_messages:
    hidden: true
    default: false
    client: true
    validator: "EnablePrivateEmailMessagesValidator"
  editing_grace_period: 300
  editing_grace_period_max_diff: 100
  editing_grace_period_max_diff_high_trust: 400
  staff_edit_locks_post: false
  shared_drafts_category:
    type: category
    default: ""
  post_edit_time_limit:
    default: 1440
    max: 10080
  tl2_post_edit_time_limit:
    default: 43200
    max: 525600
  edit_history_visible_to_public:
    client: true
    default: true
  delete_removed_posts_after:
    client: true
    default: 24
  traditional_markdown_linebreaks:
    client: true
    default: false
  enable_markdown_typographer:
    client: true
    default: true
  enable_markdown_linkify:
    client: true
    default: true
  markdown_linkify_tlds:
    client: true
    type: list
    default: "com|net|org|io|co|tv|ru|cn|us|uk|me|de|fr|fi|gov"
    list_type: compact
  markdown_typographer_quotation_marks:
    client: true
    type: list
    list_type: compact
    validator: "MarkdownTypographerQuotationMarksValidator"
    default: "“|”|‘|’"
    locale_default:
      de: "„|“|‚|‘"
      fr: "«\xA0|\xA0»|‹\xA0|\xA0›"
  enable_rich_text_paste:
    client: true
    default: true
  suppress_reply_directly_below:
    client: true
    default: true
  suppress_reply_directly_above:
    client: true
    default: true
  suppress_reply_when_quoting:
    default: true
  remove_full_quote:
    default: true
  max_reply_history:
    default: 1
    client: true
  post_undo_action_window_mins: 10
  enable_mentions:
    default: true
    client: true
  max_mentions_per_post: 10
  max_users_notified_per_group_mention: 100
  newuser_max_replies_per_topic: 3
  newuser_max_mentions_per_post: 2
  title_max_word_length:
    default: 30
    locale_default:
      ja: 50
      ko: 50
      zh_CN: 50
      zh_TW: 50
  whitelisted_link_domains:
    default: ""
    type: list
  newuser_max_links: 2
  newuser_max_images:
    client: true
    default: 1
  newuser_max_attachments:
    client: true
    default: 0
  post_excerpt_maxlength:
    default: 300
    locale_default:
      ja: 120
      zh_CN: 120
      zh_TW: 120
  topic_excerpt_maxlength:
    default: 220
    locale_default:
      ja: 120
      zh_CN: 120
      zh_TW: 120
  show_pinned_excerpt_mobile:
    client: true
    default: true
  show_pinned_excerpt_desktop:
    client: true
    default: true
  display_name_on_posts:
    client: true
    default: false
  show_time_gap_days:
    default: 7
    max: 36500
    client: true
  short_progress_text_threshold:
    client: true
    default: 10000
    max: 99000
  default_code_lang:
    client: true
    default: "auto"
  warn_reviving_old_topic_age: 180
  autohighlight_all_code:
    client: true
    default: false
  highlighted_languages:
    default: "apache|bash|cs|cpp|css|coffeescript|diff|xml|http|ini|json|java|javascript|makefile|markdown|nginx|objectivec|ruby|perl|php|python|sql|handlebars"
    choices: "HighlightJs.languages"
    type: list
    client: true
    list_type: compact
  show_copy_button_on_codeblocks:
    client: true
    default: false
  delete_old_hidden_posts: true
  enable_emoji:
    default: true
    client: true
  enable_emoji_shortcuts:
    default: true
    client: true
  emoji_set:
    default: "twitter"
    client: true
    enum: "EmojiSetSiteSetting"
  emoji_autocomplete_min_chars:
    client: true
    default: 0
    locale_default:
      fr: 1
  enable_inline_emoji_translation:
    client: true
    default: false
    locale_default:
      zh_CN: true
      zh_TW: true
      ja: true
      ko: true
  approve_post_count:
    default: 0
  approve_unless_trust_level:
    default: 0
    enum: "TrustLevelSetting"
  approve_new_topics_unless_trust_level:
    default: 0
    enum: "TrustLevelSetting"
  approve_suspect_users:
    default: true
  approve_unless_staged:
    default: false
  notify_about_queued_posts_after:
    default: 24
  auto_close_messages_post_count:
    default: 500
  auto_close_topics_post_count:
    default: 10000
  code_formatting_style:
    client: true
    type: enum
    default: "4-spaces-indent"
    choices:
      - 4-spaces-indent
      - code-fences
  embed_any_origin: false
  embed_topics_list: false
  embed_set_canonical_url: false
  embed_unlisted: false
  embed_truncate: true
  embed_support_markdown: false
  embed_whitelist_selector: ""
  allowed_href_schemes:
    client: true
    default: ""
    type: list
    list_type: compact
  max_allowed_message_recipients:
    default: 30
    min: 1
  watched_words_regular_expressions:
    client: true
    default: false
  enable_advanced_editor_preview_sync:
    hidden: true
    default: false
    client: true
  old_post_notice_days:
    default: 14
    max: 36500
    client: true
  new_user_notice_tl:
    default: 2
    enum: "TrustLevelSetting"
  returning_user_notice_tl:
    default: 2
    enum: "TrustLevelSetting"
  returning_users_days:
    default: 120
    max: 36500
  enable_page_publishing:
    default: false
  show_published_pages_login_required:
    default: false

email:
  email_time_window_mins:
    default: 10
    client: true
  personal_email_time_window_seconds: 20
  email_posts_context: 5
  digest_min_excerpt_length:
    default: 100
    locale_default:
      ja: 50
      zh_CN: 50
      zh_TW: 50
  digest_topics:
    default: 5
    min: 1
    max: 20
  digest_posts:
    default: 5
    min: 0
    max: 20
  digest_other_topics:
    default: 5
    min: 0
    max: 20
  suppress_digest_email_after_days:
    default: 365
    max: 36500
  digest_suppress_categories:
    type: category_list
    default: ""
  disable_digest_emails:
    default: false
    client: true
  apply_custom_styles_to_digest: true
  email_accent_bg_color:
    type: color
    default: "#2F70AC"
  email_accent_fg_color: "#FFFFFF"
  email_link_color: "#006699"
  show_topic_featured_link_in_digest: false
  email_custom_headers: "Auto-Submitted: auto-generated"
  email_subject: "[%{site_name}] %{optional_pm}%{optional_cat}%{topic_title}"
  reply_by_email_enabled:
    default: false
    validator: "ReplyByEmailEnabledValidator"
  reply_by_email_address:
    default: ""
    validator: "ReplyByEmailAddressValidator"
  alternative_reply_by_email_addresses:
    default: ""
    validator: "AlternativeReplyByEmailAddressesValidator"
  find_related_post_with_key:
    default: true
  manual_polling_enabled:
    default: false
  pop3_polling_enabled:
    default: false
    validator: "POP3PollingEnabledSettingValidator"
  pop3_polling_ssl: true
  pop3_polling_openssl_verify: true
  pop3_polling_period_mins: 5
  pop3_polling_host: ""
  pop3_polling_port: 995
  pop3_polling_username: ""
  pop3_polling_password:
    default: ""
    secret: true
  pop3_polling_delete_from_server: true
  log_mail_processing_failures: false
  incoming_email_prefer_html: true
  strip_incoming_email_lines: false
  email_in:
    default: false
    client: true
  email_in_min_trust:
    default: 2
    enum: "TrustLevelSetting"
  email_in_authserv_id:
    default: ""
  email_in_spam_header:
    type: enum
    default: "none"
    choices:
      - none
      - X-Spam-Flag
      - X-Spam-Status
      - X-SES-Spam-Verdict
  email_prefix: ""
  email_site_title: ""
  disable_emails:
    client: true
    type: enum
    default: "no"
    choices:
      - "no"
      - "yes"
      - "non-staff"
  strip_images_from_short_emails: true
  short_email_length: 2800
  display_name_on_email_from:
    default: true
  unsubscribe_via_email:
    default: true
  unsubscribe_via_email_footer:
    default: false
  disallow_reply_by_email_after_days:
    default: 90
    max: 36500
  delete_email_logs_after_days:
    default: 90
    max: 36500
  max_emails_per_day_per_user: 100
  enable_staged_users: true
  maximum_staged_users_per_email: 10
  auto_generated_whitelist:
    default: ""
    type: list
  block_auto_generated_emails: true
  ignore_by_title:
    type: list
    default: ""
  mailgun_api_key:
    default: ""
    regex: '^((key-)?\h{32}|\h{32}-\h{8}-\h{8})$'
    secret: true
  bounce_score_threshold:
    client: true
    default: 4
    min: 1
  bounce_score_erode_on_send:
    default: 0.1
    hidden: true
  soft_bounce_score:
    default: 1
    min: 1
  hard_bounce_score:
    default: 2
    min: 2
  reset_bounce_score_after_days:
    default: 30
    max: 36500
  attachment_content_type_blacklist:
    type: list
    default: "pkcs7|x-vcard"
    list_type: compact
  attachment_filename_blacklist:
    type: list
    default: "smime.p7s|signature.asc|winmail.dat"
    list_type: compact
  forwarded_emails_behaviour:
    type: enum
    default: hide
    choices:
      - hide
      - quote
      - create_replies
  always_show_trimmed_content: false
  private_email: false
  email_custom_template:
    default: ""
    hidden: true
  email_custom_css:
    default: ""
    hidden: true
  email_custom_css_compiled:
    default: ""
    hidden: true
  email_total_attachment_size_limit_kb:
    default: 0
    max: 51200
  post_excerpts_in_emails: false
  raw_email_max_length: 220000
  raw_rejected_email_max_length: 4000
  delete_rejected_email_after_days:
    default: 90
    max: 36500
  enable_secondary_emails:
    client: true
    default: true
    hidden: true

files:
  max_image_size_kb:
    client: true
    default: 4096
    max: 102400
  max_attachment_size_kb:
    client: true
    default: 4096
    max: 1024000
  max_image_megapixels:
    default: 40
    min: 5
    max: 150
  max_export_file_size_kb:
    hidden: true
    default: 50000
    max: 1024000
  theme_authorized_extensions:
    default: "jpg|jpeg|png|woff|woff2|svg|eot|ttf|otf|gif|js"
    type: list
    list_type: compact
  authorized_extensions:
    client: true
    default: "jpg|jpeg|png|gif"
    refresh: true
    type: list
    list_type: compact
  authorized_extensions_for_staff:
    client: true
    default: ""
    refresh: true
    type: list
    list_type: compact
  export_authorized_extensions:
    hidden: true
    default: "zip"
    type: list
    list_type: compact
  responsive_post_image_sizes:
    default: "1|1.5|2"
    type: list
    list_type: compact
  crawl_images:
    default: true
  max_image_width:
    client: true
    default: 690
  max_image_height:
    client: true
    default: 500
  download_remote_images_to_local:
    default: true
  download_remote_images_threshold: 10
  disabled_image_download_domains:
    type: list
    default: ""
  create_thumbnails: true
  clean_up_uploads: true
  clean_orphan_uploads_grace_period_hours: 48
  purge_deleted_uploads_grace_period_days:
    default: 30
    max: 36500
  prevent_anons_from_downloading_files:
    default: false
    client: true
  secure_media:
    default: false
    client: true
  enable_s3_uploads:
    default: false
    client: true
  s3_use_iam_profile:
    default: false
  s3_access_key_id:
    default: ""
    secret: true
  s3_secret_access_key:
    default: ""
    secret: true
  s3_region:
    default: "us-east-1"
    enum: "S3RegionSiteSetting"
  s3_upload_bucket:
    default: ""
    regex: '^[a-z0-9\-\/_]+$' # can't use '.' when using HTTPS
  s3_endpoint:
    default: ""
    regex: '^https?:\/\/.+[^\/]$'
  s3_http_continue_timeout:
    default: 1
    hidden: true
  s3_install_cors_rule:
    default: true
    hidden: true
  s3_cdn_url:
    default: ""
    regex: '^https?:\/\/.+[^\/]$'
  s3_configure_tombstone_policy:
    default: true
  enable_s3_inventory:
    default: false
  s3_configure_inventory_policy:
    default: true
    hidden: true
  allow_profile_backgrounds:
    client: true
    default: true
  automatically_download_gravatars: true
  allow_uploaded_avatars:
    client: true
    default: true
  allow_animated_avatars:
    client: true
    default: false
  allow_animated_thumbnails: true
  default_avatars:
    default: ""
    type: url_list
    client: true
  avatar_sizes:
    default: "20|25|32|45|60|120"
    type: list
    list_type: compact
  external_system_avatars_enabled:
    default: true
    client: true
    validator: "ExternalSystemAvatarsValidator"
  external_system_avatars_url:
    default: "/letter_avatar_proxy/v4/letter/{first_letter}/{color}/{size}.png"
    client: true
    regex: '^((https?:)?\/)?\/.+[^\/]'
  restrict_letter_avatar_colors:
    default: ""
    type: list
    list_type: compact
    validator: "ColorListValidator"
  selectable_avatars_enabled:
    default: false
    client: true
    validator: "SelectableAvatarsEnabledValidator"
  selectable_avatars:
    default: ""
    type: uploaded_image_list
  allow_all_attachments_for_group_messages: false
  png_to_jpg_quality:
    default: 95
    min: 1
    max: 100
  allow_staff_to_upload_any_file_in_pm:
    default: true
    client: true
  strip_image_metadata: true
  min_ratio_to_crop:
    type: float
    default: 0.45 # 90% of 18:9
    min: 0
    max: 1
  simultaneous_uploads:
    client: true
    default: 5
    min: 0
    max: 20
  decompressed_theme_max_file_size_mb:
    default: 1000
    hidden: true
  decompressed_backup_max_file_size_mb:
    default: 100000
    hidden: true

trust:
  default_trust_level:
    default: 0
    enum: "TrustLevelSetting"
  default_invitee_trust_level:
    default: 1
    enum: "TrustLevelSetting"
  min_trust_to_create_topic:
    default: 0
    enum: "TrustLevelSetting"
  min_trust_to_edit_wiki_post:
    default: 1
    enum: "TrustLevelSetting"
  min_trust_to_edit_post:
    default: 0
    enum: "TrustLevelSetting"
  min_trust_to_allow_self_wiki:
    default: 3
    enum: "TrustLevelSetting"
  min_trust_to_send_messages:
    default: 1
    enum: "TrustLevelSetting"
  min_trust_to_send_email_messages:
    hidden: true
    default: 4
    enum: "TrustLevelSetting"
  min_trust_to_flag_posts:
    default: 1
    enum: "TrustLevelSetting"
  min_trust_to_post_links:
    default: 0
    enum: "TrustLevelSetting"
  min_trust_to_post_images:
    default: 0
    enum: "TrustLevelSetting"
  allow_flagging_staff: true
  send_tl1_welcome_message: true
  tl1_requires_topics_entered: 5
  tl1_requires_read_posts:
    default: 30
    client: true
  tl1_requires_time_spent_mins: 10
  tl2_requires_topics_entered: 20
  tl2_requires_read_posts: 100
  tl2_requires_time_spent_mins: 60
  tl2_requires_days_visited:
    default: 15
    max: 36500
  tl2_requires_likes_received: 1
  tl2_requires_likes_given: 1
  tl2_requires_topic_reply_count: 3
  tl3_time_period:
    default: 100
    min: 1
    max: 1000000
  tl3_requires_days_visited:
    default: 50
    max: 36500
  tl3_requires_topics_replied_to:
    default: 10
  tl3_requires_topics_viewed:
    default: 25
    max: 100
  tl3_requires_topics_viewed_cap:
    default: 500
  tl3_requires_posts_read:
    default: 25
    max: 100
  tl3_requires_posts_read_cap:
    default: 20000
    max: 99000
  tl3_requires_topics_viewed_all_time:
    default: 200
  tl3_requires_posts_read_all_time:
    default: 500
  tl3_requires_max_flagged:
    default: 5
  tl3_promotion_min_duration:
    default: 14
    max: 10000
  tl3_requires_likes_given:
    default: 30
  tl3_requires_likes_received:
    default: 20
  tl3_links_no_follow:
    default: false
    client: true
  trusted_users_can_edit_others:
    default: true

segurança:
  detalhado_404: false
  aplicar_segundo_fator:
    cliente: true
    tipo: enum
    padrão: "não"
    opções:
      - "não"
      - "staff"
      - "todos"
  forçar_https:
    padrão: {{ config | traverse("force_https", False) }}
  cookies_same_site:
    padrão: Lax
    tipo: enum
    opções:
      - Lax
      - Strict
      - Disabled
      - None
    regex: "^(Lax|Strict|Disabled|None)$"
  habilitar_fragmentos_escapados: true
  permitir_indexação_no_robots_txt: true
  moderadores_criam_categorias: false
  moderadores_veem_emails:
    cliente: true
    padrão: false
  agentes_de_usuário_não_rastejadores:
    oculto: true
    padrão: "trident|webkit|gecko|chrome|safari|msie|opera|goanna|discourse"
    tipo: lista
    tipo_lista: compacta
  agentes_de_usuário_rastejadores:
    oculto: true
    padrão: "rss|bot|spider|crawler|facebook|archive|wayback|ping|monitor|lighthouse"
    tipo: lista
    tipo_lista: compacta
  agentes_de_bypass_de_verificação_de_rastejadores:
    oculto: true
    padrão: "cubot"
  origens_cors:
    padrão: ""
    tipo: lista
  usar_lista_branca_de_ips_admin:
    padrão: false
    cliente: true
  blocos_de_ip_na_lista_negra:
    padrão: ""
    tipo: lista
    tipo_lista: compacta
  hosts_internos_na_lista_branca:
    padrão: ""
    tipo: lista
  iframes_permitidos:
    padrão: "https://www.google.com/maps/embed?|https://www.openstreetmap.org/export/embed.html?|https://calendar.google.com/calendar/embed?|https://codepen.io/"
    tipo: lista
    cliente: true
  agentes_de_usuário_rastejadores_na_lista_branca:
    tipo: lista
    padrão: ""
    tipo_lista: compacta
  agentes_de_usuário_rastejadores_na_lista_negra:
    tipo: lista
    padrão: "mauibot|semrushbot|ahrefsbot|blexbot|seo spider"
    tipo_lista: compacta
  agentes_de_usuário_rastejadores_lentos:
    tipo: lista
    padrão: "bingbot"
    tipo_lista: compacta
  taxa_de_rastejadores_lentos: 60
  política_de_segurança_de_conteúdo:
    padrão: true
  política_de_segurança_de_conteúdo_apenas_relatório:
    padrão: false
  coletar_relatórios_de_política_de_segurança_de_conteúdo:
    padrão: false
  origem_de_script_de_política_de_segurança_de_conteúdo:
    tipo: lista_simples
    padrão: ""
  invalidar_email_de_admin_inativo_após_dias:
    padrão: 365
    min: 0
    max: 36500
  permitir_incorporação_do_site_em_um_iframe:
    padrão: false
    oculto: true
  enviar_lembrete_de_credenciais_antigas_dias:
    padrão: 0
    oculto: true

onebox:
  habilitar_onebox_de_vídeo_flash: false
  comprimento_máximo_do_onebox_do_post:
    padrão: 500
    padrão_local:
      ja: 200
      zh_CN: 200
      zh_TW: 200
  lista_negra_de_domínios_onebox:
    padrão: ""
    tipo: lista
    tipo_lista: compacta
  oneboxes_máximos_por_post:
    padrão: 50
    cliente: true
  lista_branca_de_domínios_onebox_inline:
    padrão: ""
    tipo: lista
    tipo_lista: compacta
  habilitar_onebox_inline_em_todos_os_domínios:
    padrão: false
  forçar_hosts_de_agente_de_usuário_personalizado:
    padrão: "http://codepen.io"
    tipo: lista
spam:
  adicionar_rel_nofollow_ao_conteúdo_do_usuário: true
  sensibilidade_de_esconder_post:
    tipo: enum
    enum: "ReviewableSensitivitySetting"
    padrão: 6
    cooldown_minutos_após_esconder_posts: 10
  sensibilidade_de_silenciar_novo_usuário:
    tipo: enum
    enum: "ReviewableSensitivitySetting"
    padrão: 3
  número_de_usuários_para_silenciar_novo_usuário: 3
  notificar_mods_quando_usuário_silenciado: false
  sinalizar_sockpuppets: false
  limite_de_host_de_spam_para_novo_usuário: 3
  domínios_de_host_de_spam_na_lista_branca:
    padrão: ""
    tipo: lista
  distância_levenshtein_emails_de_spammer:
    padrão: 2
    max: 3
  contas_novas_máximas_por_ip_de_registro: 3
  entradas_mínimas_de_banimento_para_agrupamento: 5
  idade_máxima_de_emails_não_combinados: 365
  idade_máxima_de_ips_não_combinados: 365
  número_de_sinalizadores_para_fechar_tópico: 5
  sensibilidade_de_fechamento_automático_de_tópico:
    tipo: enum
    enum: "ReviewableSensitivitySetting"
    padrão: 9
  horas_para_fechar_tópico:
    padrão: 4
    min: 1
  responder_automaticamente_a_acções_de_sinalização: true
  tempo_mínimo_de_digitacao_do_primeiro_post: 3000
  silenciar_automaticamente_digitadores_rápidos_no_primeiro_post: true
  nível_de_confiança_máximo_para_silenciar_digitadores_rápidos: 0
  regex_de_silenciamento_automático_do_primeiro_post: ""
  sinalizadores_de_alta_confiança_escondem_posts_automaticamente: true
    cooldown_horas_até_nova_sinalização:
    padrão: 24
    min: 0

  reivindicacao_revisavel:
    cliente: true
    tipo: enum
    padrão: desabilitado
    opções:
      - desabilitado
      - opcional
      - obrigatório

  tópicos_revisaveis_padrão:
    padrão: false
    cliente: true
  visibilidade_revisavel_padrão:
    cliente: true
    tipo: enum
    padrão: baixa
    enum: "ReviewablePrioritySetting"

limites_de_taxa:
  minutos_de_posts_únicos: 5
  limite_de_taxa_de_criacao_de_tópico: 15
  limite_de_taxa_de_criacao_de_post: 5
  limite_de_taxa_de_novo_usuário_criando_tópico: 120
  limite_de_taxa_de_novo_usuário_criando_post: 30
  limite_de_taxa_de_busca_anon:
    oculto: true
    padrão: 15
  limite_de_taxa_de_busca_usuário:
    oculto: true
    padrão: 30
  tópicos_máximos_por_dia: 20
  mensagens_pessoais_máximas_por_dia: 20
  curtidas_máximas_por_dia: 50
  favoritos_máximos_por_dia: 20
  sinalizações_máximas_por_dia: 20
  edições_máximas_por_dia: 30
  convites_máximos_por_dia: 10
  convites_de_tópico_máximos_por_dia: 30
  tópicos_máximos_no_primeiro_dia: 3
  respostas_máximas_no_primeiro_dia: 10
  multiplicador_de_curtidas_adicionais_por_dia_tl2: 1.5
  multiplicador_de_curtidas_adicionais_por_dia_tl3: 2
  multiplicador_de_curtidas_adicionais_por_dia_tl4: 3
  alertar_admins_se_erros_por_minuto:
    cliente: true
    padrão: 0
  alertar_admins_se_erros_por_hora:
    cliente: true
    padrão: 0
  impressões_máximas_por_hora_por_usuário:
    padrão: 5
    cliente: true
  logins_máximos_por_ip_por_hora:
    min: 1
    padrão: 30
  logins_máximos_por_ip_por_minuto:
    min: 1
    padrão: 6
  deleções_de_post_máximas_por_minuto:
    min: 1
    padrão: 2
  deleções_de_post_máximas_por_dia:
    min: 1
    padrão: 10
  limite_de_redenção_de_link_de_convite:
    min: 2
    max: 1000000
    padrão: 5000
    cliente: true

desenvolvedor:
  forçar_hostname:
    oculto: true
    padrão: ""
  porta:
    oculto: true
    padrão: ""
  habilitar_long_polling:
    cliente: true
    padrão: true
  intervalo_de_long_polling:
    padrão: 25000
    max: 25000
  url_base_de_long_polling:
    cliente: true
    padrão: "/"
  intervalo_de_background_polling:
    cliente: true
    padrão: 60000
    max: 99000
  intervalo_de_polling:
    cliente: true
    padrão: 3000
    max: 99000
  intervalo_de_anon_polling:
    cliente: true
    padrão: 30000
    max: 99000
  segundos_de_flush_de_timings:
    cliente: true
    padrão: 60
  segundos_de_limite_de_taxa_de_usuário_ativo: 60
  localização_verbose:
    padrão: false
    cliente: true
  multiplicador_de_visualizações_de_log_da_fórmula_de_tópicos_top:
    padrão: 2
  multiplicador_de_curtidas_do_primeiro_post_da_fórmula_de_tópicos_top:
    padrão: 0.5
  multiplicador_de_menos_curtidas_por_post_da_fórmula_de_tópicos_top:
    padrão: 3
  contagem_de_posts_antigos_para_rebake:
    padrão: 80
    min: 1
  migrar_para_novo_esquema:
    oculto: true
    padrão: false
  tópicos_novos_máximos:
    padrão: 500
    cliente: true
    oculto: true
  assistente_habilitado:
    padrão: true
    oculto: true
  ignorar_verificação_do_assistente:
    padrão: false
    oculto: true
  provedor_de_logging:
    oculto: true
    padrão: "default"
    tipo: "lista"
    opções:
      - "default"
      - "lograge"
  páginas_de_erro_bootstrap:
    oculto: true
    padrão: false
  habilitar_modo_seguro:
    padrão: true
    cliente: true

incorporação:
  incorporar_por_nome_de_usuário:
    padrão: ""
    tipo: nome_de_usuário
    oculto: true
  limite_de_post_de_incorporação:
    padrão: 100
    oculto: true
  limpador_de_título_de_incorporação:
    padrão: ""
    oculto: true
  seletor_de_lista_negra_de_incorporação:
    padrão: ""
    oculto: true
  lista_branca_de_classname_de_incorporação:
    padrão: "emoji"
    oculto: true

legal:
  url_de_tos:
    cliente: true
    padrão: ""
  url_de_política_de_privacidade:
    cliente: true
    padrão: ""
  url_de_faq:
    cliente: true
    padrão: ""
  detalhes_do_anonimizador_de_logs:
    padrão: true

backups:
  habilitar_backups:
    padrão: true
    cliente: true
  permitir_restauração:
    padrão: false
  localização_do_backup:
    padrão: "local"
    tipo: enum
    enum: "BackupLocationSiteSetting"
    cliente: true
  backups_máximos:
    cliente: true
    padrão: 5
  backups_automáticos_habilitados:
    padrão: true
  frequência_do_backup:
    min: 1
    max: 30
    padrão: 7
  bucket_s3_do_backup:
    padrão: ""
    regex: '^[a-z0-9\-\/]+$' # não pode usar '.' quando usando HTTPS
  desativar_limpeza_s3:
    padrão: false
  hora_do_dia_do_backup:
    padrão: "3:30"
    regex: "^((0?(0|1|2|3|4|5|6|7|8|9)|(10|11|12|13|14|15|16|17|18|19|20|21|22|23))):\\d\\d$"
  backup_com_uploads: true
  nível_de_compressão_gzip_para_uploads_no_backup:
    padrão: 1
    min: 1
    max: 9
  incluir_thumbnails_nos_backups:
    padrão: false
  incluir_uploads_s3_nos_backups:
    padrão: false
    oculto: true

busca:
  comprimento_mínimo_do_termo_de_busca:
    cliente: true
    padrão: 3
    padrão_local:
      zh_CN: 2
      zh_TW: 2
      ko: 2
      ja: 2
  tokenizar_busca_chinês_japonês_coreano: false
  preferir_posts_recentes_na_busca: false
  tamanho_de_posts_recentes_na_busca:
    padrão: 100000
    max: 100000
  registrar_queries_de_busca:
    cliente: true
    padrão: true
  tamanho_máximo_do_log_de_queries_de_busca:
    padrão: 1000000
    max: 1000000
  dias_máximos_de_retenção_do_log_de_queries_de_busca:
    padrão: 365 # 1 ano
    max: 1825 # 5 anos
  ignorar_acentos_na_busca:
    padrão: false
    padrão_local:
      ar: true
      ca: true
      cs: true
      el: true
      es: true
      fa_IR: true
      fr: true
      hu: true
      pt: true
      pt_BR: true
      ro: true
      sk: true
      tr_TR: true
  peso_de_prioridade_de_busca_de_categoria_muito_baixo:
    padrão: 0.6
    oculto: true
    validador: "CategorySearchPriorityWeightsValidator"
  peso_de_prioridade_de_busca_de_categoria_baixo:
    padrão: 0.8
    oculto: true
    validador: "CategorySearchPriorityWeightsValidator"
  peso_de_prioridade_de_busca_de_categoria_alto:
    padrão: 1.2
    oculto: true
    validador: "CategorySearchPriorityWeightsValidator"
  peso_de_prioridade_de_busca_de_categoria_muito_alto:
    padrão: 1.4
    oculto: true
    validador: "CategorySearchPriorityWeightsValidator"

não_categorizado:
  verificações_de_versão:
    cliente: true
    padrão: true
  emails_de_nova_versão: true
  enviar_mensagem_de_boas_vindas: true

  suprimir_badge_de_não_categorizado:
    cliente: true
    padrão: true

  contagem_de_categorias_no_dropdown_do_cabeçalho:
    cliente: true
    padrão: 8

  método_de_geração_de_slug:
    padrão: "ascii"
    enum: "SlugSetting"
    cliente: true
    padrão_local:
      ja: "none"
      zh_CN: "none"
      zh_TW: "none"

  normalizações_de_permalink:
    padrão: ""
    tipo: lista

  resultados_similares_máximos: 5
  tópicos_similares_mínimos: 50

  horas_de_tempo_limite_de_visita_anterior: 1
  peso_de_curtida_de_staff: 3
  horas_de_duração_de_visualização_de_tópico: 8
  horas_de_duração_de_visualização_de_perfil_de_usuário: 8

  # Modo resumo
  limite_de_pontuação_de_resumo: 15
  posts_necessários_para_resumo: 50
  curtidas_necessárias_para_resumo: 1
  filtro_de_porcentagem_de_resumo: 20
  resultados_máximos_de_resumo: 100

  valores_de_calor_de_tópico_automáticos: true

  # Limites de calor de visualização
  calor_de_visualização_de_tópico_baixo:
    cliente: true
    padrão: 1000
  calor_de_visualização_de_tópico_médio:
    cliente: true
    padrão: 2000
  calor_de_visualização_de_tópico_alto:
    cliente: true
    padrão: 3500

  # Limites de calor de post/curtida
  calor_de_curtida_de_post_de_tópico_baixo:
    cliente: true
    padrão: 0.5
  calor_de_curtida_de_post_de_tópico_médio:
    cliente: true
    padrão: 1.0
  calor_de_curtida_de_post_de_tópico_alto:
    cliente: true
    padrão: 2.0

  # Limites de calor de edição de histórico
  horas_de_historico_baixo:
    cliente: true
    padrão: 12
  horas_de_historico_médio:
    cliente: true
    padrão: 24
  horas_de_historico_alto:
    cliente: true
    padrão: 48

  # Limites de mapa frio
  dias_de_idade_fria_baixo:
    padrão: 14
    max: 36500
    cliente: true
  dias_de_idade_fria_médio:
    padrão: 90
    max: 36500
    cliente: true
  dias_de_idade_fria_alto:
    padrão: 180
    max: 36500
    cliente: true

  # Avisos
  educar_até_posts: 2
  limite_de_respostas_sequenciais: 2
  limite_de_get_a_room: 3
  porcentagem_mínima_de_tópico_dominante: 20
  desabilitar_mensagem_de_educacao_de_avatar: false

  aviso_global:
    padrão: ""
    cliente: true
  tem_dica_de_login:
    padrão: false
    oculto: true

  # Nada além deste limite é considerado novo
  # isso é calculado dinamicamente a cada 15 minutos
  tempo_mínimo_de_tópicos_novos:
    padrão: 0
    oculto: true

  # IDs de Categoria
  id_de_categoria_lounge:
    padrão: -1
    oculto: true
  id_de_categoria_meta:
    padrão: -1
    oculto: true
  id_de_categoria_staff:
    padrão: -1
    oculto: true
  id_de_categoria_não_categorizado:
    padrão: -1
    oculto: true

  notificar_sobre_sinalizações_após: 48

  mostrar_aviso_de_criacao_de_tópicos:
    cliente: true
    padrão: true

  habilitar_avatares_de_sistema:
    oculto: true
    padrão: true

  desabilitar_notificações_de_edição_de_sistema: true

  limite_de_consolidacao_de_notificações:
    padrão: 3
    min: 0

  janela_de_consolidacao_de_notificações_de_curtidas_mins:
    padrão: 120
    min: 1

  deletar_rascunhos_antes_de_n_dias:
    padrão: 180
    max: 36500

  backup_de_rascunhos_para_pm_comprimento:
    padrão: 0
    oculto: true

  id_de_tópico_de_tos:
    padrão: -1
    oculto: true
  id_de_tópico_de_diretrizes:
    padrão: -1
    oculto: true
  id_de_tópico_de_privacidade:
    padrão: -1
    oculto: true
  id_de_tópico_de_boas_vindas:
    padrão: -1
    oculto: true
  id_de_tópico_de_boas_vindas_lounge:
    padrão: -1
    oculto: true
  id_de_tópico_de_início_rápido_admin:
    padrão: -1
    oculto: true

  usuários_mínimos_no_modo_bootstrap:
    padrão: 50
    cliente: true
    max: 5000

  modo_bootstrap_habilitado:
    padrão: false
    cliente: true
    oculto: true

  desfixar_tópicos_automaticamente:
    padrão: true
    cliente: true

  contagem_de_palavras_de_tempo_de_leitura:
    padrão: 500
    cliente: true
    padrão_local:
      ja: 350
      zh_CN: 350
      zh_TW: 350

  título_da_página_do_tópico_inclui_categoria:
    padrão: true
    cliente: true

  banner_de_instalação_de_app_nativo_ios: false

  banner_de_instalação_de_app_nativo_android: false

  id_de_app_ios:
    padrão: "1173672076"
    oculto: true

  id_de_app_android:
    padrão: "com.discourse"
    oculto: true

  regex_de_navegador_de_exibição_de_pwa:
    padrão: "a^"
    oculto: true

  associação_de_app_android:
    padrão: ""
    textarea: true

  associação_de_app_ios:
    padrão: ""
    textarea: true

  compartilhar_estatísticas_anonimizadas: true

  lidar_automaticamente_com_idade_em_fila:
    padrão: 60
    min: 0

  subconjunto_de_ícones_svg:
    padrão: ""
    tipo: "lista"
    tipo_lista: "compacta"
    cliente: true

  sempre_incluir_resumos_de_tópicos:
    padrão: false
    oculto: true

  convites_em_lote_máximos:
    padrão: 50000
    oculto: true

  robots_txt_sobrescrito:
    padrão: ""
    oculto: true

preferências_de_usuário:
  frequência_de_digest_de_email_padrão:
    enum: "DigestEmailSiteSetting"
    padrão: 10080
  incluir_tl0_nos_digests_padrão: false
  nível_de_email_padrão:
    enum: "EmailLevelSiteSetting"
    padrão: 1
  nível_de_mensagens_de_email_padrão:
    enum: "EmailLevelSiteSetting"
    padrão: 0
  modo_de_mailing_list_de_email_padrão: false
  frequência_de_modo_de_mailing_list_de_email_padrão:
    enum: "MailingListModeSiteSetting"
    padrão: 1
  desabilitar_modo_de_mailing_list:
    padrão: false
    cliente: true
  respostas_anteriores_de_email_padrão:
    enum: "PreviousRepliesSiteSetting"
    padrão: 2
  in_reply_to_de_email_padrão:
    padrão: true

  minutos_de_duração_de_tópico_novo_outros_padrão:
    enum: "NewTopicDurationSiteSetting"
    padrão: 2880
  milissegundos_de_rastreamento_automático_de_tópicos_outros_padrão:
    enum: "AutoTrackDurationSiteSetting"
    padrão: 240000
  nível_de_notificação_ao_responder_outros_padrão:
    enum: "NotificationLevelWhenReplyingSiteSetting"
    padrão: 2
  links_externos_em_nova_aba_outros_padrão: false
  habilitar_citação_outros_padrão: true
  habilitar_defer_outros_padrão: false
  favicon_dinâmico_outros_padrão: false
  frequência_de_notificação_de_curtida_outros_padrão:
    enum: "LikeNotificationFrequencySiteSetting"
    padrão: 1

  desfixagem_automática_de_tópicos_padrão:
    padrão: true
    cliente: true

  categorias_de_monitoramento_padrão:
    tipo: lista_de_categorias
    padrão: ""
  categorias_de_rastreamento_padrão:
    tipo: lista_de_categorias
    padrão: ""
  categorias_de_mudo_padrão:
    tipo: lista_de_categorias
    padrão: ""
  categorias_de_monitoramento_do_primeiro_post_padrão:
    tipo: lista_de_categorias
    padrão: ""
  mutar_todas_as_categorias_por_padrão:
    padrão: false
    cliente: true

  tags_de_monitoramento_padrão:
    tipo: lista_de_tags
    padrão: ""
  tags_de_rastreamento_padrão:
    tipo: lista_de_tags
    padrão: ""
  tags_de_mudo_padrão:
    tipo: lista_de_tags
    padrão: ""
  tags_de_monitoramento_do_primeiro_post_padrão:
    tipo: lista_de_tags
    padrão: ""

  tamanho_de_texto_padrão:
    tipo: enum
    padrão: normal
    opções:
      - menor
      - normal
      - maior
      - maior

  modo_de_contagem_de_título_padrão:
    tipo: enum
    padrão: notificações
    opções:
      - notificações
      - contextual
api:
  período_de_dias_para_reter_eventos_de_web_hook:
    padrão: 30
    max: 36500
  tentar_novamente_eventos_de_web_hook:
    padrão: false
  epoch_de_último_uso_de_chave_de_api:
    padrão: "" # O valor é adicionado em uma migração
    oculto: true
  dias_para_revogar_chaves_de_api:
    padrão: 180
    max: 36500

user_api:
  permitir_chaves_de_api_de_usuário:
    padrão: true
  permitir_escopos_de_chave_de_api_de_usuário:
    padrão: "read|write|message_bus|push|notifications|session_info|one_time_password"
    tipo: lista
  chaves_de_api_máximas_por_usuário:
    padrão: 10
  chave_secreta_de_push_de_api:
    padrão: ""
    oculto: true
  nível_de_confiança_mínimo_para_chave_de_api_de_usuário:
    padrão: 0
    enum: "TrustLevelSetting"
  urls_de_push_de_api_de_usuário_permitidas:
    padrão: ""
    tipo: lista
  redirecionamentos_de_auth_de_api_de_usuário_permitidos:
    padrão: "https://api.discourse.org/api/auth_redirect|discourse://auth_redirect"
    tipo: lista
  dias_para_expirar_chaves_de_api_de_usuário:
    padrão: 180
    max: 36500

tags:
  tagging_habilitado:
    cliente: true
    padrão: false
    atualizar: true
  estilo_de_tag:
    cliente: true
    tipo: enum
    padrão: "simples"
    opções:
      - simples
      - bullet
      - box
    {% raw %}
    prévia: '<div class="discourse-tags"><span class="discourse-tag {{value}}">tag1</span><span class="discourse-tag {{value}}">tag2</span></div>'
    {% endraw %}
  tags_máximas_por_tópico:
    padrão: 5
    cliente: true
  comprimento_máximo_de_tag:
    padrão: 20
    cliente: true
  confiança_mínima_para_criar_tag:
    padrão: "3"
    enum: "TrustLevelAndStaffSetting"
  nível_de_confiança_mínimo_para_taggar_tópicos:
    padrão: "0"
    enum: "TrustLevelAndStaffSetting"
    cliente: true
  resultados_máximos_de_busca_de_tag:
    cliente: true
    padrão: 5
    min: 1
  mostrar_filtro_por_tag:
    cliente: true
    padrão: false
    atualizar: true
  tags_máximas_na_lista_de_filtro:
    cliente: true
    padrão: 30
    min: 1
    atualizar: true
  tags_classificadas_alfabeticamente:
    cliente: true
    padrão: false
    atualizar: true
  tags_listadas_por_grupo:
    cliente: true
    padrão: false
  permitir_staff_para_taggar_pms:
    padrão: false
  suprimir_tags_sobrepostas_na_lista:
    padrão: false
    cliente: true
  remover_tags_mudas_do_latest:
    cliente: true
    tipo: enum
    padrão: sempre
    enum: RemoveMutedTagsFromLatestSiteSetting
  forçar_tags_em_minúsculas:
    padrão: true
    cliente: true

dashboard:
  relatórios_ocultos_do_dashboard:
    cliente: true
    tipo: lista
    tipo_lista: compacta
    padrão: ""
    permitir_qualquer: true
  abas_visíveis_do_dashboard:
    cliente: true
    tipo: lista
    tipo_lista: compacta
    padrão: "moderation|security|reports"
    permitir_qualquer: false
    opções:
      - moderation
      - security
      - reports
  métricas_de_atividade_da_aba_geral_do_dashboard:
    cliente: true
    tipo: lista
    tipo_lista: compacta
    padrão: "page_view_total_reqs|visits|time_to_first_response|likes|flags|user_to_user_private_messages_with_replies"
    permitir_qualquer: false
    opções:
      - page_view_total_reqs
      - visits
      - time_to_first_response
      - likes
      - flags
      - user_to_user_private_messages_with_replies
      - signups

mas acho que, sinceramente, vou apenas montar o arquivo de configuração com suas configurações..

Sei que vocês amam essa coisa de launcher, mas e o docker-compose? Sei que isso já foi levantado centenas de vezes e tenho certeza de que funciona muito bem para vocês, pelo que posso ver :slight_smile: mas existe um mundo inteiro de desenvolvedores Docker que sabem como funciona… seria ótimo ter um exemplo de docker-compose :slight_smile:

Acho que você deve priorizar mais o suporte ao discoursey e menos ao dockery. Há muitas explicações sobre isso para que as pessoas entendam por que as coisas foram feitas dessa maneira.

Hmm, não, porque o Docker é uma maneira padrão de executar aplicativos; e envolvê-lo em um script personalizado é… reinventar a roda.

O docker-compose é um manual de execução que pode ser entregue a qualquer provedor de serviços de nível intermediário, e eles saberão o que fazer com ele. Também se integra perfeitamente a ferramentas como o SaltStack, ao contrário do script.

Claro, entendo o motivo. O script foi criado há muitos anos, quando o Docker era novo… e, como já disse, é claro que ele é uma grande ajuda para a equipe de suporte.

Além disso, quando você migrar para o Kubernetes… bem, isso será interessante.

E, ao olhar ao redor, já existem toneladas de pessoas criando Helm charts para o Discourse e docker-compose… seria bom ter, pelo menos, algum suporte para isso.

Mas tudo bem… estou usando o launcher agora e vou extrair o que preciso dele :slight_smile:

Sugiro que você leia esta discussão. Can Discourse ship frequent Docker images that do not need to be bootstrapped?

Obrigado por isso, vou ler.

Mas o que é importante saber é que o Docker não é mais algo desconhecido; e não oferecê-lo suporte adequadamente impedirá que organizações maiores o considerem.

Tudo certo… continuem com o bom trabalho e obrigado pela paixão.

Isso simplesmente não é verdade; o Discourse é usado em algumas das maiores comunidades da internet.

Grandes organizações ou contratam pessoal técnico que não quer pacotes prontos e simplificados, ou estão satisfeitos em terceirizar para empresas como a CDCK.

Não há nada de errado com a instalação padrão para comunidades de porte médio e até mesmo grande. Se você quiser saber como o launcher interage com o Docker, o código-fonte está disponível para investigação.