你好,
首先,感谢你们提供了市面上最好的论坛软件。
我遇到了一个问题:在重启运行 Discourse 的 Docker 容器时,Discourse 总是尝试重新安装自己。
我选择了多容器配置(默认情况下更优)。
每次重启 Discourse 容器时,该进程总是尝试重新安装。
我原本以为它会检测到数据库已存在并直接可用,但它总是尝试重新安装,并抱怨 ID 冲突。
是否有某个设置可以使其不再重新安装自己?
提前感谢。
你好,
首先,感谢你们提供了市面上最好的论坛软件。
我遇到了一个问题:在重启运行 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 呢?我知道这个问题已经被提出过上百次了,而且从我的观察来看,它确实对大家运行得很好
但还有整整一个 Docker 开发者群体,他们非常了解其工作原理……如果能提供一个 Docker Compose 示例那就太棒了!
我认为您应该更倾向于支持 discoursey,而减少对 dockery 的支持。关于这一点已有许多说明,帮助大家理解为何要这样处理。
嗯,不行,因为 Docker 是运行应用程序的标准方式;将其封装在一个定制的脚本中……无异于重复造轮子。
docker-compose 是一份运行手册,可以交给任何中级服务提供商,他们都知道如何处理。它还能完美集成到 SaltStack 等工具中,而脚本则不行。
当然,我理解原因。这个脚本是多年前 Docker 刚推出时创建的……正如我之前所说,很明显它对支持人员非常有帮助。
另外,当你迁移到 Kubernetes 时……那将会很有趣。
而且,现在四处看看,已经有大量的人在为 Discourse 和 docker-compose 创建 Helm Chart……如果能提供一些支持就太好了。
不过没关系……我现在正在使用 launcher,并从中提取我需要的部分 ![]()
谢谢,我会仔细阅读。
但重要的是要知道,Docker 已不再陌生;如果不能提供恰当的支持,将阻碍大型组织考虑采用它。
一切顺利……请继续保持这种热情,感谢你们的投入。
这并不属实,Discourse 已被互联网上一些最大的社区所采用。
大型组织要么雇佣了不愿依赖“喂到嘴边”式解决方案的技术人员,要么乐于将相关工作外包给像 CDCK 这样的公司。
对于中型甚至大型社区而言,标准安装方式没有任何问题。如果你想知道 launcher 如何与 Docker 交互,源代码就在其中,可供深入查阅。