容器重启 - discourse 尝试重新安装

你好,

首先,感谢你们提供了市面上最好的论坛软件。

我遇到了一个问题:在重启运行 Discourse 的 Docker 容器时,Discourse 总是尝试重新安装自己。

我选择了多容器配置(默认情况下更优)。

每次重启 Discourse 容器时,该进程总是尝试重新安装。

我原本以为它会检测到数据库已存在并直接可用,但它总是尝试重新安装,并抱怨 ID 冲突。

是否有某个设置可以使其不再重新安装自己?

提前感谢。

你能解释一下你是如何尝试重启容器的吗?

嘿,斯蒂芬,

就像你重启其他容器一样,运行 docker restart discourse

你是如何创建这两个容器的?

你看到了什么看起来像是在尝试安装的消息?

嘿,

伙计们,这是 Docker,所以启动方式没有太多其他选择。

它有一组环境变量。

nami    INFO  正在初始化 postgresql-client
    nami    INFO  postgresql-client 初始化成功
    nami    INFO  正在初始化 discourse
    discour INFO  正在修补 Discourse...
    postgre INFO  尝试连接 PostgreSQL 服务器
    postgre INFO  发现 PostgreSQL 服务器正在监听 postgres:5432
    postgre INFO  PostgreSQL 服务器已在 postgres:5432 监听并正常工作
    discour INFO  正在准备 Discourse 环境...
    discour INFO  正在配置 Discourse 数据库文件...
    discour INFO  正在配置 Redis...
    discour INFO  正在 Discourse 中设置 SMTP...
    discour INFO  正在配置 Discourse 数据库...
    discour INFO  正在为 Discourse 启用 PostgreSQL 插件...
    discour INFO  正在迁移数据库...
    discour INFO  正在创建 Discourse 管理员用户...
    discour INFO  正在配置您的 Discourse 安装...
    执行'postInstallation'时出错:ERROR: 重复键值违反了唯一约束 "index_site_settings_on_name"
    DETAIL: 键 (name)=(site_contact_username) 已存在。

所以数据库确实存在,但不知为何 Discourse 又尝试重新安装自己……问题是,如何防止这种情况发生?

是否有环境变量可以控制?(我原本期望系统能检测到数据库和配置已存在?)

您正在使用 Bitnami 吗?

您是如何创建容器的?

没错,因为“官方方案”其实不算真正的 Docker 方案,而且过于依赖自定义脚本。我想这样的话也就得不到支持了,哈哈。

Bitnami 镜像不受支持。如果您想使用它,需要与他们联系。

此外,该镜像也非常过时。

说得通……多容器方案有 docker-compose 文件吗?

抱歉,Stephen,我很想使用官方镜像;

discourse/base - Docker Image 那我就改用这个了?

@Stephen is there a list of the environment variables somewhere?

I guess they are just the config file prefixed with DISCOURSE_

?

# Available options:
#
# default            - The default value of the setting. For upload site settings, use the id of the upload seeded in db/fixtures/010_uploads.rb.
# client             - Set to true if the javascript should have access to this setting's value.
# refresh            - Set to true if clients should refresh when the setting is changed.
# min                - For a string setting, the minimum length. For an integer setting, the minimum value.
# max                - For a string setting, the maximum length. For an integer setting, the maximum value.
# regex              - A regex that the value must match.
# validator          - The name of the class that will be use to validate the value of the setting.
# allow_any          - For choice settings allow items not specified in the choice list (default true)
# secret             - Set to true if input type should be password and value needs to be scrubbed from logs (default false).
# enum               - The setting has a fixed set of allowed values, and only one can be chosen.
#                      Set to the class name that defines the set.
# locale_default     - A hash which overrides according to `SiteSetting.default_locale`.
#                      The key should be as the same as possible value of default_locale.
#
#
# type: email    - Must be a valid email address.
# type: username - Must match the username of an existing user.
# type: list     - A list of values, chosen from a set of valid values defined in the choices option.
# type: enum     - A single value, chosen from a set of valid values in the choices option.
#
# A type:list setting with the word 'colors' in its name will make color values have a bold line of the corresponding color
#
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

security:
  detailed_404: false
  enforce_second_factor:
    client: true
    type: enum
    default: "no"
    choices:
      - "no"
      - "staff"
      - "all"
  force_https:
    default: {{ config | traverse("force_https", False) }}
  same_site_cookies:
    default: Lax
    type: enum
    choices:
      - Lax
      - Strict
      - Disabled
      - None
    regex: "^(Lax|Strict|Disabled|None)$"
  enable_escaped_fragments: true
  allow_index_in_robots_txt: true
  moderators_create_categories: false
  moderators_view_emails:
    client: true
    default: false
  non_crawler_user_agents:
    hidden: true
    default: "trident|webkit|gecko|chrome|safari|msie|opera|goanna|discourse"
    type: list
    list_type: compact
  crawler_user_agents:
    hidden: true
    default: "rss|bot|spider|crawler|facebook|archive|wayback|ping|monitor|lighthouse"
    type: list
    list_type: compact
  crawler_check_bypass_agents:
    hidden: true
    default: "cubot"
  cors_origins:
    default: ""
    type: list
  use_admin_ip_whitelist:
    default: false
    client: true
  blacklist_ip_blocks:
    default: ""
    type: list
    list_type: compact
  whitelist_internal_hosts:
    default: ""
    type: list
  allowed_iframes:
    default: "https://www.google.com/maps/embed?|https://www.openstreetmap.org/export/embed.html?|https://calendar.google.com/calendar/embed?|https://codepen.io/"
    type: list
    client: true
  whitelisted_crawler_user_agents:
    type: list
    default: ""
    list_type: compact
  blacklisted_crawler_user_agents:
    type: list
    default: "mauibot|semrushbot|ahrefsbot|blexbot|seo spider"
    list_type: compact
  slow_down_crawler_user_agents:
    type: list
    default: "bingbot"
    list_type: compact
  slow_down_crawler_rate: 60
  content_security_policy:
    default: true
  content_security_policy_report_only:
    default: false
  content_security_policy_collect_reports:
    default: false
  content_security_policy_script_src:
    type: simple_list
    default: ""
  invalidate_inactive_admin_email_after_days:
    default: 365
    min: 0
    max: 36500
  allow_embedding_site_in_an_iframe:
    default: false
    hidden: true
  send_old_credential_reminder_days:
    default: 0
    hidden: true

onebox:
  enable_flash_video_onebox: false
  post_onebox_maxlength:
    default: 500
    locale_default:
      ja: 200
      zh_CN: 200
      zh_TW: 200
  onebox_domains_blacklist:
    default: ""
    type: list
    list_type: compact
  max_oneboxes_per_post:
    default: 50
    client: true
  inline_onebox_domains_whitelist:
    default: ""
    type: list
    list_type: compact
  enable_inline_onebox_on_all_domains:
    default: false
  force_custom_user_agent_hosts:
    default: "http://codepen.io"
    type: list
spam:
  add_rel_nofollow_to_user_content: true
  hide_post_sensitivity:
    type: enum
    enum: "ReviewableSensitivitySetting"
    default: 6
  cooldown_minutes_after_hiding_posts: 10
  silence_new_user_sensitivity:
    type: enum
    enum: "ReviewableSensitivitySetting"
    default: 3
  num_users_to_silence_new_user: 3
  notify_mods_when_user_silenced: false
  flag_sockpuppets: false
  newuser_spam_host_threshold: 3
  white_listed_spam_host_domains:
    default: ""
    type: list
  levenshtein_distance_spammer_emails:
    default: 2
    max: 3
  max_new_accounts_per_registration_ip: 3
  min_ban_entries_for_roll_up: 5
  max_age_unmatched_emails: 365
  max_age_unmatched_ips: 365
  num_flaggers_to_close_topic: 5
  auto_close_topic_sensitivity:
    type: enum
    enum: "ReviewableSensitivitySetting"
    default: 9
  num_hours_to_close_topic:
    default: 4
    min: 1
  auto_respond_to_flag_actions: true
  min_first_post_typing_time: 3000
  auto_silence_fast_typers_on_first_post: true
  auto_silence_fast_typers_max_trust_level: 0
  auto_silence_first_post_regex: ""
  high_trust_flaggers_auto_hide_posts: true
  cooldown_hours_until_reflag:
    default: 24
    min: 0

  reviewable_claiming:
    client: true
    type: enum
    default: disabled
    choices:
      - disabled
      - optional
      - required

  reviewable_default_topics:
    default: false
    client: true
  reviewable_default_visibility:
    client: true
    type: enum
    default: low
    enum: "ReviewablePrioritySetting"

rate_limits:
  unique_posts_mins: 5
  rate_limit_create_topic: 15
  rate_limit_create_post: 5
  rate_limit_new_user_create_topic: 120
  rate_limit_new_user_create_post: 30
  rate_limit_search_anon:
    hidden: true
    default: 15
  rate_limit_search_user:
    hidden: true
    default: 30
  max_topics_per_day: 20
  max_personal_messages_per_day: 20
  max_likes_per_day: 50
  max_bookmarks_per_day: 20
  max_flags_per_day: 20
  max_edits_per_day: 30
  max_invites_per_day: 10
  max_topic_invitations_per_day: 30
  max_topics_in_first_day: 3
  max_replies_in_first_day: 10
  tl2_additional_likes_per_day_multiplier: 1.5
  tl3_additional_likes_per_day_multiplier: 2
  tl4_additional_likes_per_day_multiplier: 3
  alert_admins_if_errors_per_minute:
    client: true
    default: 0
  alert_admins_if_errors_per_hour:
    client: true
    default: 0
  max_prints_per_hour_per_user:
    default: 5
    client: true
  max_logins_per_ip_per_hour:
    min: 1
    default: 30
  max_logins_per_ip_per_minute:
    min: 1
    default: 6
  max_post_deletions_per_minute:
    min: 1
    default: 2
  max_post_deletions_per_day:
    min: 1
    default: 10
  invite_link_max_redemptions_limit:
    min: 2
    max: 1000000
    default: 5000
    client: true

developer:
  force_hostname:
    hidden: true
    default: ""
  port:
    hidden: true
    default: ""
  enable_long_polling:
    client: true
    default: true
  long_polling_interval:
    default: 25000
    max: 25000
  long_polling_base_url:
    client: true
    default: "/"
  background_polling_interval:
    client: true
    default: 60000
    max: 99000
  polling_interval:
    client: true
    default: 3000
    max: 99000
  anon_polling_interval:
    client: true
    default: 30000
    max: 99000
  flush_timings_secs:
    client: true
    default: 60
  active_user_rate_limit_secs: 60
  verbose_localization:
    default: false
    client: true
  top_topics_formula_log_views_multiplier:
    default: 2
  top_topics_formula_first_post_likes_multiplier:
    default: 0.5
  top_topics_formula_least_likes_per_post_multiplier:
    default: 3
  rebake_old_posts_count:
    default: 80
    min: 1
  migrate_to_new_scheme:
    hidden: true
    default: false
  max_new_topics:
    default: 500
    client: true
    hidden: true
  wizard_enabled:
    default: true
    hidden: true
  bypass_wizard_check:
    default: false
    hidden: true
  logging_provider:
    hidden: true
    default: "default"
    type: "list"
    choices:
      - "default"
      - "lograge"
  bootstrap_error_pages:
    hidden: true
    default: false
  enable_safe_mode:
    default: true
    client: true

embedding:
  embed_by_username:
    default: ""
    type: username
    hidden: true
  embed_post_limit:
    default: 100
    hidden: true
  embed_title_scrubber:
    default: ""
    hidden: true
  embed_blacklist_selector:
    default: ""
    hidden: true
  embed_classname_whitelist:
    default: "emoji"
    hidden: true

legal:
  tos_url:
    client: true
    default: ""
  privacy_policy_url:
    client: true
    default: ""
  faq_url:
    client: true
    default: ""
  log_anonymizer_details:
    default: true

backups:
  enable_backups:
    default: true
    client: true
  allow_restore:
    default: false
  backup_location:
    default: "local"
    type: enum
    enum: "BackupLocationSiteSetting"
    client: true
  maximum_backups:
    client: true
    default: 5
  automatic_backups_enabled:
    default: true
  backup_frequency:
    min: 1
    max: 30
    default: 7
  s3_backup_bucket:
    default: ""
    regex: '^[a-z0-9\-\/]+$' # can't use '.' when using HTTPS
  s3_disable_cleanup:
    default: false
  backup_time_of_day:
    default: "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_with_uploads: true
  backup_gzip_compression_level_for_uploads:
    default: 1
    min: 1
    max: 9
  include_thumbnails_in_backups:
    default: false
  include_s3_uploads_in_backups:
    default: false
    hidden: true

search:
  min_search_term_length:
    client: true
    default: 3
    locale_default:
      zh_CN: 2
      zh_TW: 2
      ko: 2
      ja: 2
  search_tokenize_chinese_japanese_korean: false
  search_prefer_recent_posts: false
  search_recent_posts_size:
    default: 100000
    max: 100000
  log_search_queries:
    client: true
    default: true
  search_query_log_max_size:
    default: 1000000
    max: 1000000
  search_query_log_max_retention_days:
    default: 365 # 1 year
    max: 1825 # 5 years
  search_ignore_accents:
    default: false
    locale_default:
      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
  category_search_priority_very_low_weight:
    default: 0.6
    hidden: true
    validator: "CategorySearchPriorityWeightsValidator"
  category_search_priority_low_weight:
    default: 0.8
    hidden: true
    validator: "CategorySearchPriorityWeightsValidator"
  category_search_priority_high_weight:
    default: 1.2
    hidden: true
    validator: "CategorySearchPriorityWeightsValidator"
  category_search_priority_very_high_weight:
    default: 1.4
    hidden: true
    validator: "CategorySearchPriorityWeightsValidator"

uncategorized:
  version_checks:
    client: true
    default: true
  new_version_emails: true
  send_welcome_message: true

  suppress_uncategorized_badge:
    client: true
    default: true

  header_dropdown_category_count:
    client: true
    default: 8

  slug_generation_method:
    default: "ascii"
    enum: "SlugSetting"
    client: true
    locale_default:
      ja: "none"
      zh_CN: "none"
      zh_TW: "none"

  permalink_normalizations:
    default: ""
    type: list

  max_similar_results: 5
  minimum_topics_similar: 50

  previous_visit_timeout_hours: 1
  staff_like_weight: 3
  topic_view_duration_hours: 8
  user_profile_view_duration_hours: 8

  # Summary mode
  summary_score_threshold: 15
  summary_posts_required: 50
  summary_likes_required: 1
  summary_percent_filter: 20
  summary_max_results: 100

  automatic_topic_heat_values: true

  # View heat thresholds
  topic_views_heat_low:
    client: true
    default: 1000
  topic_views_heat_medium:
    client: true
    default: 2000
  topic_views_heat_high:
    client: true
    default: 3500

  # Post/Like heat thresholds
  topic_post_like_heat_low:
    client: true
    default: 0.5
  topic_post_like_heat_medium:
    client: true
    default: 1.0
  topic_post_like_heat_high:
    client: true
    default: 2.0

  # History edit heat thresholds
  history_hours_low:
    client: true
    default: 12
  history_hours_medium:
    client: true
    default: 24
  history_hours_high:
    client: true
    default: 48

  # Cold map thresholds
  cold_age_days_low:
    default: 14
    max: 36500
    client: true
  cold_age_days_medium:
    default: 90
    max: 36500
    client: true
  cold_age_days_high:
    default: 180
    max: 36500
    client: true

  # Warnings
  educate_until_posts: 2
  sequential_replies_threshold: 2
  get_a_room_threshold: 3
  dominating_topic_minimum_percent: 20
  disable_avatar_education_message: false

  global_notice:
    default: ""
    client: true
  has_login_hint:
    default: false
    hidden: true

  # Nothing past this threshold is ever considered new
  # this is calculated dynamically every 15 minutes
  min_new_topics_time:
    default: 0
    hidden: true

  # Category IDs
  lounge_category_id:
    default: -1
    hidden: true
  meta_category_id:
    default: -1
    hidden: true
  staff_category_id:
    default: -1
    hidden: true
  uncategorized_category_id:
    default: -1
    hidden: true

  notify_about_flags_after: 48

  show_create_topics_notice:
    client: true
    default: true

  enable_system_avatars:
    hidden: true
    default: true

  disable_system_edit_notifications: true

  notification_consolidation_threshold:
    default: 3
    min: 0

  likes_notification_consolidation_window_mins:
    default: 120
    min: 1

  delete_drafts_older_than_n_days:
    default: 180
    max: 36500

  backup_drafts_to_pm_length:
    default: 0
    hidden: true

  tos_topic_id:
    default: -1
    hidden: true
  guidelines_topic_id:
    default: -1
    hidden: true
  privacy_topic_id:
    default: -1
    hidden: true
  welcome_topic_id:
    default: -1
    hidden: true
  lounge_welcome_topic_id:
    default: -1
    hidden: true
  admin_quick_start_topic_id:
    default: -1
    hidden: true

  bootstrap_mode_min_users:
    default: 50
    client: true
    max: 5000

  bootstrap_mode_enabled:
    default: false
    client: true
    hidden: true

  automatically_unpin_topics:
    default: true
    client: true

  read_time_word_count:
    default: 500
    client: true
    locale_default:
      ja: 350
      zh_CN: 350
      zh_TW: 350

  topic_page_title_includes_category:
    default: true
    client: true

  native_app_install_banner_ios: false

  native_app_install_banner_android: false

  ios_app_id:
    default: "1173672076"
    hidden: true

  android_app_id:
    default: "com.discourse"
    hidden: true

  pwa_display_browser_regex:
    default: "a^"
    hidden: true

  app_association_android:
    default: ""
    textarea: true

  app_association_ios:
    default: ""
    textarea: true

  share_anonymized_statistics: true

  auto_handle_queued_age:
    default: 60
    min: 0

  svg_icon_subset:
    default: ""
    type: "list"
    list_type: "compact"
    client: true

  always_include_topic_excerpts:
    default: false
    hidden: true

  max_bulk_invites:
    default: 50000
    hidden: true

  overridden_robots_txt:
    default: ""
    hidden: true

user_preferences:
  default_email_digest_frequency:
    enum: "DigestEmailSiteSetting"
    default: 10080
  default_include_tl0_in_digests: false
  default_email_level:
    enum: "EmailLevelSiteSetting"
    default: 1
  default_email_messages_level:
    enum: "EmailLevelSiteSetting"
    default: 0
  default_email_mailing_list_mode: false
  default_email_mailing_list_mode_frequency:
    enum: "MailingListModeSiteSetting"
    default: 1
  disable_mailing_list_mode:
    default: false
    client: true
  default_email_previous_replies:
    enum: "PreviousRepliesSiteSetting"
    default: 2
  default_email_in_reply_to:
    default: true

  default_other_new_topic_duration_minutes:
    enum: "NewTopicDurationSiteSetting"
    default: 2880
  default_other_auto_track_topics_after_msecs:
    enum: "AutoTrackDurationSiteSetting"
    default: 240000
  default_other_notification_level_when_replying:
    enum: "NotificationLevelWhenReplyingSiteSetting"
    default: 2
  default_other_external_links_in_new_tab: false
  default_other_enable_quoting: true
  default_other_enable_defer: false
  default_other_dynamic_favicon: false
  default_other_like_notification_frequency:
    enum: "LikeNotificationFrequencySiteSetting"
    default: 1

  default_topics_automatic_unpin:
    default: true
    client: true

  default_categories_watching:
    type: category_list
    default: ""
  default_categories_tracking:
    type: category_list
    default: ""
  default_categories_muted:
    type: category_list
    default: ""
  default_categories_watching_first_post:
    type: category_list
    default: ""
  mute_all_categories_by_default:
    default: false
    client: true

  default_tags_watching:
    type: tag_list
    default: ""
  default_tags_tracking:
    type: tag_list
    default: ""
  default_tags_muted:
    type: tag_list
    default: ""
  default_tags_watching_first_post:
    type: tag_list
    default: ""

  default_text_size:
    type: enum
    default: normal
    choices:
      - smaller
      - normal
      - larger
      - largest

  default_title_count_mode:
    type: enum
    default: notifications
    choices:
      - notifications
      - contextual
api:
  retain_web_hook_events_period_days:
    default: 30
    max: 36500
  retry_web_hook_events:
    default: false
  api_key_last_used_epoch:
    default: "" # Value is added in a migration
    hidden: true
  revoke_api_keys_days:
    default: 180
    max: 36500

user_api:
  allow_user_api_keys:
    default: true
  allow_user_api_key_scopes:
    default: "read|write|message_bus|push|notifications|session_info|one_time_password"
    type: list
  max_api_keys_per_user:
    default: 10
  push_api_secret_key:
    default: ""
    hidden: true
  min_trust_level_for_user_api_key:
    default: 0
    enum: "TrustLevelSetting"
  allowed_user_api_push_urls:
    default: ""
    type: list
  allowed_user_api_auth_redirects:
    default: "https://api.discourse.org/api/auth_redirect|discourse://auth_redirect"
    type: list
  expire_user_api_keys_days:
    default: 180
    max: 36500

tags:
  tagging_enabled:
    client: true
    default: false
    refresh: true
  tag_style:
    client: true
    type: enum
    default: "simple"
    choices:
      - simple
      - bullet
      - box
    {% raw %}
    preview: '<div class="discourse-tags"><span class="discourse-tag {{value}}">tag1</span><span class="discourse-tag {{value}}">tag2</span></div>'
    {% endraw %}
  max_tags_per_topic:
    default: 5
    client: true
  max_tag_length:
    default: 20
    client: true
  min_trust_to_create_tag:
    default: "3"
    enum: "TrustLevelAndStaffSetting"
  min_trust_level_to_tag_topics:
    default: "0"
    enum: "TrustLevelAndStaffSetting"
    client: true
  max_tag_search_results:
    client: true
    default: 5
    min: 1
  show_filter_by_tag:
    client: true
    default: false
    refresh: true
  max_tags_in_filter_list:
    client: true
    default: 30
    min: 1
    refresh: true
  tags_sort_alphabetically:
    client: true
    default: false
    refresh: true
  tags_listed_by_group:
    client: true
    default: false
  allow_staff_to_tag_pms:
    default: false
  suppress_overlapping_tags_in_list:
    default: false
    client: true
  remove_muted_tags_from_latest:
    client: true
    type: enum
    default: always
    enum: RemoveMutedTagsFromLatestSiteSetting
  force_lowercase_tags:
    default: true
    client: true

dashboard:
  dashboard_hidden_reports:
    client: true
    type: list
    list_type: compact
    default: ""
    allow_any: true
  dashboard_visible_tabs:
    client: true
    type: list
    list_type: compact
    default: "moderation|security|reports"
    allow_any: false
    choices:
      - moderation
      - security
      - reports
  dashboard_general_tab_activity_metrics:
    client: true
    type: list
    list_type: compact
    default: "page_view_total_reqs|visits|time_to_first_response|likes|flags|user_to_user_private_messages_with_replies"
    allow_any: false
    choices:
      - page_view_total_reqs
      - visits
      - time_to_first_response
      - likes
      - flags
      - user_to_user_private_messages_with_replies
      - signups

但说实话,我想我可能只是挂载带有其设置的配置文件。

我知道大家很喜欢这个启动器,但 Docker Compose 呢?我知道这个问题已经被提出过上百次了,而且从我的观察来看,它确实对大家运行得很好 :slight_smile: 但还有整整一个 Docker 开发者群体,他们非常了解其工作原理……如果能提供一个 Docker Compose 示例那就太棒了!

我认为您应该更倾向于支持 discoursey,而减少对 dockery 的支持。关于这一点已有许多说明,帮助大家理解为何要这样处理。

嗯,不行,因为 Docker 是运行应用程序的标准方式;将其封装在一个定制的脚本中……无异于重复造轮子。

docker-compose 是一份运行手册,可以交给任何中级服务提供商,他们都知道如何处理。它还能完美集成到 SaltStack 等工具中,而脚本则不行。

当然,我理解原因。这个脚本是多年前 Docker 刚推出时创建的……正如我之前所说,很明显它对支持人员非常有帮助。

另外,当你迁移到 Kubernetes 时……那将会很有趣。

而且,现在四处看看,已经有大量的人在为 Discourse 和 docker-compose 创建 Helm Chart……如果能提供一些支持就太好了。

不过没关系……我现在正在使用 launcher,并从中提取我需要的部分 :slight_smile:

我建议您阅读此讨论:Can Discourse ship frequent Docker images that do not need to be bootstrapped?

谢谢,我会仔细阅读。

但重要的是要知道,Docker 已不再陌生;如果不能提供恰当的支持,将阻碍大型组织考虑采用它。

一切顺利……请继续保持这种热情,感谢你们的投入。

这并不属实,Discourse 已被互联网上一些最大的社区所采用。

大型组织要么雇佣了不愿依赖“喂到嘴边”式解决方案的技术人员,要么乐于将相关工作外包给像 CDCK 这样的公司。

对于中型甚至大型社区而言,标准安装方式没有任何问题。如果你想知道 launcher 如何与 Docker 交互,源代码就在其中,可供深入查阅。